《嵌入式人工智能技术应用》课件 项目一 使用OpenCV实现人脸检测_第1页
《嵌入式人工智能技术应用》课件 项目一 使用OpenCV实现人脸检测_第2页
《嵌入式人工智能技术应用》课件 项目一 使用OpenCV实现人脸检测_第3页
《嵌入式人工智能技术应用》课件 项目一 使用OpenCV实现人脸检测_第4页
《嵌入式人工智能技术应用》课件 项目一 使用OpenCV实现人脸检测_第5页
已阅读5页,还剩222页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用项目引导案例随着电子商务等应用的发展,人脸识别成为最有潜力的生物身份验证手段,这种应用背景要求自动人脸识别系统能够对一般图像具有一定的识别能力,由此所面临的一系列问题使得人脸检测开始作为一个独立的课题受到研究者的重视。今天,人脸检测的应用背景已经远远超出了人脸识别系统的范畴,在基于内容的检索、视频目标检测等方面有着重要的应用价值。思考一下,大家见过哪些场合用到人脸检测?项目引导案例OpenCV实现图像的读取与保存任务一职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存了解opencv的使安装方法;掌握opencv读取图像方式;掌握opencv存储图像方式。能使用VideoCapture方法实例化摄像头对象;能使用set方法设置采集图像的像素;能使用namedWindow方法构建图像窗口;能使用read方法读取图像;能使用imshow方法展示图像;能使用imwrite方法保存图像。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存

本实验将实现使用USB摄像头完成图像采集、图像显示以及图像保存。任务描述任务要求使用VideoCapture方法实例化摄像头对象;使用set方法设置采集图像的像素;使用namedWindow方法构建图像窗口;使用read方法读取图像;使用imshow方法展示图像;使用imwrite方法保存图像。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存任务分析实现opencv采集图像可能会涉及到哪些步骤?根据自己的了解可能会用到哪些硬件和软件?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称OpenCV实现图像的读取与保存计划方式自主设计计划要求请用9个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

789通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存OpenCV204知识储备JupyterLab1Linux硬件设备3组成部分04菜单栏启动项文件栏插件栏交互模式Python交互式模式可以直接输入代码,然后执行,并立刻得到结果模块化界面可以在同一个窗口同时打开好几个notebook或文件同一文档多视图使你能够实时同步编辑文档并查看结果

支持多种数据格式你可以查看并处理多种数据格式主要特点04菜单功能文件文件和目录有关的操作编辑编辑文档和其他活动有关的动作。查看更改JupyterLab外观的动作运行用于在不同活动(例如笔记本和代码控制台)中运行代码的动作内核用于管理内核的操作,内核是运行代码的独立过程标签停靠面板中打开的文档和活动的列表设置常用设置和高级设置编辑器编辑JupyterLab和内核帮助链接的列表JupyterLab菜单栏菜单栏04操作按钮功能

保存内容,并创建检查点下方插入单元格剪切选中的单元格复制选中的单元格从剪切板粘贴单元格运行选定的单元格并向前移动终端内核JupyterLab和内核帮助链接的列表重启内核,并重新运行整个notebook单元格状态JupyterLab用户界面操作栏用户界面操作栏04快捷键功能Enter

转入编辑模式Shift-Enter运行本单元,选中下个单元Ctrl-Enter运行本单元Alt-Enter运行本单元,在其下插入新单元Y单元转入代码状态M单元转入markdown状态R单元转入raw状态A在上方插入新单元B在下方插入新单元DD删除选中单元格JupyterLab常用快捷键常用快捷键04OpenCV04知识储备JupyterLab21Linux硬件设备3

Opencv简介04

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。GaryBradsky于1999年在英特尔创立OpenCV,并于2000年发布第一个版本。OpenCV现在支持与计算机视觉和机器学习相关的众多算法,并且正在日益扩展。OpenCV支持各种编程语言,如C++、Python、Java等,可在不同的操作系统上使用。04OpenCV概述思考一下,OpenCV可在哪些操作系统上使用?

OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(IntegratedPerformancePrimitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。04OpenCV优势优势:

Opencv-python简介04

opencv-python是由opencvC++实现并封装的Python库旨在解决计算机视觉问题。opencv-python使用numpy,这是一个高度优化的数据操作库,具有Matlab风格的语法。所有OpenCV数组结构都转换为numpy数组。这也使得与使用numpy的其他库(如scipy和matplotlib)集成更容易。

与C/C++等语言相比,Python速度较慢。也就是说,Python可以使用C/C++轻松扩展,这使我们可以在C/C++中编写计算密集型代码,并创建可用作Python模块的Python包装器。这给我们带来了两个好处:①

代码与原始C/C++代码一样快(因为它是在后台工作的实际C++代码),②

在Python中编写代码比使用C/C++更容易。OpenCV-Python是原始OpenCVC++实现的Python包装器。04OpenCV-python优势优势:VideoCapture()05创建VideoCapture对象的时候,我们需要传入一个合适的摄像头编号。cv2.VideoCapture(0)VideoCapture()05参数说明:VideCapture接受的参数为序号0:默认为开发板上的摄像头(如果有的话)/USB摄像头webcam1:USB摄像头22:USB摄像头3以此类推-1:代表最新插入的USB设备cap=cv2.VideoCapture(0)实例化一个对象赋值给captime.sleep(2)设置睡眠2秒,为了给摄像头有打开的时间OpenCV04知识储备JupyterLab21Linux硬件设备32Linux硬件设备05linux是以什么方式访问设备?

linux中是以访问文件的方式访问设备。就是将设备当做一个特殊的文件来进行读写等操作。因为Linux系统将所有的硬件设备都当做文件来处理,当使用光驱等硬件设备时,就必须将其挂载到系统中,只有这样Linux才能识别。当在Linux系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。Linux硬件设备05在linux中任何对象都是文件,查看当前是否有摄像头挂载到Ubuntu上,可以执行下面的命令行:-l:列出文件的详细信息。-t:以时间排序。-r:对目录反向排序。-h:显示出了文件的大小ls参数:/dev/video*:表示/dev/目录下所有以video为开头的文件!ls-ltrh/dev/video*职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存05任务实施图像的读取与显示2Linux下查看USB摄像头设备1利用opencv采集图像05!ls-ltrh/dev/video*查看video设备在linux中任何对象都是文件,查看当前是否有摄像头挂载到Ubuntu上,可以执行下面的命令行:!ls-ltrh/dev/video*ls参数:-l:列出文件的详细信息;-t:以时间排序;-r:对目录反向排序;-h:显示出了文件的大小。/dev/video*:表示/dev/目录下所有以video为开头的文件。05任务实施图像的读取与显示2Linux下查看USB摄像头设备142设置与创建显示画面1创建摄像头实例3图像读取与显示图像保存与释放资源图像的读取与显示05图像的读取与显示已经查看到摄像头信息,接下来使用opencv从USB摄像头读取图像,并在开发板中显示出来。图像的读取与显示05importcv21.创建摄像头实例(1)导入cv2python-opencv在python中的包名称叫做cv2。cv2实现图像处理和计算机视觉方面的很多通用算法。cap=cv2.VideoCapture(0)(2)创建摄像头实例opencv读取usb摄像头的图像,需要用到VideoCapture类,创建VideoCapture对象的时候,我们需要传入一个合适的摄像头编号。cv2.VideoCapture(0)参数说明:VideCapture接受的参数为序号;0:默认为开发板上的摄像头(如果有的话)/USB摄像头webcam;1:USB摄像头2;2:USB摄像头3以此类推;-1:代表最新插入的USB设备。05cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)#画面宽度设定为1920cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)#画面高度度设定为10802.设置与创建显示画面(1)设置显示画面接下来利用cap.set方法对窗口像素进行设置

cap.set(propId,value)参数说明:propId表示VideoCaptureProperties中的属性标识符。cv2.CAP_PROP_FRAME_WIDTH表示设置摄像头采集画面宽的像素大小;cv2.CAP_PROP_FRAME_HEIGHT表示设置摄像头采集画面高的像素大小。value表示属性标识符的值,下面代码中,把采集画面像素宽度设置为1920,高度设置为1080。dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO|cv2.WINDOW_GUI_EXPANDED)cv2.setWindowProperty('image_win',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)#全屏展示(2)创建显示窗口dWindow(winname,flags):构建视频的窗口,用于放置图片。参数说明:winname:表示窗口的名字,可用作窗口标识符的窗口名称。flags:用于设置窗口的属性,常用属性如下:WINDOW_NORMAL:可以调整大小窗口;WINDOW_KEEPRATIO:保持图像比例;WINDOW_GUI_EXPANDED:绘制一个新的增强GUI窗口。图像的读取与显示图像的读取与显示05ret,frame=<1>3.图像读取与显示(1)读取图像使用cap.read()获取一帧图片,cap.read()返回值有两个,分别赋值给ret,frame。ret:若画面读取成功,则返回True,反之返回False;frame:是读取到的图片对象(numpy的ndarray格式)。cv2.imshow('image_win',frame)cv2.waitKey(100)(2)显示图片cv2.imshow(winname,mat)函数可以在窗口中显示图像。参数说明:winname:窗口名称(也就是我们对话框的名称),它是一个字符串类型;mat:是一帧的画面图像。可以创建任意数量的窗口,但必须使用不同的窗口名称;cv2.waitKey:waitkey控制着imshow的持续时间;当imshow之后不跟waitkey时,相当于没有给imshow提供时间展示图像,只会有一个空窗口一闪而过;cv2.waitKey(100)表示窗口中显示图像时间为100毫秒;cv2.imshow之后一定要跟cv2.waitKey函数。图像的读取与显示05cv2.imwrite('图像保存.png',frame)4.图像保存与释放资源(1)保存图片cv2.imwrite(filename,img)。参数说明:filename:要保存的文件名;img:要保存的图像。cap.release()#释放VideoCapturecv2.destroyAllWindows()#销毁所有的窗口(2)释放资源cap.release():停止捕获视频,用cv2.VideoCapture(0)创建对象,操作结束后要用cap.release()来释放资源,否则会占用摄像头导致摄像头无法被其他程序使用;cv2.destroyAllWindows():用来删除所有窗口。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成创建摄像头实例、设置与创建显示画面、图像读取与显示、图像保存与释放资源。(40分)40分

完成创建摄像头实例、设置与创建显示画面、图像读取与显示。(30分)完成创建摄像头实例、设置与创建显示画面。(20分)完成创建摄像头实例。(10分)没有创建摄像头实例。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一OpenCV实现图像的读取与保存任务拓展08使用dWindow创建两个图像显示窗口,实现下列功能:1窗口1名称为“win1”,窗口2名称为“win2”;1.创建窗口时,将窗口名称设置为第一个参数;2.cv2.imshow()的第一个参数为要显示图像的窗口名称。解题

思路提示任务要求2采集的图像显示在窗口2上。谢谢大家学习项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用线程的调用任务二职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用了解线程原理;能够编写自定义线程类并进行调试。能使用Thread方法实例化线程;能使用实例化线程的start方法启动线程;能使用标志位退出线程;能使用自定义类继承Thread实例化线程。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用

本实验将实现用线程类和继承线程类两种方式启动线程,并执行线程任务。任务描述任务要求使用Thread方法实例化线程;使用实例化线程的start方法启动线程;使用标志位退出线程;使用自定义类继承Thread实例化线程。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务分析谈谈线程和进程之间的关系,他们有什么区别?回忆一下Thread类的几种常用方法?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称线程的调用计划方式自主设计计划要求请用5个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08线程的调用04知识储备线程threading库23进程1进程04进程指正在运行的程序。每一个进程提供执行程序所需的所有资源。每个还要有至少一个线程,因为每一个进程启动时都会最先产生一个线程,即主线程,然后主线程可以再创建其他的子线程。进程04

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。

进程的概念进程04狭义定义:进程是正在运行的程序的实例(aninstanceofacomputerprogramthatisbeingexecuted)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的定义进程04进程的状态1、三态模型一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态:(1)运行(running)态:进程占有处理器正在运行;(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行;(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。进程04进程的状态1、五态模型在一个实际的系统里进程的状态及其转换比上节叙述的复杂一些,例如,引入专门的新建态(new)和终止态(exit)。线程04知识储备进程21threading库3线程是操作系统能够进行运算调度的最小单位,是进程中的实际执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程中可以包含多个线程,可以称之为多线程程序。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,

Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。04线程思考一下,针对多任务我们该怎么减少计算时间?在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性:1)轻型实体;2)独立调度和分派的基本单位;3)可并发执行;4)共享进程资源。04线程线程的特点1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见;2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性;3)调度和切换:线程上下文切换比进程上下文切换要快得多;4)在多线程OS中,进程不是一个可执行的实体。04线程与进程的区别线程04知识储备进程21threading库3threading库04

进程有可以拥有多个线程,所以threading库提供了管理多个线程执行的API,允许程序在同一个进程空间并发地运行多个操作。

threading库是python的多线程库,利用threading库我们可以轻松实现多线程任务。Python的标准库提供了两个模块:

_thread

threading

_thread是低级模块,threading是高级模块,对_thread进行了封装。

绝大多数情况下,我们只需要使用threading这个高级模块。

threading模块中最核心的内容是Thread这个类。

创建Thread对象,然后执行线程,每个Thread对象代表一个线程,每个线程可以让程序处理不同的任务,这就是多线程编程。04threading库04threading库线程对象递归锁对象锁对象栅栏对象事件对象定时器对象threading模块中包含了关于线程操作的丰富功能threading.Thread(group,target=None,name=None,args=(),kwargs={},daemon=None)职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用启动线程的第一种方式2初识线程2105启动线程的第二种方式3初识线程05importthreadingimporttime进程是由若干线程组成的,一个进程至少有一个线程。多任务可以由多进程完成,也可以由一个进程内的多线程完成,每条线程并行执行不同的任务。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。threading模块中最核心的内容是Thread这个类。创建Thread对象,然后执行线程,每个Thread对象代表一个线程,每个线程可以让程序处理不同的任务,这就是多线程编程。启动线程的第一种方式2初识线程2105启动线程的第二种方式32线程退出1创建自定义函数启动线程的第一种方式05启动线程的第一种方式第一种方式:创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行。即直接创建Thread对象。函数可以通过threading.Thread(target)方法传递进Thread对象里,进而启动线程。threading.Thread(target):用于创建线程。参数说明:target:是线程函数变量参数,用于传入函数参数。启动线程的第一种方式05defVideo():print("这是一个线程")1.创建自定义函数(1)创建函数Video()t=threading.Thread(target=Video)(2)实例化线程t.start()(3)启动线程启动线程的第一种方式05working=TruedefVideo():whileworking:print("这是一个线程")time.sleep(2)print("线程已退出")t=threading.Thread(target=Video)t.start()2.线程退出threading模块并没有提供停止线程的方法,一旦线程对象调用start()方法后,只能等到对应的方法函数运行完毕,线程才能停止。如果线程中有循环的话,线程将会一直执行,直到循环结束,再运行循环后的语句。因此如果需要提前退出线程,即要先退出循环,一般的方法就是循环地判断一个标志位working,一旦标志位到达到预定的值,就退出循环。这样就能做到退出线程了。设置一个标志位变量working,初始值赋为True。定义了函数Video(),当标志位working为True时,该函数将循环打印。将函数Video()作为参数传入threading.Thread中实例化一个Thread对象,赋值为t。working=False启动线程的第一种方式2初识线程2105启动线程的第二种方式3启动线程的第二种方式05第二种方式:直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的class里。即编写一个自定义类继承Thread,然后复写run()方法,在run()方法中编写任务处理代码,然后创建这个Thread的子类。将函数封装成线程类,便于线程的调用与停止,大多用于这种方式来启动线程,属于面向对象编程。self:Python中就规定,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self,以self为前缀的变量都可供类中的所有方法使用;def__init__(self):在实例化类时定义变量;super:函数是用于调用父类(超类)的一个方法。这里表示继承线程类threading.Thread。defrun(self):把要执行的代码写到run函数里面,线程在创建后,通过.start()会直接运行run函数;退出线程的方式:在类中定义标志位,通过编写stop函数来控制标志位,达到退出循环。这样就能做到退出线程了。defstop(self):线程停止函数,用于控制标志位变量,从而达到控制线程。启动线程的第二种方式05classvideoThread(threading.Thread):def__init__(self):super(videoThread,self).__init__()self.working=True#循环标志位

defrun(self):#start()后运行run函数

whileself.working:print("这是一个线程")time.sleep(2)defstop(self):self.working=Falseprint("退出线程")(1)定义线程类a=videoThread()(2)实例化线程类a.start()(3)启动线程a.stop()(4)关闭线程职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成线程第一种启动方式、线程第二种启动方式。(40分)40分

完成线程第一种启动方式。(20分)没有线程第一种启动方式。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务拓展08采用方式2调用线程,实现下列功能:1执行函数Video无限循环每隔2秒打印“这是一个xx线程”,xx为传入的参数值,比如传入”测试”;1.__init__()方法要设置参数;2.用self.xxx来接收传入的参数。解题

思路提示任务要求2能停止线程。谢谢大家学习项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用OpenCV实现视频流的调用任务三职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用掌握视频流的调用方法。能使用opencv和while循环构建视频流。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用

本实验将实现在触摸屏实时显示USB摄像头采集的画面。任务描述任务要求触摸屏能实时显示USB摄像头采集的画面;能随时退出视频流调用。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三使用OpenCV实现人脸检测任务分析实现opencv调用视频流可能会涉及到哪些步骤?根据自己的了解说说视频和图像之间的关系?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称OpenCV实现视频流的调用计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用04知识储备线程threading库23进程1进程04进程指正在运行的程序。每一个进程提供执行程序所需的所有资源。每个还要有至少一个线程,因为每一个进程启动时都会最先产生一个线程,即主线程,然后主线程可以再创建其他的子线程。进程04

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。

进程的概念进程04狭义定义:进程是正在运行的程序的实例(aninstanceofacomputerprogramthatisbeingexecuted)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的定义进程04进程的状态1、三态模型一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态:(1)运行(running)态:进程占有处理器正在运行。(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。进程04进程的状态1、五态模型在一个实际的系统里进程的状态及其转换比上节叙述的复杂一些,例如,引入专门的新建态(new)和终止态(exit)。线程04知识储备进程21threading库3线程是操作系统能够进行运算调度的最小单位,是进程中的实际执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程中可以包含多个线程,可以称之为多线程程序。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,

Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。04线程思考一下,针对多任务我们该怎么减少计算时间?在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性:1)轻型实体2)独立调度和分派的基本单位。3)可并发执行。4)共享进程资源。04线程线程的特点1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。3)调度和切换:线程上下文切换比进程上下文切换要快得多。4)在多线程OS中,进程不是一个可执行的实体。04线程与进程的区别线程04知识储备进程21threading库3threading库04

进程有可以拥有多个线程,所以threading库提供了管理多个线程执行的API,允许程序在同一个进程空间并发地运行多个操作。

threading库是python的多线程库,利用threading库我们可以轻松实现多线程任务。Python的标准库提供了两个模块:

_thread

threading

_thread是低级模块,threading是高级模块,对_thread进行了封装。

绝大多数情况下,我们只需要使用threading这个高级模块。

threading模块中最核心的内容是Thread这个类。

创建Thread对象,然后执行线程,每个Thread对象代表一个线程,每个线程可以让程序处理不同的任务,这就是多线程编程。04threading库04threading库线程对象递归锁对象锁对象栅栏对象事件对象定时器对象threading模块中包含了关于线程操作的丰富功能threading.Thread(group,target=None,name=None,args=(),kwargs={},daemon=None)职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用回顾线程的调用2回顾图像的读取与保存2105OpenCV读入USB摄像头拍摄的画面显示至开发板3回顾图像的读取与保存05importcv2#引入opencv库函数importtime#打开摄像头cap=cv2.VideoCapture(0)print("摄像头是否已经打开?{}".format(cap.isOpened()))#画面宽度设定为1920高度度设定为1080cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)#构建视频的窗口dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO)cv2.setWindowProperty('image_win',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)#全屏展示#读取摄像头图像ret,frame=cap.read()#更新窗口“image_win”中的图片cv2.imshow('image_win',frame)#等待按键事件发生等待5000mscv2.waitKey(5000)#保存图片cv2.imwrite("./exp/img_3.1.png",frame)#释放VideoCapturecap.release()#销毁所有的窗口cv2.destroyAllWindows()回顾线程的调用2回顾图像的读取与保存2105OpenCV读入USB摄像头拍摄的画面显示至开发板3启动线程的第二种方式05classvideoThread(threading.Thread):def__init__(self):super(videoThread,self).__init__()self.working=True#循环标志位

defrun(self):#start()后运行run函数

whileself.working:print("这是一个线程")time.sleep(2)defstop(self):self.working=Falseprint("退出线程")(1)定义线程类a=videoThread()(2)实例化线程类a.start()(3)启动线程a.stop()(4)关闭线程回顾线程的调用2回顾图像的读取与保存2105OpenCV读入USB摄像头拍摄的画面显示至开发板3OpenCV读入USB摄像头拍摄的画面显示至开发板05(1)定义线程类通过结合任务1和任务2中的内容,使用OpenCV从USB摄像头读取视频流,并在开发板中显示出来。OpenCV读入USB摄像头拍摄的画面显示至开发板05a=videoThread()(2)实例化线程类实例化一个videoThread()线程类,实例化对象为a。a.start()(3)启动线程线程对象a调用start()方法,开始执行videoThread()线程类中的run()函数。a.stop()(4)关闭线程实例化对象a调用videoThread()线程类中的stop()函数,来退出线程。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成回顾图像的读取与保存、回顾线程的调用、视频流图像的显示与退出。(40分)40分

完成回顾图像的读取与保存、回顾线程的调用。(30分)完成回顾图像的读取与保存。(20分)没有完成回顾图像的读取与保存。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三使用OpenCV实现人脸检测任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV实现视频流的调用任务拓展081反复读取指定文件夹里的图片形成视频流。任务要求谢谢大家学习项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用OpenCV进行视频录制与视频读取任务四职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四OpenCV进行视频录制与视频读取了解opencv录制和读取视频原理;了解基础的视频格式与FourCC。能使用VideoWriter_fourcc方法设置视频编解码的方式;能使用VideoWriter方法进行视频录制;能使用VideoCapture方法读取视频。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV进行视频录制与视频读取

本实验将实现把USB摄像头实时采集并显示在触摸屏的画面存成视频文件,以及读取avi格式的视频。任务描述任务要求将USB摄像头采集的画面按照指定路径和文件名存为视频文件;读取指定路径下的视频文件,在notebook呈现视频画面。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV进行视频录制与视频读取任务分析实现opencv录制和读取视频可能会涉及到哪些步骤?根据自己的了解说说视频有哪些参数?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称OpenCV进行视频录制与视频读取计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务三OpenCV进行视频录制与视频读取04知识储备FourCC2视频编码1VideoWriter()3视频编码04所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。由于连续的帧之间相似性极高,为便于储存传输,我们需要对原始的视频进行编码压缩,以去除空间、时间维度的冗余。视频编码04

视频编码格式也称为视频文件格式,是针对不同平台、程序和设备优化数字视频文件的方法。视频编码格式有许多种类,但每一种都包含两个主要组成部分,即编解码器和容器。编解码器和容器指定了存储、传输和观看未压缩视频输入的方式。在流式传输中有一点很重要,编码格式应与尽可能广泛的设备兼容,以便所有用户都可以观看流视频。

正确选择视频格式取决于三个主要因素:存储可用性、视频输出质量,以及与不同视频播放器或程序的兼容性。什么是视频编码格式?FourCC04知识储备视频编码213VideoWriter()

FourCC全称Four-CharacterCodes,代表四字符代码,它是一个32位的标示符,其实就是typedefunsignedintFOURCC,是一种独立标示视频数据流格式的四字符代码。FourCC常用视频编解码如下。04FourCC标志作用VideoWriter_fourcc('D','I','V','X')MPEG-4编码VideoWriter_fourcc('P','I','M','1')MPEG-1编码VideoWriter_fourcc('M','J','P','G')JPEG编码(运行效果一般)VideoWriter_fourcc('M','P','4','2')MPEG-4.2编码VideoWriter_fourcc('D','I','V','3')MPEG-4.3编码VideoWriter_fourcc('U','2','6','3')H263编码VideoWriter_fourcc('I','2','6','3')H263I编码VideoWriter_fourcc('F','L','V','1')FLV1编码FourCC04知识储备视频编码312VideoWriter()VideoWriter()04cv2.VideoWriter_fourcc(brief):用于设置视频编解码的方式brief:设置编解码方式返回值:返回一个fourcc代码VideoWriter(filename,fourcc,fps,frameSize):创建视频流写入对象filename:要保存的文件的路径fourcc:fourcc指定编码器fps:要保存的视频的帧率frameSize:要保存的文件的画面尺寸videoName变量定义为video_record.avi,字符串类型。codec变量定义为MJPG格式。fps变量定义为写入帧率为20frameSize变量定义视频帧大小为(640,480)职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四OpenCV进行视频录制与视频读取05任务实施视频读取2视频录制142创建VideoWriter实例1创建videocapture实例3写入帧图像封装成类进行视频录制视频录制05视频录制OpenCV可以针对摄像头或视频进行处理,将需要的画面保留下来,保存成一个.avi的文件。OpenCV进行录制视频的相关操作,主要涉及OpenCV的VideoWriter对象,VideoWriter是用来创建视频文件的类。注意:OpenCV只支持.avi的格式,而且生成的视频文件不能大于2GB,而且不能添加音频。视频录制05importcv21.创建videocapture实例(1)导入cv2python-opencv在python中的包名称叫做cv2。cap=cv2.VideoCapture(0)(2)创建videocapture实例录制视频的第一步要实例化一个VideoCapture对象。用于从USB摄像头读入图片。创建VideoCapture对象的时候,我们需要传入一个合适的摄像头编号。cv2.VideoCapture(0):0表示默认为笔记本上的摄像头(如果有的话)/USB摄像头。视频录制05video_path='./exp/video_record.avi'#指定视频编解码方式为MJPGcodec=cv2.VideoWriter_fourcc(*'MJPG')fps=20.0#指定写入帧率为20frameSize=(640,480)#指定窗口大小#创建VideoWriter对象out=cv2.VideoWriter(video_path,codec,fps,frameSize)2.创建VideoWriter实例opencv中视频录制需要借助VideoWriter对象,其原理是将从VideoCapture中读入图片,不断地写入到VideoWrite的数据流中形成视频。cv2.VideoWriter_fourcc(brief):用于设置视频编解码的方式。brief:设置编解码方式。返回值:返回一个fourcc代码。VideoWriter(filename,fourcc,fps,frameSize):创建视频流写入对象。filename:要保存的文件的路径;fourcc:fourcc指定编码器;fps:要保存的视频的帧率;frameSize:要保存的文件的画面尺寸。视频录制05ret,frame=cap.read()3.写入帧图像(1)读取图像使用cap.read()获取一帧图片,cap.read()返回值有两个,分别赋值给ret,frame。ret:若画面读取成功,则返回True,反之返回False;frame:是读取到的图片对象(numpy的ndarray格式)。out.write(frame)(2)写入帧图像使用上述创建的out对象,调用.write()方法,将把VideoCapture中读到的图片写入到VideoWrite的数据流中。cap.release()out.release()(3)最后资源释放在录制结束后,我们要释放资源:cap.release():停止捕获视频;out.release():释放创建视频流写入对象。视频录制054.封装成线程类进行视频录制1、在init函数中传入videoName参数用于传入保存的视频文件名,定义标志位变量、打开摄像头、定义VideoWriter的3个参数并创建对象;2、使用本文1.5追加帧结合循环,通过循环的方式反复的将读取到的每一帧写入到VideoWrite的数据流中,就能够进行视频录制;3、在run函数中构建视频窗口:循环体里读取摄像头图像、写入帧图像、更新显示图片、图像显示的时长。4、在stop函数中定义标志位变量、摄像头释放、释放视频流写入对象、窗口释放;5、用线程的方式运行函数,再对视频进行录制与退出。视频录制05a=videoRecordThread('./exp/video_record.avi')a.start()4.封装成线程类进行视频录制启动线程实例化一个videoRecordThread()线程类,实例化时传入视频录制要保存的文件名video_record.avi,实例化对象为a。线程对象a调用start()方法,开始执行videoRecordThread()线程类中的run()函数。a.stop()关闭线程实例化对象a调用videoRecordThread()线程类中的stop()函数,来退出线程,停止录制。05任务实施视频读取2视频录制1视频读取051、在init函数中传入videoName参数用于传入读取的视频文件名,定义标志位变量、打开视频文件;2、在run函数中构建视频窗口:循环体中读取摄像头图像、更新显示图片、图像显示的时长;循环体结束后摄像头释放、窗口释放。3、在stop函数中定义标志位变量、摄像头释放、窗口释放;4、再对视频进行播放。视频读取05a=videoReadThread('./exp/video_record.avi')a.start()启动线程实例化一个videoReadThread()线程类,实例化时传入视频要读取的文件名,这里文件名为上文保存的video_record.avi,实例化对象为a。线程对象a调用start()方法,开始执行videoReadThread()线程类中的run()函数。。a.stop()关闭线程通过实例化对象a调用videoReadThread()线程类中的stop()函数,来提前退出线程,停止播放。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四OpenCV进行视频录制与视频读取任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成导入包、读取图像、图像录制、视频流录制、视频读取。(40分)40分

完成导入包、读取图像、图像录制、视频流录制。(30分)完成导入包、读取图像、图像录制。(20分)完成导入包、读取图像。(10分)没有完成导入包、读取图像。(0分)3核心素养(20%)具有良好的自主学习能力、分析解决问题的能力、整个任务过程中有指导他人(20分)20分

具有较好的学习能力和分析解决问题的能力,任务过程中无指导他人(15分)能够主动学习并收集信息,有请教他人进行解决问题的能力(10分)不主动学习(0分)4课堂纪律(20%)设备无损坏、设备摆放整齐、工位区域内保持整洁、无干扰课堂秩序(20分)20分

设备无损坏、无干扰课堂秩序(15分)无干扰课堂秩序(10分)干扰课堂秩序(0分)总得分1、请参照评价标准完成自评和对其他小组的互评。2、各组请代表分析本组任务实施经验。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四OpenCV进行视频录制与视频读取任务小结07职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务四OpenCV进行视频录制与视频读取任务拓展08创建两个线程分别用于录制视频和读取视频,要求如下:1视频存储在当前路径,格式为flv;1.视频格式取决于FourCC;解题

思路提示任务要求2读取前面录制的flv格式视频。谢谢大家学习项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用

图像人脸检测任务五职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务五图像人脸检测了解人脸检测原理;理解HaarCascade级联分类器的使用方法;理解ROI的定义。能使用imread方法读取图像;能使用cvtColor方法转换图像色彩;能使用CascadeClassifier方法加载HaarCascade模型检测图像人脸;能使用rectangle方法绘制人脸矩形框。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务五图像人脸检测

本实验将实现用opencv自带的人脸库对读取的图片进行人脸检测并标注人脸框。任务描述任务要求使用级联分类器对单张图像进行人脸检测;基于线程类使用级联分类器对USB摄像头采集的画面进行人脸检测;标注人脸框并进行显示。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务五图像人脸检测任务分析实现人脸检测可能会涉及到哪些步骤?根据自己的了解说说人脸检测和人脸识别的区别?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称图像人脸检测计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

678

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务五图像人脸检测04知识储备Cascade模型2人脸检测13ROI人脸检测04

人脸检测是指对于任意一幅给定的图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是则返回人脸的位置、大小和姿态。

通过人脸检测后再进行人脸识别就可以实现日常生活中应用。例如:扫脸解锁手机,扫脸支付,扫脸开门。Cascade模型04知识储备人脸检测213ROICascade分类器04CascadeClassifier,是Opencv中做人脸检测的时候的一个级联分类器。现在有两种选择:一是使用老版本的CvHaarClassifierCascade函数,一是使用新版本的CascadeClassifier类。老版本的分类器只支持类Haar特征,而新版本的分类器既可以使用Haar,也可以使用LBP特征。CascadeClassifie级联分类器Cascade分类器04OpenCV中人脸识别是通过Haar特征的级联分类器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论