人脸识别毕业设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息科学与技术学院毕业论文
课题名称:基于特征识别的人脸检测系统
学院:信息科学与技术学院
完成日期:二○一七年五月十九日
摘要
I
摘要
我的毕业设计题目是基于特征的人脸检测系统,这个系统不仅仅能够检测人脸,
还具有识别人脸的功能。

检测人脸检测部分的算法采用的是于仕祺老师的LBP特征加Gentle AdaBoost分类器相结合的算法,提取识别特征部分的算法采用的是Google 在2015年提出的基于深度学习策略的一种人工神经网络FaceNet,较为新颖,其准确率高,在光照不足,姿态和表情变化剧烈时仍能保持稳定,具有很强的鲁棒性。

该系统的界面使用MFC编写,在具体实现中了应用了多线程编程技术实现了一个简单的生产者消费者模型,从而提高了系统的识别效率,另外,对人脸的识别模块还使用了Python,C++混合编程技术引入了Google的开源深度学习框架Tensorflow作为对FaceNet的具体实现,数据库使用的是SQL Server2012,连接数据库使用的是微软公司的ADO 组件。

该系统主要有信息采集模块和实时监控模块两个部分,前者完成对任务样本的信息采集工作,后者完成在实时监控的情况下对出现在画面中的人脸进行检测和识别,检测部分的速度可以达到40~60的FPS,识别部分由于计算量较大,只能达到2~5的FPS。

该系统经过简单的硬件支持和部署之后,基本可以完成在实际场景中的简单应用,具有一定的学术研究和实际应用价值。

关键词:人脸检测;人脸识别;机器学习;Tensorflow;实时监控
ABSTRACT
ABSTRACT
The topic of this graduation project is Face Detection System based on characteristics which achieves the face detection and face recognition two functions. The algorithm of face detection part uses a kind of enhanced algorithm based on LBP feature and Gentle AdaBoost classifier proposed by ShiQi Yu,the algorithm of extracting face feature used in recognition part uses a kind of manual neural network FaceNet based on deep learning strategy proposed by Google in 2015.FaceNet has reached high arruracy and it is robustness to the change of illumination,posture and expression.The interface of this system if written in MFC,and in real implementation,the application of multi-threaded programming technology realizes a simple producer and consumer model which accelerate the whole recognition efficiency of the system,in addition,the recognition part also uses the Python,C++ mixed programming technology which introduces Google’s open-source deep learning framework Tensorflow as a concrete implementation of FaceNet,the database is using SQL Server 2012,the link of database uses Microsoft’s ADO components.The system consists of two parts: the information collection module and the real-time monitoring module,the former completes the information collection of human samples,and the latter completes the detection and recognition of the faces that appear in the picture in the case of real-time monitoring.The speed of detection part can reaches to 40~60 FPS,the recognition part can only reach to 2~5 FPS, for the large calculation cost.After some simple hardware support and deployment,the system can be used in actual scene for simple application which has certain research and practical application value.
KEY WORDS: Face detection; Face recognition; Machine learning; Tensorflow; Real-time monitoring
II
目录
1 绪论 (3)
1.1课题 (3)
1.2课题背景 (3)
1.3课题研究目的及意义 (3)
1.3.1研究目的 (3)
1.3.2研究意义 (4)
1.4国内外研究现状 (5)
1.4.1国外 (5)
1.4.2国内 (6)
1.5设计时间 (7)
1.6内容及分工 (7)
1.6.1内容 (7)
1.6.2成果 (7)
2 理论和技术 (8)
2.1理论 (8)
2.1.1检测部分的LBP特征+Gentle AdaBoost分类器 (8)
2.1.2识别部分的Google FaceNet (11)
2.2技术 (15)
2.2.1 MFC简介 (15)
2.2.2 Tensorflow简介 (17)
2.2.3 ADO组件简介 (18)
3 需求分析及概要设计 (19)
3.1 需求分析 (19)
3.2 概要设计 (19)
4 实现 (20)
4.1核心理论的实现 (20)
4.1.1检测部分的实现 (20)
4.1.2提取识别特征部分的实现 (21)
4.2类 (24)
4.2.2 TensorflowInference类 (26)
4.2.1 ADOConn类 (28)
4.3主界面 (29)
4.3.1 流程 (29)
4.3.2 实现 (30)
4.4信息采集 (32)
4.4.1流程 (32)
4.4.2实现 (32)
4.5实时监控 (34)
4.5.1流程 (35)
4.5.2实现 (36)
4.6数据库 (38)
5 测试 (40)
5.1 主界面测试 (40)
5.2信息采集测试 (41)
5.3实时监控测试 (41)
1
6 结论 (43)
7 致谢 (44)
8 参考文献 (45)
2
1 绪论
1.1课题
基于特征的人脸检测系统
1.2课题背景
自从计算机被发明的那一天起,人们就试图使用计算机来代替人力从事各种各样的劳动,经过数十载的发展和进步,以及对各种理论的深入研究,现在的计算机技术已经达到可以实现人脸识别的要求。

人脸识别的一个重要应用就是身份鉴别,在许多重要的场合,传统的身份鉴别方法缓慢且低效,于是人们试图寻找更加高效方便的身份鉴别方案,人脸识别就是其中的一种考虑,与其他类型的生物识别比较,人脸识别具有非强制性、非接触性、隐蔽性、并发性的优点,而且人的面部表情还会反映出人的心理状态和情绪,这也可以为我们提供必要的辅助信息。

人脸识别的研究如今已经成为许多从事模式识别研究或者人工智能研究的科研机构的重要课题。

虽然科学家们从很早的时候就试图让计算机能够识别人脸,但是因为人脸的信息容易受到各种环境因素的干扰和人物本身姿态和表情的影响,使得人脸检测和识别仍有很大的研究空间,并且目前商用的人脸识别应用并未普及,存在着非常庞大的商业空间,如今新生的人脸识别算法公司,如云从科技,Emotient,Affectiva中学术界大佬云集,动辄融资数千万,也从侧面说明了人脸识别与分析市场潜力巨大,具有很高的应用与学术价值。

1.3课题研究目的及意义
1.3.1研究目的
狭义上来讲,人脸检测与识别的基本目的是从一幅静态图片或者是从视频流中的一系列图片中检测图像是否包含人脸,如果有人脸,则能够准确给出人脸的各种信息,包括位置信息,大小信息,还要能够将人脸单独从原始的捕捉画面中剪裁出来,通过一定的算法提取出足够区分不同的人和同一个人的人脸特征,再将提取到的特征与事先存放在数据库中的人脸的特征进行比对,从而实现对图片中出现的人物进行身份鉴别,这在许多安检和考勤系统上得到了应用,目前稍微高档一点的手机都有人脸解锁功能。

更进一步讲,人脸检测和识别还有许多其他的应用,例如当下流行的一些P图3
软件通过对人脸的分析和处理,可以开发出很多基于摄像头的应用比如美图秀秀和魔漫相机等,深受广大爱自拍的妹子们的喜爱,有的游戏公司则在游戏中加入了对玩家脸部表情的捕捉,并将其融入到游戏中,具有巨大的市场价值,此外,获取的人脸中还含有更多有意思的信息,比如图片中人物的表情,神态,衰老程度,是否打扮等,从这些信息中可以进一步分析得出人物的情绪和心理活动甚至性格特征,表层体现的信息一旦被深度挖掘,其价值将无可估量,一些新生的人脸识别算法公司已经将这些信息用在许多场合,比如在销售业中分析顾客的实时感受,进而指导销售策略,这些信息在未来人工智能的拟人类产品中的对图像理解和机器人的人机交互中也具有重大意义。

因此,从一般应用的角度来讲,研究人脸识别的目的是让计算机能够识别人脸,区分不同的人脸,自动对人进行身份鉴别,或者是对人脸加以适当的处理应用于娱乐休闲;而从人工智能的角度来讲,是为了让计算机能够“理解”人脸,模仿人脸,让计算机更加地像人。

1.3.2研究意义
研究人脸检测与识别具有实际应用和理论研究两个方面的意义,体现在前者上的意义在于人脸检测和识别可以被广泛的应用在各种场合,举几个简单的例子,可以将人脸检测与识别技术应用在安检或监控领域,在一些对安全性要求很高的场合部署人脸检测与识别系统能够有效检查出异常人员的出现,为安保人员提供相应的预警信息,使其能够及时采取一定的措施避免安全事件的发生;还可以将系统部署到一般的街道上,类似天眼系统,全天识别路上的每一个人,这样可以让一些不法分子无处可藏,增加社会的安定性;在考勤系统上的应用可以是工作人员不用采取任何多余的动作即可完成打卡,只需要从门口走过,人脸检测和识别系统就可以在神不知鬼不觉的情况下完成对考勤信息的记录,在这些方面的应用将创造巨大的社会价值。

在理论研究方面的意义只要是体现在人工智能领域,科学家们梦想实现的终极强人工智能不可能一蹴而就,其基础的发展阶段就是对人类的各种模仿,研究人脸识别的相关理论可以为探索赋予计算机视觉理解提供一定的指导,而且由其与别的一些学科有所交叉,比如生理学,数字图像处理,生物神经学,心理学等,对人脸检测与识别的理论研究能够在一定程度上推动这些领域的发展,这些领域的发展反过来也是人脸检测和识别理论进步的重要推动力。

在安检系统中,人脸检测与识别的本质就是从区分人脸,人脸检测是把人脸从背景中区分出来,人脸识别是区分不同的人脸,对计算机而言,人脸只是一堆随机矩阵,和一个可乐罐子并没有什么太大的区别;而对于人工智能领域来说,人脸识别不再单单是区分人脸,而要求计算机能够以更加类似人的方式去理解人脸,得出人的更多信息,人身上没有那个部位能比脸更能反映这个人的信息了,包括年龄,心情,甚至性格特征,利用这些信息对人工智能产品的行为做出指导将产生更加友
4
好的人机交互体验和更加个性化的服务,利用信息的前提是获取这些信息。

1.4国内外研究现状
1.4.1国外
近十年以来,人脸识别已经发展成为热门的生物特征识别技术,国外几乎所有著名的从事与人工智能领域相关研究的研究机构和高校都有对人脸检测和识别技术及理论的研究。

包括像FaceBook,Google,Microsoft这样的互联网巨头公司也对人脸检测和识别的研究投入了大量的精力,并将可以实际使用的人脸检测和识别系统部署到它们的产品中去,用以开发新的应用或者提升用户体验。

理论上的产生了基于几何特征的人脸识别、基于子空间的人脸识别、基于弹性图匹配的人脸识别、Geroghiades等人提出的基于光照锥模型的多姿态、多光照条件人脸识别方法,应用于以支持向量机为代表的统计学习理论。

另外,有AdaBoost衍生出了许多变种和增强型人脸识别算法、基于彩色信息的方法、构建神经网络、基于形状分析的方法以及多模态信息融合方法也有大量研究与实验。

目前,很多国家展开了有关人脸识别的研究,美国的代表机构是卡耐基梅隆大学(CMU)机器人研究所、麻省理工学院(MIT)媒体实验室和人工智能实验室,欧洲的代表机构是英国的Surey大学视觉语音和信号处理研究中心、法国的INRIA研究所、芬兰的赫尔辛基大学CIS研究所、瑞士IDIAP研究所、日本的代表机构是ART 研究所等。

人脸检测和识别系统已经被法国人安装在ATM机上,通过对脸部的识别确定人物身份。

美国更是将人脸检测和识别技术应在诸如军事,安防,教育,医疗,娱乐等各个方面,极大的方便了人们的生活,增加了生产效率,也多样化了人们的娱乐方式。

国外的一些著名研究机构还专门话费大量的人力和物力来建立和维护许多人脸数据库,这些数据库被广泛用来研究人脸检测和识别,尤其是对于最近几年超速发展的人工神经网络策略,训练一个完善的人工神经网络需要大量的训练样本(百万级别),这些数据库极大的方便了研究人员的样本获取过程,部分数据库被专门用来作为检测和识别算法的Benchmark,用以比较和评估算法的性能,也有专门用来进行竞赛的数据库,各种state-of-art算法在这些数据库上一较高下,极大的促进了人脸检测和识别的研究。

理论的发展极大的促进了工业界的进步,众多新兴的人脸识别算法进而产品公司纷纷成立,他们将理论应用于实践的同时也组建自己的科研团队不断对理论研究做出贡献,目前比较著名的国外人脸算法和产品公司有Emotient,Affectiva,Linkface
5
等,Emotient致力于打造一套“无所不在”的人类情感分析系统,并且已经将表情识别服务部署到零售行业,它还提供API接口,能够将其技术轻松的任何硬件或者软件进行整合(本课题将尝试使用这些API);Affective主打面部识别解析服务,已经推出其SDK包,希望在市场营销以外的领域如游戏、教学等发挥作用,其已经获得共计2020万美元的投资;Linkface提供全球领先的人脸检测、识别技术服务,LFW人脸识别准确率已经高达99.5%以上。

1.4.2国内
国内的人脸检测和识别研究和其他的一些领域的研究一样,起步晚但在国家日益和国际接轨的情况下发展很快,国内的著名高校像北京大学,清华大学,上海交通大学等,以及科研机构如中科院都对人脸检测和识别进行了研究,不但产出了许多能够实际应用的产品,也研发出了许多媲美国际水平的优秀检测和识别的核心算法。

可供实际应用的产品的优秀代表有清华大学的科研人员开发出的THfaceID人脸识别系统,中科大的研究小组开发的KD-Face系列的人脸考勤机等。

人脸检测与识别技术也被应用于国内安防,销售等领域,在08年奥运会中人脸检测和识别系统被实际部署并投入使用。

在理论研究方面,国内的科学家也在奋力追赶state-of-art 的算法,深圳大学的于仕祺老师的LBP特征+Gentle AdaBoost算法达到了当时世界人脸检测算法的顶尖水平,在检测的Benchmark数据库上的竞赛保持第一名的位置一段时间。

香港中文大学的科研团队研发的基于深度学习的DEEPID人工神经网络模型在当时也是达到了state-of-art的水平。

国内目前比较有名的人脸识别公司有云从科技和Face++等,云从科技成员大多来自全球顶尖学府及研究机构,其研发了首个刷脸支付原型系统,首个商用人脸识别远程开户系统,它是唯一一家参与人脸识别国标、部标、行标制定的研发企业;Face++在金融、安防、零售领域分别开始了商业化的探索,成功发育出Face++Financial,Face++Security,Face++BI等垂直人脸验证解决方案产品。

6
1.5设计时间
10周
1.6内容及分工
1.6.1内容
基于特征的人脸检测系统,主要实现以下功能:
1)对人物信息的采集,包括人物的姓名,人物肖像的采集,人物肖像的特征向
量的计算;
2)实时监控,对出现在摄像头画面中的人物进行身份鉴别及记录。

1.6.2成果
1)系统可执行程序一套;
2)毕业设计论文一份;
3)系统用户手册一份。

7
2 理论和技术
2.1理论
2.1.1检测部分的LBP特征+Gentle AdaBoost分类器
此处描述的算法是该理论的一般性算法,并不和本课题程序中实际使用的算法完全相同,课题中检测部分使用的检测器是于仕祺老师公布的人脸检测库,只提供了函数接口和对应的DLL库,并未公开内部具体的实现细节,只公开了特征使用的是LBP特征,分类器是Gentle AdaBoost Classifier,训练的正样本大约是150,000张图片,故此处只做一般性的算法介绍。

1)LBP特征
LBP全称Local Binary Pattern(局部二值特征),它的处理对象是灰度图片,作用是提取图片的纹理特征,它原理并不复杂,计算也比较简单迅速,对旋转和光照不具有一定的鲁棒性,因此其在纹理分析和人脸检测与识别的等应用中取得了非常好的效果。

在本课题中,人脸检测部分提取的特征就是滑动子窗口的LBP特征,提取到的特征将作为分类器的输入,最原始的LBP定义是在某个像素的8领域内,将位于中心像素周围的像素的灰度值与中心点像素的灰度值做比较,若大于中心像素的灰度值,则记为1,小于则记为0,然后将得到的八个01值依次排列看成是一个二进制数,再转换为十进制表示就得到了该中心点的LBP值,其计算过程如图2-1所示:
图2-1
用公式来表示的话:
(2-1)其中()表示3X3领域的中心像素点,它的像素值为,领域的其他像素值为,s(x)
为符号函数:
(2-2)
原始的LBP算子存在一定的缺陷,它只覆盖了一定范围的小区域,区域内的
像素数量固定不变(如图2-1中的9个像素点),无法适应不同尺度的纹理
需要,正对这个缺陷,一些科学家提出了一些改进的LBP算子,Ojala等人将
3X3领域扩展到任意领域,然后使用圆形的包围区域,改进后的LBP算子可
以包含任意多个像素点,满足了对不同尺度的纹理分析需求,一种改进的LBP
算子如图2-2所示,其定义了5X5的领域,在圆形包围线上取8个采样点:
图2-2
采样点的坐标需要经过一定的计算,采用取整或双线性插值的方法来求得采
样点的整数值坐标,再利用基本LBP算子中求解中心点LBP特征值的方法(公
式(2-1))求解LBP值,在人脸检测中,LBP算子的范围包围区域经常是椭
圆形的,人脸,眼睛,嘴巴都是椭圆形的结构,用椭圆的包围区域可以获得
更强的表达力,在此不再赘述。

2)Gentle AdaBoost分类器
Gentle AdaBoost全称Gentle Adaptive Boost Classifier(温和自适应强化分类器),它是基于Boost Classifier的一种改进版本,Boost Classifier简单说来就
是指将许多的弱分类器级联起来组成一个增强型的强分类器,许多弱分类器
通过类似“投票”的方式决定最终的分类结果。

一种弱分类器的训练算法如图2-3所示
图2-3
一种Gentle AdaBoost分类器的训练算法如图2-4所示:
图2-4
其中,Gentle是指此分类器相对于传统的Adaptive Boost Classifier在训练时错
误分类的样本的权值增加策略上更加平稳(图2-4中的3.b),以便获得更好
的泛化能力;Adaptive是指相对于传统的Boost Classifier,Adaptive Boost Classifier能动态调节各个样本在训练时所占的权重,就是增加错误分类样本
的权值,降低正确分类样本的权值。

2.1.2识别部分的Google FaceNet
无论是人脸检测还是人脸识别,都面临着来自光照,姿态,表情变化带来的巨大挑战,人工神经网络模型以其强大的非线性拟合能力和极强的鲁棒性能够在很大程度上面对以上挑战,而且深度学习是近几年才兴起的新理论,本课题勇于追赶研究前沿,在识别部分使用了David Sandberg根据Google在2015发表的一篇文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》使用Tensoflow实现的一个人工神经网络,并已经使用大量训练样本(百万级)预先训练完毕,在使用时只需要加载这个固化的网络模型至内存中,输入经过预处理的人脸图片,再执行一次前向计算,即可得到用于识别人脸的特征。

FaceNet在LFW(Labeled Faces in the Wild)数据库上的准确率达到了99.63%,刷新了当时的记录。

FaceNet使用深度卷积神经网络直接学习人脸在高维欧式空间的映射,映射得到的坐标点的欧式距离即代表了样本的相似性,距离越大表示相似性越低,反之越高。

FaceNet的大体架构如图2-5所示:
图2-5
其中Deep Architecture就是一般的卷积神经网络去掉softmax后的结构,经过L2的归一化后得到人脸图片再高维欧式空间的的特征表示,在训练时以最小化后面的三联子损失函数为目标不断调整网络中各个节点的权值。

目标函数:三联子损失函数,其学习过程如图2-6所示
图2-6
三联子表示在训练样本中抽取的三个人脸样本(抽取方法不做深入讨论),其中Anchor和Positive是来自同一个人的两张脸部图片,Anchor和Negative是来自不同人的两张脸部图片,学习的过程就是要使经过网络映射的Anchor和Positive 的欧式距离尽可能小而Anchor和Negative的欧式距离尽可能的大,依此来获得对人脸特征的描述。

用公式描述:
(2-3)
其中表示映射过程,,,,分别代表锚点,正样本,负样本,表示正负样本之间的距离,表示所有可能的三联子集合。

两个样本之间的相似性就使用公式来计算的。

将(2-3)做一下转换便可以得到目标函数:
(2-4)
训练的过程就是最小化,训练方法使用一般的卷积神经网络的训练方法即可,其具体内容不做讨论,实现上各种深度学习框架已经集成了各种最为先进的优化算法,只需要调用相应地接口便可以完成对神经网络的训练过程。

关于Deep Architecture,论文中给出了几种可选的网络结构,其中一种是Zeiler&Fergus结构,如图2-7所示:
图2-7
另外一种是基于Google Inception的结构,如图2-8所示:
图2-8其中一种Inception的结构如图2-9所示:
图2-9
课题中使用的网络结构目前还不知道其具体形式,Tensorflow提供了可视化固化网络模型的工具,但在实际使用时出了一些问题,因此很遗憾的没有看到实际使用的网络结构。

2.2技术
2.2.1 MFC简介
MFC全称Microsoft Foundation Classes(微软基础类库),这是Microsoft推出的一套C++类,把大部分常用的Windows API函数封装在其中。

MFC中的类和函数接口成千上万,对如此庞大的类库进行介绍和对其内部的复杂机制进行讨论已经超出本文的范围,因此在接下来的论述中,文章仅介绍本课题中显式使用的一些内容,本课题使用的集成开发工具是Visual Studio 2013 Premium,在其中新建一个MFC项目的同时,VS会自动生成项目的主框架,我们要做的就是往这个主框架中添加内容和修改一些相应地修改,必要时重写某些函数。

1)UI:本课题是基于对话框结构的项目,因此涉及到的UI知识仅有对话框中的内容,MFC封装了窗体和控件的底层绘制操作,用户可以在资源文件添加对话框类型的资源文件,然后用vs提供的可视化编辑工具编辑自己的对话框,而不用考虑其底层的绘制细节,各种控件的添加可以通过拖拽放置到对话框中。

用可视化工具编辑完界面后,vs会自动为这个对话框生成一个相应的类CXXXDlg Calss,这个类就封装了对话框中的所有内容,与控件关联的变量全部作为类的成员变量来实现,各种消息相应函数也是做为这个类的成员函数来实现的。

本课题使用的默认MFC样式如图2-10所示:
图2-10
2)数据类型:MFC中定义了许多常用的数据类型,本课题使用最多是CString 类型,窗体控件中显示的字符串的类型全部都是CString类型,写入数据库和
从数据库中取出来的数据类型也都是CString类型,因此关于CString和其他数据类型的转换是本课题实现部分的一个重点。

MFC中提供了许多类型转换函数和类型转换宏如宏CT2A( )可以将CString类型转换为string类型,CString 类型的本身也提供了一个强大的转换函数Format( ),它可以方便地实现许多基本的类型转换,但是一些更为复杂的类型转换还需要自己写函数去实现。

3)消息机制:在Windows中,消息和线程一一对应,当系统检测到某个消息时,会将相应的消息发送给与该消息对应的线程。

按照类型,Windows将消息按照类型分为如图2-11所示的几类:
图2-11
Windows将整个消息系统分为3个层级:
①Windows内核的系统消息队列
②App的UI线程消息队列
③处理消息的窗体对象
Windows内核会维护一个全局的系统消息队列,按照线程的不同,系统消息队列中的消息会被发送到应用程序的UI线程的消息队列中,应用程序的每一个UI线程都有自己的消息循环,会不停的从自己的消息队列中取出消息,并发送给Windows窗体对象,每一个窗体对象都使用窗体过程函数WindowProc()来处理接受的各种消息。

本课题中相应地消息一般都是第三层级的消息。

MFC框架封装了对消息处理的大部分操作,我们可以在生成的窗体类中添加消息的响应函数,当系统检测到用户或者系统的行为产生了已经被定义的消息,会自动调用我们编写的消息相应函数,执行对消息的响应操作,在本课题实现中具体相应的消息有窗口绘制消息ON_WM_PAINT,系统时间消息ON_WM_TIMER,按键消息ON_BN_CLICKED等。

4)多线程:MFC中的线程主要有两类,一类是用户界面线程,另一类是工作者。

相关文档
最新文档