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

下载本文档

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

文档简介

项目二使用计算机视觉算法实现图像识别嵌入式人工智能技术应用基于人脸属性分析算法实现人脸检测任务二职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二基于人脸属性分析算法实现人脸检测了解人脸属性分析算法原理;掌握使用人脸属性分析算法识别人脸属性的方法。掌握利用OpenCV实现图像的采集;掌握调用算法接口,进行人脸多属性分析。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二基于人脸属性分析算法实现人脸检测

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

2

3

4

5

6通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二基于人脸属性分析算法实现人脸检测04知识储备人脸识别1人脸多属性分析2人脸识别04人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。人脸识别04人脸识别系统主要包括四个组成部分,分别为:人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及匹配与识别。人脸识别04

1.企业、住宅安全和管理:如人脸识别门禁考勤系统,人脸识别防盗门等。人脸识别应用场景人脸识别04

2.电子护照及身份证:中国的电子护照计划公安部一所正在加紧规划和实施。人脸识别应用场景人脸识别04

3.公安、司法和刑侦:如利用人脸识别系统和网络,在全国范围内搜捕逃犯。人脸识别应用场景人脸识别04

4、自助服务:

人脸识别应用场景人脸识别04

5.信息安全:如计算机登录、电子政务和电子商务。在电子商务中交易全部在网上完成,电子政务中的很多审批流程也都搬到了网上。使用生物特征,就可以做到当事人在网上的数字身份和真实身份统一。人脸识别应用场景人脸识别04思考人脸识别和人脸检测有什么区别呢?他们之间有什么关系?人脸识别04人脸检测是一个比人脸识别更广泛的术语。人脸检测意味着系统可以识别图像/视频中是否有人脸。人脸检测有许多应用,人脸识别只是其中之一。人脸检测也可以用于自动对焦相机。它可以用来计算进入特定区域的人数。人脸识别04什么是人脸检测?

人脸检测是指用某种策略搜索任何给定的图像/视频帧,以确定它是否包含人脸,如果包含,则返回人脸的位置、的大小和姿态。人脸识别04人脸检测的原理是什么?

人脸检测算法通常从搜索人眼开始。眼睛形成所谓的山谷区域,是最容易被发现的特征之一。一旦检测到眼睛,该算法可以尝试检测面部区域,包括眉毛、嘴、鼻子、鼻孔和虹膜。一旦算法推测它已经检测到一个面部区域,它可以应用附加的测试来验证它是否已经实际检测到一个面部。人脸识别04什么是人脸识别?人脸识别是一种基于人脸特征信息的生物识别技术。简而言之,人脸识别解决了“这是谁的脸”的问题。人脸识别04人脸检测和人脸识别之间的关系?

人脸检测最重要的应用之一就是人脸识别。人脸识别技术描述了一种生物识别技术,其技术远不止于在人脸出现时进行识别。它实际上试图确定它是谁的脸。该过程使用计算机应用程序进行工作,该计算机应用程序捕获个人人脸的数字图像(有时是从视频帧中获取)并将其与存储的记录数据库中的图像进行比较。尽管人脸识别并非100%准确,但它可以非常准确地确定何时人脸很可能与数据库中的某人匹配。

简而言之,尽管所有人脸识别系统都使用人脸检测,但并非所有人脸检测系统都具有人脸识别组件。04知识储备人脸识别1人脸多属性分析2人脸属性04人脸属性分析是人脸识别的另一种应用场景,依赖于人脸识别接口来确定人脸的位置信息。人脸属性分析算法接口的调用,不但要进行识别检测,还要把结果显示在图像上,比如说把人脸框画在图像上,并把人脸属性,年龄,性别写在图像上等等。人脸属性04人脸属性1.人脸矩形检测到的每个人脸对应于响应中的faceRectangle字段。这是一组像素坐标,用于检测脸部的左边缘、顶部、宽度和高度。使用这些坐标可以获取人脸的位置及大小。在API响应中,人脸按照从大到小的顺序列出。2.人脸ID人脸ID是在图像中检测到的每个人脸的唯一标识符字符串。可以在人脸-检测API调用中请求人脸ID。人脸属性043.人脸特征点人脸特征点是人脸上的一组易于查找的点,例如瞳孔或鼻尖。默认情况下,有27个预定义的特征点。下图显示了所有27个点:以像素为单位返回的点坐标。Detection_03模型目前具有最准确的地标检测能力。此模型返回的眼睛和瞳孔地标足够精确,可以对面部进行注视跟踪。人脸属性044.属性属性是可由人脸-检测API选择性地检测到的一组特征。以下属性可以检测到:配饰。给定的人脸是否戴有配饰。此属性会返回可能的配饰,包括头饰、眼镜和口罩,每个配饰的置信度分数介于0到1之间。Age:特定人脸的估计年龄(岁)。Blur:图像中人脸的模糊度。此属性返回0到1的值,以及非正式分级:low、medium或high。Emotion:给定人脸的情感列表及其检测置信度。置信度分数会进行标准化,所有情感的分数加起来后得到一个总的分数。返回的情感包括快乐、悲伤、中性、愤怒、蔑视、厌恶、惊讶、恐惧。Exposure:图像中人脸的曝光度。此属性返回0到1的值,以及非正式的分级:underExposure、goodExposure或overExposure。Facialhair:给定人脸的胡须状态和长度。Gender:给定人脸的估计性别。可能的值为male、female和genderless。人脸属性04Glasses:给定的人脸是否戴有眼镜。可能的值为NoGlasses、ReadingGlasses、Sunglasses和SwimmingGoggles。Hair:人脸的发型。此属性显示头发是否可见、是否检测到秃顶,以及检测到了哪种发色。Headpose:人脸在3D空间中的摆向。Makeup:人脸是否有化妆。此值返回eyeMakeup和lipMakeup的布尔值。口罩。人脸是否佩戴口罩。此属性会返回可能的口罩类型,以及一个布尔值,用于指示鼻子和嘴巴是否被覆盖。Noise:在人脸图像中检测到的视觉噪点。此属性返回0到1的值,以及非正式分级:low、medium或high。Occlusion:是否存在遮挡人脸部位的物体。此属性返回eyeOccluded、foreheadOccluded和mouthOccluded的布尔值。Smile:给定人脸的微笑表情。此值介于0(未微笑)与1(明确的微笑)之间。QualityForRecognition是与检测中使用的图像是否具有足够高的质量尝试人脸识别有关的整体图像质量。人脸属性041.广告投放通过人脸识别技术对来往观看广告的人员进行人脸检测,然后分析检测出的行人的人脸年龄、性别。根据人脸检测分析了解相应人群的年龄、性别、颜值等信息,推送相应的广告内容,实现广告的精准投放。人脸多属性应用场景人脸属性042.门店用户画像在商业方面,通过人脸识别技术对对门店中的视频、来往客户等人脸图像进行检测,对门店客流的年龄、性别、颜值等属性进行分析,帮助商家构建用户画像。商家还可以通过人脸识别检测顾客的面部表情分析对商品的购买情况,实现精准营销。人脸多属性应用场景人脸属性043.娱乐活动在一些娱乐app、H5或者是小程序中,使用到人脸识别技术对用户上次的人脸照片进行检测,分析人物的颜值、年龄、微笑值等属性。人脸检测与属性分析在娱乐方面的应用可以使有更多的娱乐玩法,提升用户的乐趣。在日常生活中有越来越多的场景通过人脸识别技术对人脸图像进行检测,并且进行年龄、颜值等属性的分析,为运营和营销更为精准化。人脸多属性应用场景人脸属性04(1)相似性不同个体之间的区别不大,所有的人脸的结构都相似,甚至人脸器官的结构外形都很相似。(2)易变性人脸的外形很不稳定,人可以通过脸部的变化产生很多表情,而在不同观察角度,人脸的视觉图像也相差很大,另外,人脸识别还受光照条件(例如白天和夜晚,室内和室外等)、人脸的很多遮盖物(例如口罩、墨镜、头发、胡须等)、年龄等多方面因素的影响。(3)用户配合度现有的人脸识别系统在用户配合、采集条件比较理想的情况下可以取得令人满意的结果。但是,在用户不配合、采集条件不理想的情况下,现有系统的识别率将陡然下降。人脸多属性应用难点职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二基于人脸属性分析算法实现人脸检测05任务实施利用多线程方式实现视频流的人脸属性分析2调用人脸多属性分析算法接口142图片加载与人脸检测1模型加载与配置3人脸属性分析显示算法处理的图像调用人脸多属性分析算法接口05调用人脸多属性分析算法接口人脸多属性分析是人脸识别的另一种应用场景,所以有依赖于人脸识别接口,来确定人脸的位置信息。人脸多属性分析算法接口的调用,不但要进行识别检测,还要把结果显示在图片上。比如说把人脸框画在图片上,并把人脸属性,年龄,性别写在图片上等等。调用人脸多属性分析算法接口05fromlib.faceDetectimportNLFaceDetectfromlib.faceAttrimportNlFaceMultiAttrimportcv2importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库1.模型加载与配置(1)导入算法接口库NLFaceDetect#人脸识别库NlFaceMultiAttr#人脸多属性库这两种算法库都是是底层由C写的算法库,集成在核心开发板上,在经过python的对接后,形成了一套python的接口库,可以直接调用。face_libNamePath='/usr/local/lib/libNL_faceEnc.so'#指定人脸识别库文件路径nlFaceDetect=NLFaceDetect(face_libNamePath)#实例化人脸识别算法类em_libNamePath='/usr/local/lib/libNLMultiAttrPredEnc.so'#指定人脸多属性库文件路径nlFaceMulti=NlFaceMultiAttr(em_libNamePath)#实例化人脸多属性算法类(2)实例化算法接口对象实例化的时候,会自动执行init()初始化函数,该函数功能主要是加载算法库,指定函数参数类型和返回值类型,并初始化结构体变量,libNamePath是固定库文件路径,执行没有报错,表示实例化成功。调用人脸多属性分析算法接口05configPath=b"/usr/local/lib/rk3399_AI_model"#指定模型以及配置文件路径nlFaceDetect.NL_FD_ComInit(configPath)#加载人脸识别模型并初始化nlFaceMulti.NL_EM_ComInit(configPath)#加载人脸多属性分析模型并初始化1.模型加载与配置(3)加载模型和配置将内存分配到各个模块,比如,在人脸识别里面是人脸检测,人脸对齐等等,在人脸多属性里面,是针对人脸多属性模块的分配。configPath是模型和配置文件路径,执行没有报错,表示加载成功。调用人脸多属性分析算法接口05importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库image=cv2.imread("./exp/face1.jpg")imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image)[1].tobytes()#把图像值转成byte类型的值ret1=nlFaceDetect.NL_FD_InitVarIn(image)#图像加载到人脸算法中2.图片加载与人脸检测(1)加载图片数据将采集到的图片数据,加载到两个算法中(image为图片数据),返回0表示加载成功。ret2=nlFaceDetect.NL_FD_Process_C()#返回值是目标个数(2)调用人脸检测主函数处理图像返回人脸个数,并输出人脸框的位置信息,在输出结构体,可以获取相关信息。nlFaceMulti.faceNum=nlFaceDetect.djEDVarOut.numret3=nlFaceMulti.NL_EM_InitVarIn(image)#图像加载到人脸多属性算法中(3)取出人脸个数值从人脸检测输出结构体里面,获取人脸个数,并赋值给人脸属性分析。调用人脸多属性分析算法接口05fFDCoordinates=[]foriinrange(nlFaceDetect.djEDVarOut.num):outObject=nlFaceDetect.djEDVarOut.faceInfos[i].bboxfFDCoordinates.append(outObject.x1)fFDCoordinates.append(outObject.y1)fFDCoordinates.append(outObject.x2)fFDCoordinates.append(outObject.y2)cv2.rectangle(image,(int(outObject.x1),int(outObject.y1)),(int(outObject.x2),int(outObject.y2)),(0,0,255),2)image=nlFaceMulti.NL_EM_bbox(fFDCoordinates,image)print(fFDCoordinates)3.人脸属性分析(1)将人脸坐标信息输入人脸多属性模型根据人脸个数,把人脸坐标的位置信息,作为人脸多属性的输入。ifret3==0:ret4=nlFaceMulti.NL_EM_Process_C()(2)取出人脸个数值调用主处理函数,分析人脸多属性,包括年龄,性别,有无口罩,是否带眼镜等等,具体看接口信息。如果没有人脸就不执行主处理函数,否则会报错。返回的是能获取到属性的人脸个数信息。调用人脸多属性分析算法接口05image=nlFaceMulti.result_show(image)4.显示算法处理的图像(1)结果画在图片上调用结果函数,输出结果,并描绘在图片上。nlFaceMulti.result_show(rgb)该函数里面有调用freetype的中文描绘模块,目的是把中文显示在图片上,opencv是不支持中文显示的。importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库imgbox=widgets.Image()#定义一个图像盒子,用于装载图像数据display(imgbox)#将盒子显示出来imgbox.value=cv2.imencode('.jpg',image)[1].tobytes()#把图像值转成byte类型的值nlFaceDetect.NL_FD_Exit()#释放算法内存和模型nlFaceMulti.NL_EM_Exit()(2)结果可视化利用jupyter的画图库和显示库将经过算法处理的图像显示,并释放内存和模型。05任务实施利用多线程方式实现视频流的人脸属性分析2调用人脸多属性分析算法接口142定义摄像头采集线程1引入相关的库3定义算法识别线程启动与停止线程利用多线程方式实现视频流的人脸属性分析05利用多线程方式实现视频流的人脸属性分析利用多线程,使图像采集和算法识别同时运行,从而实现视频流的人脸检测,并且可以避免一些因花时间太久,导致的视频卡顿。利用多线程方式实现视频流的人脸属性分析05importtime#时间库importcv2#引入opencv图像处理库importthreading#这是python的标准库,线程库importipywidgetsaswidgets#jupyter画图库fromIPython.displayimportdisplay#jupyter显示库fromlib.faceDetectimportNLFaceDetect#人脸识别算法库接口fromlib.faceAttrimportNlFaceMultiAttr#人脸多属性算法接口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_attr_th=FaceAttrThread()camera_th.start()face_attr_th.start()4.启动和停止线程(1)启动线程实例化两个线程,并启动这两个线程,实现完整的人脸属性分析功能

温馨提示

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

评论

0/150

提交评论