基于opencv的人脸检测界面开发大学毕业论文设计.docx
- 文档编号:11938703
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:33
- 大小:1.95MB
基于opencv的人脸检测界面开发大学毕业论文设计.docx
《基于opencv的人脸检测界面开发大学毕业论文设计.docx》由会员分享,可在线阅读,更多相关《基于opencv的人脸检测界面开发大学毕业论文设计.docx(33页珍藏版)》请在冰点文库上搜索。
基于opencv的人脸检测界面开发大学毕业论文设计
学号:
11******36
本科毕业论文(设计)
(20**届)
基于opencv的人脸检测界面开发
院系电子********学院
专业通信工程
姓名卜**
指导教师陈**助教
20**年4月
摘要
人脸检测(FaceDetection)是一种在任意数字图像中找到人脸的位置和大小的计算机技术。
它可以检测出面部特征,并忽略诸如建筑物、身体和其他任何东西。
人脸检测技术不仅仅是人脸跟踪、人脸识别、表情识别等技术的重要条件,同时在人机交互、模式识别、视频检索、智能监控等领域也引起了广泛的重视。
在通过对人脸检测相关知识进行学习的基础上,本文首先对国内外的人脸检测发展进行了相关分析,阐述了本课题的研究背景及意义;第二章介绍基于Opencv实现人脸检测的相关方法和检测原理;第三章指出了基于QT平台,人脸检测界面如何开发,需要用到的相关技术知识和操作流程。
第四章设计了基于opencv的人脸检测程序,采用了QT开发工具并结合opencv技术对程序界面进行设计实现。
关键词:
人脸检测;QT开发;Opencv;
I
Abstract
Facedetectionisacomputertechnologythatidentifieshumanfacesindigitalimages.Itcandetect facialfeaturesandignore somethinglikebuildings,bodiesandanyotherthings.Facedetectiontechnologyisnotjustanimportantconditionforfacerecognition,alsoattractingwideattentioninthehuman-computerinteraction,patternrecognition,videoretrieval,intelligentmonitoringandotherfields.
Firstlyinthispaper,throughthestudyofrelevanttechnologyoffacedetectionrecognition,andfacedetectiontoidentifyrelevantexperienceinthedomesticandabroadareanalyzed,indicatingthebackgroundandthesignificanceofthetopic.Basedonopencv,thesecondchapterintroduceshowtorealizethedesign.Thenthethirdchapterpointsout howtodevelopfacedetection’sinterfacebasedontheQTplatform;Thefourthchapterbasedonopencvfacedetectionprocedures,usingopencv,theQTdevelopmenttools,achievethedesign.
KeyWords:
Facedetection;QTdevelopment;Opencv;
IV
1绪论
1.1课题背景及意义
1.1.1课题的背景
人脸检测早期的时候是用来检测人脸中特征点之间的距离、比例等参数作为特征数据参数,建立具备半自动化的人脸检测程式。
而早期检测有两个主要研究:
基于几何绘制任何脸型之间的距离和角度,以及一些容貌上,眼角、嘴角、鼻尖和部位构成平面拓扑;其次,模板方法模式和利用电脑图像细微的相关性来实现检测功能。
在1993年Berto对两类方法进行对分分析后发现,模板匹配法和几何特征方法中前者较为优秀[1]。
对人脸的特征提取与识别可看成是一个3D物体的2D投影图像进行匹配。
而人脸实际是个非刚性模型,在不同情况下可能存在一定的弹性形变,如表情、姿势位创造变化与模型检测问题相似。
环境因素对提取某种特征识别和有效的。
例如,在不同照明条件下的个人特征也可能发生一些变化。
因此在个人特征提取和识别图像识别前将进行某些预处理(标准化)。
删除背景,服装及冗余无用甚至有干扰到位置和校准目标灰度可以提高脸部检测效率,面部检测准确率得以提升。
1.1.2课题的意义
研究人脸检测在理论和技术上都有重要的意义:
一是可以推进对人类视觉系统的认识;二是需要满足人工智能的应用。
使用面部检测技术,建立人脸自动检测系统,利用计算机实现自动检测人脸图像具有广泛的应用领域。
与其他作为标志识别的方法(如指纹,虹膜,和检测等)相比具有以下优点[2]:
①不显眼,图像采集接口需要检测没有身体接触的人,你不能打扰检测人类;
②成本低,安装方便,只需使用面部识别系统内置的摄像头,摄像设备可以是普通摄像头,数码相机和手机,对用户没有特殊安装要求;
③无需人工干预,整个识别过程不要求用户主动参,计算机可以自动通过预先用户设置。
由于具有以上优点,近几年来,人脸识别技术引起了越来越多科研人员的关注。
1.2人脸检测的发展现状
1.2.1国内外现状
随着图像处理、生物特征、模式识别和各种分类算法等技术的发展而逐步的完善,为我们的生活和工作带来各种各样的便利和安全。
近年来,反国内和国际恐怖主义,国家安全和社会稳定的需求,世界各国都加大了对安全,生物验证和识别领域的重视。
美国军方研究机构建立人脸检测算法FERET评估标准,统一各种人脸检测和识别标准[3]。
国内在人脸自动识别技术研究相对起步较晚,开始于上世纪90年代末。
有国家自然科学基金会、863计划,还有许多当地的大学,研究机构和IT企业都建立了人脸检测研究小组。
主要研究机构有:
上海交通大学、西北大学、西安交通大学、同济大学、复旦大学、南京理工大学、南京大学、北京工业大学、武汉大学、华中科技大学、微软亚洲研究院、上海银晨智能识别科技有限公司等[4]。
他们在人脸检测、与特征抽取和人脸检测算法等做了大量有意义的工作,也积累了丰富的经验。
我国在此领域的研究和相关系统的开发正进一步跻身世界先进行列。
1.2.2研究难点
人脸检测是一个复杂的具有挑战性的模式检测问题,其主要的难点有两方面,一方面是由于人脸内在的变化所引起:
人脸具有相当复杂的细节变化,不同的外貌如脸形、肤色等,不同的面目特征如眼、嘴的张闭等;人脸有无遮挡遮挡,如眼镜、头发以及其它外部物体等。
另外由于外在条件变化所引起:
由于成像角度的不同造成人脸的多姿态,如平面内旋转、深度旋转以及上下旋转,其中深度旋转影响较大;光照的影响,如图像中的亮度、对比度的变化和阴影等。
图像的成像条件,如摄像设备的焦距、成像距离,图像获得的途径等等[5]。
1.3本文安排
本文一共有五个章节。
第一章为绪论介绍课题背景及意义,并对人脸检测的发展现状进行分析。
第二章介绍Opencv与人脸检测内容。
第三章介绍QT平台人脸检测界面的开发需要用到的相关技术。
第四章介绍人脸检测的实现。
第五章是总结与展望。
1.4本文小结
本章是绪论,主要内容包括课题研究背景及意义以及人脸检测的发展现状。
2Opencv与人脸检测
2.1人脸检测的方法
高精度的检测工作一般需要复杂的处理过程,如将图象映射到表面,恢复为三维模型,进行模型匹配等,但基于二维的图象处理也可进行人脸检测,下面介绍常用的几种方法。
2.1.1几何特征法
很多人采用几何特征法。
例如:
一些常见的几何特征,例如人脸形状的局部特性有眼睛,鼻子,嘴等,并在该面的分布函数的面部特征有几何特性。
基于检测这些几何特征,鉴定特征向量之间的对应关系,通过欧几里得距离的识别是最常用的方法。
眼睛,鼻子,嘴,下巴,不同之处是由于各种形状、尺寸和这些组件的结构,所以通过对形状和结构之间的几何描述,可以作为检测的重要特征。
几何特征通常通过提取人眼,口,鼻和其它重要的特征点的位置作为分类功能的重要器官[6]。
基于少量的存储器几何特征的检测方法也有一些问题:
①提取物防抖更为困难;
②改变可能剧烈;
③导致一些信息丢失,适合于粗略的分类。
一种方法是处理一组独立的小模型,如眼睛,嘴巴,鼻子,眉毛和下巴。
这些模型必须用于获得每个特征的轮廓,而基于边缘检测的传统方法很难获得一个连续的上边缘。
为此,提取特征弹性的方法有其独特的优势。
在灵活识别设计特征的形状的基础上,可调节的参数。
为了找到这组参数,需要使用图像的边缘,先用来设计一个高峰,山谷的形状及强度的信息和能量。
当能量达到最小,这组对应的最适合的形状模型的形状特征参数调节能量减小。
其基本思路是:
设计一个可调节的部件模型(即变形模型,如图2-1所示),能量通过调整模型参数定义,使得能量函数最小化,然后将模型参数作为一个实体的几何特性[7]。
图2-1可变形模板方法的眼模型
2.1.2特征脸法
这种方法的原理是LDA(PrincipalComponentAnalysis主分量分析法)用于特征选择和降低图象维数,是一种通用方法。
因此可以用K-L变换获取其正交K-L基底,对应其中较大特征值的基底具有与人脸相似的形状,因此,又称之为特征脸,得到人脸重要特征之后,要对其进行主成份分析,其具体的算法思想如下[8]:
若抽样参加训练的人脸图像有M张,每张图像的维数是N*N,则可以分别表示为:
x1、x2、x3、…、xM,那么平均脸可以表示为:
(2-1)
每张人脸和平均人脸的距离可以表示为:
(2-2)
假设矩阵A={d1,d2,d2,…,dM},特征脸需要做的就是找出矩阵AAT的前Z个
较大特征值中的特征向量,但AAT是一个N2*N2维的大矩阵,求这个矩阵的特征值的计算量是很大的。
为此我们可以先求出AAT的特征值与特征向量,然后求出ui
(2-3)
uj表示AAT的特征向量,uj表示ATA的特征向量,ni是ATA的特征值,uj就是所指的特征脸。
求出特征脸以后,所剩下的工作就是要对库中的人脸进行降维,由uj可以组成一个投影矩阵,表示为W={u1u2,…,uZ-1},并进行降维:
(2-4)
由上式得出所有人脸向量的降维向量。
基于特征脸的识别方法的优点:
大大降低了原始空间的维数,在这个低维空间中可进行人脸检测和识别。
Pentland等人在人脸检测中使用了特征脸方法,得到的特征脸如图2-2所示:
2-2特征脸法
缺点:
这种方法对光条件变化更敏感。
如果是光照条件变化,投影矩阵保留的主要元素变化。
因此,在该投影矩阵的点不能非常小。
随着技术提高,面部特征可能是标准线性费舍尔(Fisher线性判别,简写FLD)应用于人脸识别。
三者相比得出的结论是,除去不在该区域和分类变化的作用,它们将被同等对待。
FLD改正LDA缺点,可作为分类类别中的矩阵分布。
标准线性分析并不一定总比LDA更好。
当样本量较少时,LDA比FLD更好。
在许多领域,特别是在人脸识别领域,人们并不知道不同类别的基本分布情况。
他们的实验表明,这种考虑是正确的,在一些实验中,FLD比LDA和FLD效果更好,而在其他测试中FLD比LDA更好[9]。
2.1.3弹性图匹配法
弹性图匹配法(ElasticGraphMatching)是一种基于动态链接结构(DynamicLinkArchitecture,DLA)的方法。
在两维空间中来制造人类面部属性拓扑,将拓扑置于预先,每个节点包含一个特征向量,其中记录的人脸有关近距离符号几何节点,峰值信息的分布之间的拓扑关系是一个二维拓扑基于接口描述[10]。
利用该方法进行人脸识别时,可同时考虑节点特征向量匹配和相对几何位置匹配。
在待识别人脸图像上扫描拓扑图结构并提取相应节点特征向量,把不同位置的拓扑图和库中人脸模式的拓扑图之间的距离作为相似性度量。
此外,可用一个能量函数来评价待识别人脸图像向量场和库中已知人脸向量场间的匹配度,即最小能量函数时的匹配。
该方法使得几何特征描述越来越充分,保留了人脸的拓扑结构和局部特征,通过局部节点调节和弹性图变形,以及局部特征的多级Gabor变换描述,使得该方法对光照、姿态变化等具有较好的适应性。
该方法的主要缺点是计算量较大,必须对每个存储的人脸计算出模型图,占用很大存储空间。
2.1.4神经网络法
基于神经网络的人脸检测方法,近年来较为活跃,研究已应用于人脸识别,表情分析和其他问题,并获得良好的效果。
这类方法的人脸采用神经网络分类和能力的学习灰度级的特征进行了鉴定。
通常需要考虑两个因素:
选择图像输入参数;选择什么类型的神经网络。
目前,有两种主要的策略输入中、,第一种特征向量提取作为输入向量,第二个是图像像素直接进入神经网络。
这能有效地控制神经网络的基本尺寸,根据一组特征来选择样本方差的特性,但程度和所得的收敛速度慢[11]。
面部识别神经网络还有很多,比如反向传播(BP反向传播的测试)BP神经网络算法。
该方法简单,有很强的学习能力,更小的计算量;科特雷尔和其他使用级联识别BP神经网络,人脸识别伤害较好的能力;基于神经网络的临山等人提出的(概率神经网络的结果,PDBNN)方法,做虚拟样品制备和反加强学习,以获得想要的结果的可能性,估计模块化架构,以加快学习网络的可能性。
由于神经网络径向基函数(RBF神经网络,RBF)具有良好的紧凑空间,平整等特点,已经用于人脸检测[12]。
神经网络方法进行人脸检测的优点主要在于可以简便地构造出神经网络系统作为分类器,使用人脸和非脸样本对该系统进行训练,让系统自动学习两类样本复杂的类条件密度,这样就避免了人为假设类条件密度函数所带来的问题。
2.2opencv的应用领域
大多数计算机科学家和程序员已经意识到计算机视觉的重要作用。
但是很少有人知道计算机视觉的所有应用。
例如,大多数人或多或少地知道计算机视觉可用在监控方面,也知道视觉被越来越多地用在网络图像和视频方面。
少数人也了解计算机视觉在游戏界面方面的应用。
但是很少有人了解大多数航空和街道地图图像(如Google的StreetView)也大量使用计算机定标和图像拼接技术。
一些人知道安全监控、无人飞行器或生物医学分析等方面的应用,但是很少人知道机器视觉是多么广泛地被用在工厂中:
差不多所有的大规模制造的产品都在流水线上的某个环节上自动使用视觉检测[13]。
Opencv所有的开放源代码协议允许使用者使用OpenCV的全部代码或者OpenCV的部分代码生成商业产品。
自从Opencv在1999年1月发布alpha版本开始,它就被广泛用在许多应用领域、产品和研究成果中。
相关应用包括卫星地图和电子地图的拼接,扫描图像的对齐,医学图像去噪(消噪或滤波),图像中的物体分析,安全和入侵检测系统,自动监视和安全系统,制造业中的产品质量检测系统,摄像机标定,军事应用,无人飞行器,无人汽车和无人水下机器人[14]。
2.3opencv的基本结构
Opencv主体模块如图2-1所示。
Opencv的CV模块包含了基本的图像处理功能和先进的计算机视觉算法,MLL模块是机器学习库,包含统计分类器等几种工具,HIGHGUI模块包含图像和视频输入/输出功能。
CXCORE包含Opencv的一些基本数据结构和相关函数[15]。
图2-3OpenCV主体中的四个模块
2.4opencv检测原理
OpenCV中有检测人脸的函数(该函数还可以检测一些其他物体),甚至还包含一些预先训练好的物体检测文件。
所以利用这些已有的东西就可以做出一个人脸检测的程序。
主要步骤为:
1.加载分类器。
用cvLoad函数读入xml格式的文件。
文件在Opencv安装目录下的“data/haarcascades/”路径下。
2.读入待检测图像。
读入图片或者视频。
3.检测人脸。
2.5本文小结
本章重点介绍了人脸检测的方法以及Opencv相关技术知识。
3QT平台人脸检测界面的开发
3.1QT的简介
Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。
它可以开发一个GUI程序也可用于开发非GUI程序比如控制台工具和服务器。
它提供了应用程序开发人员可以构建所需的最先进用于该局图形用户界面。
Qt是完全面向对象的,易于扩展,并且允许真正的组件编程[12]。
基本上,Qt和花片X窗口上,MFCOpenwin,GTK图形界面,如图书馆和Windows平台,OWC,VCL,ATL是同一种东西,但Qt的有以下优点[16]:
(1)很好的跨平台特性
Qt支持下列操作系统:
MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等
(2)面向对象
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
(3)丰富的API
Qt包括多达250个以上C++类,还提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time类。
甚至还包括正则表达式的处理功能。
(4)大量的开发文档
(5)XML支持
(6)Webkit引擎的集成,可以实现本地界面与Web内容的无缝集成
(7)用户自定义控件
其他的工具包在应用时都存在一个普遍的问题,就是经常没有真正适合需求的控件,生成的自定义控件对用户来说,也是一个黑匣子。
比如,在Motif手册中就讨论了用户自定义的控件的问题。
而在Qt中,能够创建控件,具有绝对的优越性,生成自定义的控件非常简单,并且容易修改控件。
(8)方便性
由于Qt是一种跨平台的GUI工具包,所以,它对编程者隐藏了在处理不同窗口系统时的潜在问题。
为了将基于Qt程序更加方便,Qt包含了一系列类,该类能够使程序员避免了在文件处理、时间处理等方面存在依赖操作系统方面的细节问题。
(9)国际化
Qt为本地化应用提供完全的支持,所有用户界面的文本或字符串都可以利用翻译工具将其翻译成各国语言。
(10)高性能的工具
对于库来讲,它的有效性远超过应用性。
为了提高Qt库的有效性、快捷性,对其进行了优化,Qt能执行一些基本的任务,比如图形的润色,比一般的基于平台的代码要快。
Qt是基于Xlib,而不依赖Motif工具包。
(11)优越的绘画功能
Qt的绘画工具Qpainter类,在任意一个绘画设备上都可以润色图形。
绘图设备包括组件、像素映射、图形文件和打印机,相同的代码可以用在4种不同类型的设备上。
Qpainter类支持复杂的同等系统的转换,很容易在所有平台上画旋转文本和像素映像。
(12)绘制2D/3D图形功能
Qt提供了QGLWidget类,使用该类能够绘制2D/3D图形。
用就像用一个Qt组件一样方便。
这比纯粹的OpenGL做的3D图形更好使用。
3.2QT平台的搭建
3.2.1构建QT应用程序的流程
1,选择新建工程
图3-1选择新建工程
2选择Qt4GuiApplication工程。
(带UI界面编辑的工程)
图3-2选择Qt4GuiApplication工程
3取工程名例如:
C_S_Socket。
路径随意,不要有任何中文Next
图3-3取工程名
4默认即可,Next(这是为此次工程选择要添加的头文件。
我们不需要其他的功能。
默认)
图3-4操作步骤
5Baseclass选择QDialog。
Classname改MainDlg。
Next(我们是基于Qt界面编程的嘛。
所以就选QDialogQt窗口类噻)
图3-5基本信息填写
6Finish完成(这里是编辑器告诉我们生成了如下文件)
图3-6完成操作界面
3.2.2编译QT应用程序的方法
第一步,将应用程序和Qt库拷贝到同一目录。
(Windows下库的搜索先从当前目录开始,然后是在系统PATH环境变量指定的路径查找。
)
第二步,检查应用程序还依赖哪些dll,如编译器带的dll或其他系统dll。
参见应用程序的依赖关系一节。
第三步,验证程序可以在目标系统上正确运行,将目前包里的文件拷贝到目标系统上,尝试运行程序。
第四步,发布插件程序。
插件和普通的动态库的发布不同,不能简单的将之拷贝到应用目录里。
应用程序在运行时会在其对应的plugins目录下去查找插件。
针对这个例子,发布包应该类似表3-这样的结构:
表3-1发布包结构
模块
文件名
执行档
plugandpaint.exe
BasicTool插件
plugins/pnp_basictools.dll
ExtraFilters插件
plugins/pnp_extrafilters.dll
QtCore模块
plugandpaint.exe
除了程序和Qt库,还有下面的编译器库:
表3-2编译器库
VC++6.0
VC++7.1(2003)
VC++8.0(2005)
C运行库
msvcrt.dll
msvcr71.dll
msvcr80.dll
C++运行库
msvcp60.dll
msvcp71.dll
msvcp80.dll
插件的位置除了Qt默认的路径还可以通过代码里调用Qt的API来指定,相应的API是QApplication:
:
addLibraryPath()或QApplication:
:
addLibraryPaths().如:
qApp->addLibraryPath(”c:
/some/path”);
上述代码的推荐调用位置是在main函数中,QApplication构造完毕之后。
应用程序会在搜索默认路径之后去搜索你指定的库路径[14]。
3.3开发QT程序的基本流程
1点击maindlg.ui进入主界面窗体设计成如下图3-7所示
图3-7主窗体设计
2设置各个控件的对象名(不能同名,系统用对象名找到控件。
命名规范方便自己识别)
{
服务器单选框:
radioButton_Server
客户端单选框:
radioButton_Client
IP地址框:
lineEdit_Address
用户名框:
lineEdit_Name
离开按钮:
wayButton
进入按钮:
enterButton
}
图3-8设置控件对象名
3创建一个窗体类,用于发送接收信息的窗体
图3-9创建窗体类
修改类名例如:
chat,下一步完成
图3-10修改类名
3.4本章小结
本章主要介绍QT平台上,人脸检测界面的开发需要用到的相关技术知识和操作流程方法等内容。
4人脸检测的实现
4.1通过Cmake编译opencv
1、通过Cmake编译opencv
下载所需工具
QT5.4.0
Qtcreator3.3.0
Opencv2.4.5
Cmake
2、安装软件
3、将C:
\Qt\Qt5.4.0\Tools\MinGW\bin加入系统的Pa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 opencv 检测 界面 开发 大学毕业 论文 设计