《嵌入式人工智能技术应用》课件 2.1-基于人脸识别算法实现人脸检测_第1页
《嵌入式人工智能技术应用》课件 2.1-基于人脸识别算法实现人脸检测_第2页
《嵌入式人工智能技术应用》课件 2.1-基于人脸识别算法实现人脸检测_第3页
《嵌入式人工智能技术应用》课件 2.1-基于人脸识别算法实现人脸检测_第4页
《嵌入式人工智能技术应用》课件 2.1-基于人脸识别算法实现人脸检测_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

项目二使用计算机视觉算法实现图像识别嵌入式人工智能技术应用项目引导案例计算机视觉(ComputerVision,CV)是一门研究如何让计算机达到人类那样“看”的学科。也就是用计算机来实现对客观的三维世界的识别与理解,这种三维理解是指被观察对象的形状、尺寸、离开观察点的距离、姿态、质地、运动特征等的理解,更准确点说,它是利用摄像机和电脑代替人眼使得计算机拥有类似于人类的那种对目标进行分割、分类、识别、跟踪、判别决策的功能。思考一下,大家见过哪些场合用到计算机视觉?项目引导案例基于人脸识别算法实现人脸检测任务一职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于人脸识别算法实现人脸检测了解人脸检测算法原理;理解如何使用多线程的方式实现图像采集和人脸检测。掌握利用OpenCV实现图像的采集;掌握调用算法接口,进行图像识别。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于人脸识别算法实现人脸检测

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

2

3

4

5

678

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于人脸识别算法实现人脸检测04知识储备pywidgets2人脸检测1人脸检测04随着电子商务等应用的发展,人脸识别成为最有潜力的生物身份验证手段,这种应用背景要求自动人脸识别系统能够对一般图象具有一定的识别能力,由此所面临的一系列问题使得人脸检测开始作为一个独立的课题受到研究者的重视。人脸检测04人脸检测是人脸识别技术的第一个流程,这一步骤所获取的精确度与速率可以直接影响到全部人脸识别技术的特性。除此之外,人脸检测的使用也大大超越了人脸识别技术的范围,在人脸表情识别系统软件、根据內容的查找、视频会议系统、三维人脸实体模型等层面也是有至关重要的使用使用价值。人脸检测04人脸检测方法1.根据常识的方式:

关键利用先验知识将人脸当作人体器官特征的组成,依据双眼、眼眉、嘴、鼻部等部位的特征及其彼此之间的几何图形位置关系来检测人脸。人脸检测04人脸检测方法实际检测方式:

依据常用先验知识的不一样,根据常识的人脸检测方式包含:轮廊标准法、器官分布法、皮肤颜色纹路法、模板配对法等。(1)轮廊标准法(2)器官分布法(3)皮肤颜色纹路法(4)模板配对法人脸检测04人脸检测方法2.根据统计分析的方式:

将人脸检测作为一个“二分类问题”。即应用很多的人脸和非人脸样版练习,结构支持向量机,根据辨别图象中全部很有可能地区归属于那种方式的办法完成人脸的检测,把人脸检测问题转换为统计分析计算机视觉问题。人脸检测04人脸检测方法实际检测方式:

根据统计分析的人脸检测方式包含:特征室内空间法、概率模型法、svm算法法、Adaboost法、神经网络法等。(1)特征室内空间法(2)概率模型法(3)适用向量法(4)AdaBoost法(5)神经网络法人脸检测04

每个人都有一张脸,而且是一个人最重要的外貌特征。这种技术最热门的应用领域有三个方面:人脸检测应用场景人脸检测041.身份认证与安全防护

在这个世界上,只要有门的地方几乎都带有一把锁。当然,在许多安全级别要求较高的区域,例如金融机构、机关办公大楼、运动场馆、甚至重要设施的工地,都需要对大量的人员进行基于身份认证的门禁管理。手机、笔记本电脑等个人电子用品,在开机和使用中经常要用到身份验证功能。人脸检测042.媒体与娱乐

人们的许多娱乐活动都是跟脸部有关的。最著名的娱乐节目之一就是川剧的变脸。在网络虚拟世界里,通过人脸的变化,可以产生大量的娱乐节目和效果。手机、数码相机等消费电子产品中,基于人脸的娱乐项目越来越丰富。QQ、MSN等即时通信工具以及虚拟化身网络游戏也是人脸合成技术的广阔市场。人脸检测043.图像搜索

传统搜索引擎的图像搜索其实还是文字搜索。基于人脸图像识别技术的搜索引擎将会具有广泛的应用前景。2010年推出的百度识图在经历两年多的沉寂之后,开始向另一个方向探索。与之前的区别在于,如果用户给出一张图片,百度识图会判断里面是否出现人脸,如果有,百度识图在相似图片搜索之外,同时会全网寻找出现过的类似人像。人脸检测04一方面是由于人脸内在的变化所引起:(1)人脸具有相当复杂的细节变化,不同的外貌如脸形、肤色等,不同的表情如眼、嘴的开与闭等。(2)人脸的遮挡,如眼镜、头发和头部饰物以及其他外部物体等。人脸检测难点人脸检测04另外一方面由于外在条件变化所引起:(1)由于成像角度的不同造成人脸的多姿态,如平面内旋转、深度旋转以及上下旋转,其中深度旋转影响较大。(2)光照的影响,如图像中的亮度、对比度的变化和阴影等。(3)图像的成像条件,如摄像设备的焦距、成像距离,图像获得的途径等等。人脸检测难点pywidgets04知识储备人脸检测2104pywidgetswidget是可以和用户交互的控件,如文本输入框,滑动条,按钮等,从而在JupyterNotebook中构建可交互的用户界面。

ipywidgets包含了丰富的widget,这些widget既是后端的python对象,也是前端的网页元素,他们可以相互发送和同步信息。ipywidgets04pywidgetsipywidgets里的Image模块在Jupiter网页开发时可以像opencv窗口一样播放视频、预览图像,甚至可以做一个在线播放器以查看远程服务器里的视频、图像文件。04pywidgets使用pip安装pipinstallipywidgets使用conda安装condainstall-cconda-forgeipywidgetsipywidgets安装用户可以使用pip或conda安装当前版本的ipywidgets。04pywidgetswidgets.Text():文本框,构造函数没有形参,常用事件.on_submit(callback)widgets.Button(**kwages):按钮,构造函数的形参包括:description:显示在按钮上的文字tooltip:鼠标悬浮时显示的提示文字icon:图标(没有成功使用过)disabled:bool值,是否禁止交互ipywidgets常用控件04pywidgetswidgets.Box():容器,将其它控件组合在一起的控件,类似.Net中的Panel,在构造时传入一个其它控件的数组,没有常用事件。除此外还有HBox()、VBox()等容器。widgets.Label(value:str):普通文本标签,通常与其它控件共同组合在Box中以显示说明文本,在构造时传入实参value作为要显示的文本,没有常用事件。widgets.Label(value:str):普通文本标签,通常与其它控件共同组合在Box中以显示说明文本,在构造时传入实参value作为要显示的文本,没有常用事件。ipywidgets常用控件04pywidgets

Widgets是多事的python对象,在浏览器中具有表示形式,通常作为滑块,文本框等控件。

控件有什么用?可以使用小组件为笔记本构建交互式GUI。可以使用小部件在Python和JavaScript之间同步有状态和无状态信息。04pywidgets

JupyterWidgets主要是一个提供交互式控件的框架。该包还提供了一组基本的、轻量级的核心窗体控件,这些控件使用此框架。这些包含的控件包括文本区域、文本框、选择和多选控件、复选框、滑块、选项卡面板、网格布局等。

04pywidgets示例包括:基本表单控件,如滑块、复选框、文本输入容器控件,如选项卡、折叠面板、水平和垂直布局框、网格布局高级控件,如地图、2D和3D可视化、数据网格等04pywidgetsJupyterWidgets框架有几个组件:内核中的一个包,用于为小部件提供接口。Python软件包为IPython内核提供了JupyterWidgets。其他内核也可能提供JupyterWidgets支持。浏览器Jupyter前端的扩展,用于管理JupyterWidgets。安装会自动安装JupyterLab和JupyterNotebook(和软件包)的扩展。JupyterWidgets项目还维护了一个普通的HTML界面,用于在网页上嵌入JupyterWidgets,许多其他前端支持JupyterWidgets。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于人脸识别算法实现人脸检测05任务实施利用opencv采集图像1调用人脸识别算法接口2利用多线程方式实现视频流的人脸检测342打开摄像头1引入相关的库3设置摄像头的分辨率宽高值从摄像头获取一帧图片5显示获取的图片利用opencv采集图像05利用opencv采集图像利用opencv采集图像05importcv2importtimeimportipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromlib.faceDetectimportNLFaceDetect1.引入相关的库cap=cv2.VideoCapture(0)2.打开摄像头使用cv2.VideoCapture(camera_id)方法来打开摄像头,赋值给cap。参数1camera_id指的是默认打开第一个接入的摄像头id,比如0。如果存在两个摄像头,id就是可选,0或者1代表的就是不同的两个摄像头。执行如果没有报错,表示打开成功。利用opencv采集图像05cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)3.设置摄像头的分辨率宽高值使用cv2.set方法来设置摄像头分辨率参数camera_width是摄像头分辨率宽度,camera_height是摄像头分辨率的高度.ret,image=cap.read()4.从摄像头获取一帧图片返回值ret为状态布尔值,是否获取到图片,True表示获取成功,反之失败,image为图片数据,如果需要显示视频流,则需要循环读取图片。importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image)[1].tobytes()#把图像按照jpg格式编码cap.release()#释放摄像头5.显示获取的图片利用jupyter的画图库和显示库,来显示获取的图片。05任务实施利用opencv采集图像1调用人脸识别算法接口2利用多线程方式实现视频流的人脸检测342图片加载与显示1算法实例化与模型加载3调用人脸检测主函数获取人脸框信息显示算法处理的图像调用人脸识别算法接口05调用人脸识别算法接口调用人脸识别算法接口05fromlib.faceDetectimportNLFaceDetectimportcv21.算法实例化与模型加载(1)算法实例化该人脸算法库是底层由C写的算法库,集成在核心开发板上,在经过python的对接后,形成了一套python的接口库,可以直接调用。libNamePath='/usr/local/lib/libNL_faceEnc.so'#指定库文件路径nlFaceDetect=NLFaceDetect(libNamePath)#实例化算法类(2)模型加载nlFaceDetect=NLFaceDetect(libNamePath)加载库,以及指定函数参数类型和返回值类型,并初始化结构体变量,libNamePath是固定库文件路径,执行没有报错,表示实例化成功。调用人脸识别算法接口05image=cv2.imread("./exp/boy.jpg")ret1=nlFaceDetect.NL_FD_InitVarIn(image)2.图片加载与显示(1)加载图片nlFaceDetect.NL_FD_InitVarIn(image)将采集到的图片数据,加载到算法中(limg为图片数据),返回0表示加载成功。importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image)[1].tobytes()#把图像值转成byte类型的值(2)显示图片打印原始的照片。调用人脸识别算法接口05face_num=nlFaceDetect.NL_FD_Process_C()#返回值是目标个数face_num=nlFaceDetect.djEDVarOut.num#取出人脸个数值3.调用人脸检测主函数获取人脸框信息人脸检测主函数nlFaceDetect.NL_FD_Process_C()可以识别图片中的人脸,并且返回人脸个数。foriinrange(face_num):outObject=nlFaceDetect.djEDVarOut.faceInfos[i].bboxprint("Totalface:",face_num,"ID:",i)#打印人脸个数

print('facebox:%0.2f,%0.2f,%0.2f,%0.2f'%(outObject.x1,outObject.y1,outObject.x2,outObject.y2))#打印人脸框的位置信息

print('Scores:%f'%outObject.score)#打印识别置信度

font=cv2.FONT_HERSHEY_SIMPLEX#定义字体

cv2.putText(image,str('Face'),(int(outObject.x1),int(outObject.y1)),font,0.8,(255,0,0),2)#在图片上描绘文字

cv2.rectangle(image,(int(outObject.x1),int(outObject.y1)),(int(outObject.x2),int(outObject.y2)),(0,0,255),2)#在图片上画出人脸框取出人脸框位置信息。调用人脸识别算法接口05imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image)[1].tobytes()#把图像值转成byte类型的值nlFaceDetect.NL_FD_Exit()#释放算法内存和模型4.显示算法处理的图像nlFaceDetect.NL_FD_InitVarIn(image)将采集到的图片数据,加载到算法中(limg为图片数据),返回0表示加载成功。05任务实施利用opencv采集图像1调用人脸识别算法接口2利用多线程方式实现视频流的人脸检测342定义摄像头采集线程1引入相关的库3定义算法识别线程启动与停止线程利用多线程方式实现视频流的人脸检测05利用多线程方式实现视频流的人脸检测利用多线程,使图像采集和算法识别同时运行,从而实现视频流的人脸检测,并且可以避免一些因花时间太久,导致的视频卡顿。利用多线程方式实现视频流的人脸检测05importtime#时间库importcv2#引入opencv图像处理库importthreading#这是python的标准库,线程库importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromlib.faceDetectimportNLFaceDetect#人脸识别算法库接口1.引入相关的库threading线程库多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理;用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度;程序的运行速度可能加快;在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。利用多线程方式实现视频流的人脸检测05classCameraThread(threading.Thread):def__init__(self,camera_id,camera_width,camera_height):threading.Thread.__init__(self)self.working=Trueself.cap=cv2.VideoCapture(camera_id)#打开摄像头

self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,camera_width)#设置摄像头分辨率宽度

self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT,camera_height)#设置摄像头分辨率高度

defrun(self):globalcamera_img#定义一个全局变量,用于存储获取的图片,以便于算法可以直接调用

camera_img=Nonewhileself.working:ret,image=self.cap.read()#获取新的一帧图片

ifret:camera_img=imagedefstop(self):self.working=Falseself.cap.release()2.定义摄像头采集线程结合上面的opencv采集图像的内容,利用多线程的方式串起来,形成一个可传参,可调用的通用类。这里定义了一个全局变量camera_img,用作存储获取的图片数据,以便于其他线程可以调用。init初始化函数实例化该线程的时候,会自动执行初始化函数,在初始化函数里面,打开摄像头,并设置分辨率。run函数该函数是在实例化后,执行start启动函数的时候,会自动执行。在该函数里,实现了循环获取图像的内容。利用多线程方式实现视频流的人脸检测053.定义算法识别线程结合调用算法接口的内容和图像显示内容,利用多线程的方式整合起来,循环识别,对摄像头采集线程中获取的每一帧图片进行识别,并显示,形成视频流的画面。init初始化函数实例化该线程的时候,会自动执行初始化函数,在初始化函数里面,定义了显示内容,并实例化算法和加载模型。run函数该函数是在实例化后,执行start启动函数的时候,会自动执行。在该函数是一个循环,实现了对采集的每一帧图片进行算法识别,然后将结果绘画在图片上,并将处理后的图片显示出来。利用多线程方式实现视频流的人脸检测05camera_th=CameraThread(0,640,480)face_detect_th=FaceDetectThread()camera_th.start()face_detect_th.start()4.启动和停止线程(1)启动线程实例化两个线程,并启动这两个线程,实现完整的人脸检测功能,运行时加载模型比较久,

温馨提示

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

评论

0/150

提交评论