当前位置:文档之家› 基于OpenCV的人脸识别算法研究与实现

基于OpenCV的人脸识别算法研究与实现

基于OpenCV的人脸识别算法研究与实现
基于OpenCV的人脸识别算法研究与实现

分类号:密级:

学校代码:10414 学号:2012160032

硕士研究生学位论文

基于OpenCV的人脸识别算法研究与实

Research and implementation of face

recognition algorithm based on OpenCV

钟官长

院所:江西师范大学导师姓名:曾纪国

学位类别:工程硕士专业领域:软件工程

二0一五年五月

独创性声明

本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。

学位论文作者签名:签字日期:年月日

学位论文版权使用授权书

本学位论文作者完全了解江西师范大学研究生院有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权江西师范大学研究生院可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。

(保密的学位论文在解密后适用本授权书)

学位论文作者签名:导师签名:

摘要

人脸识别作为一项安全性很高的生物识别技术,近些年来,它的发展速度非常快,并且逐渐成为生物识别的重要方法。

OpenCV是一个开源的跨平台计算机视觉库,它包含了很多通用的图像处理算法,并且开放源码,OpenCV具有很好的移植性,代码都经过优化,因此可用于科研也可用于商业用途。

本文基于OpenCV分别进行了人脸检测和人脸识别的实验。针对人脸检测,通过实验验证了几种有效的图像预处理方法。人脸检测算法是基于AdaBoost 方法的,AdaBoost方法引入了“积分图”的概念,这能有效的提高了算法效率。针对人脸识别,介绍了几种传统的人脸识别方法,讨论了基于特征脸的人脸识别算法的设计,这种方法主要是通过对人的正脸进行二维矩阵描述,并将其投影到一个已经训练好的特征空间中,识别时只需要比较已知的人脸权值即可,这种方法计算速度快,容易发展成商业技术。最后本文基于特征脸方法实现了人脸识别系统,实验结果快速准确,从而验证了算法的有效性。

关键词:人脸识别;OpenCV;人脸检测;AdaBoost;特征脸

I

Abstract

As a high security biometric technology, face recognition has developed quite fast and has gradually become the main method of biometrics in recent years .

OpenCV is an open source cross-platform computer vision library, which contains a lot of common image processing algorithms, and open source OpenCV has good portability, whose code has been optimized. Therefore it can also be used for both research and commerce .

Based on OpenCV, the thesis conducts tests of face detection and face recognition respectively. For the face detection, the thesis verifies the effectiveness of image preprocessing methods through several tests. Face detection algorithm is based on the method of AdaBoost that introduces the concept of "integration map", which can effectively improve the efficiency of the algorithm. For the face recognition, the thesis introduces several traditional face recognition methods, and discusses face recognition algorithm which is based on Eigenface. In this way, human face is described in a two-dimensional matrix,and is projected into a feature space which has been trained. At this time we only need to compare the weights of known human face. This algorithm runs fast and is very easy to develop for commercial technologies. Finally, the thesis implements a face recognition system based on the method of Eigenface and the experimental result is fast and accurate, thus verifying the effectiveness of the algorithm.

Key word:Face recognition; OpenCV; Face detection; AdaBoost; Eigenface

II

目录

摘要............................................................................................................... I Abstract ............................................................................................................ II 目录............................................................................................................. III 第一章绪论 .. (1)

1.1 人脸识别的研究背景和意义 (1)

1.2 人脸识别的主要内容 (2)

1.2.1人脸检测 (2)

1.2.2 人脸表征 (3)

1.2.3人脸识别 (3)

1.3 人脸识别问题中的疑难点 (3)

1.4 人脸识别的应用 (4)

1.5 本文研究的主要内容和组织结构 (5)

第二章人脸检测与识别的理论基础 (6)

2.1人脸检测及定位的理论基础 (6)

2.1.1 基于知识规则的方法 (6)

2.1.2 基于可视特征的方法 (7)

2.1.3 基于模板匹配的方法 (8)

2.2人脸的特征提取与识别理论基础 (9)

2.2.1基于几何特征方法 (10)

2.2.2基于代数特征方法 (10)

2.2.3 基于机器学习的方法 (11)

2.3 人脸识别的评价体系 (13)

2.3.1 评价标准 (13)

2.3.2性能指标 (14)

2.4 本章小结 (15)

第三章人脸检测算法的讨论 (16)

3.1人脸图像预处理讨论 (16)

3.1.1 灰度图像转换 (16)

3.1.2 消除噪声 (16)

III

3.1.3图像边缘检测 (19)

3.2 人脸检测算法讨论 (21)

3.2.1人脸检测方法简介 (22)

3.2.2 AdaBoost人脸检测方法讨论 (22)

3.2.3 AdaBoost方法的设计 (25)

3.3基于OpenCV的人脸检测算法实现 (27)

3.4本章小结 (28)

第四章人脸识别算法讨论 (29)

4.1人脸识别算法简介 (29)

4.2人脸识别算法研究与讨论 (29)

4.2.1基于PCA方法 (29)

4.2.2基于ICA方法 (30)

4.2.3基于LDA方法 (32)

4.3基于特征脸的人脸识别 (32)

4.3.1特征脸的计算法 (32)

4.3.2 特征脸算法的实现 (35)

4.4本章小结 (39)

第五章基于OpenCV的人脸识别系统的实现 (40)

5.1 OpenCV开源库介绍 (40)

5.1.1 OpenCV简介 (40)

5.1.2 如何在VS2010下配置OpenCV (40)

5.2本文系统的实验结果及分析 (42)

第六章总结与展望 (45)

参考文献 (46)

致谢 (49)

IV

基于OpenCV的人脸识别算法研究与实现

第一章绪论

1.1 人脸识别的研究背景和意义

21世纪是信息技术的世纪。随着网络计算机的飞速发展,人们开始越来越重视个人信息的安全性。而网络信息化一个主要的特征就是身份的数字化以及隐蔽化。如何有效进行身份验证已经成为目前人们越来越关系的问题,也是目前社会必须需要解决的问题。以往的身份认证手段通过证件去识别个人信息的技术将逐渐不适应如今科技的高速发展和现今社会的飞速进步。而生物识别作为一种全新的技术,正由于其本身的独特性,正在逐渐演变成如今信息时代通过验证身份的主要途径。

生物识别技术是指通过计算机并根据人的内在属性来进行身份信息的识别的一门技术,生物识别是模式识别问题的一种,它还涉及到机器视觉、进化计算、生理学和心理学、统计分析等很多领域。目前一些常见的生物识别技术是依据一些典型的生物独特的特征[1],并将它们应用在不同的商业领域。生物识别技术可分别根据生理特征和行为特征进行识别。生物特征是先天形成的,比如人脸,指纹,虹膜,视网膜,掌纹,手型,DNA[2]等等。行为特征则是后天形成的,如人脸谱图,签名,语音,步态等等。基于这些生物特征和生物行为的识别技术的研究取得了一些成功。

与以往的识别技术相比,生物识别技术有以下的优势:能够可靠识别一些抵赖行为;防伪性能优异,不容易被盗或者伪造;用户使用方便,不易损坏;能很好的识别特征所代表的主人;不会被遗忘、丢失、损毁、转让。

人脸识别是在生物识别当中占很重要的部分,应用的领域非常之大。人脸与其他的生物特征是一样的,同样是先天性的,它们拥有特征唯一性和很难被拷贝的特质为身份识别提供了很好的措施,人脸自动识别技术跟其他生物识别比起来说的话,有以下的优点[2]:

(1)首先它的获取图像方式比较友好,容易被接受;

(2)操作方便、便捷,具有很强的追踪能力,而且不需要专业人员辅助,普通人员就可以直接判断核实,而非专业人员是不具备对于虹膜、指纹的判断的;

(3)具有隐蔽性,非常适合对犯罪分子进行监控,适合用于安检等,这对其他的生物识别来说是很难代替的;

1

工程硕士专业学位论文

2

(4)识别的结果直观易懂,适合推广,另外图像采集设备成本可控。而其

他专业设备如DNA 检测仪,费用就相对高昂。

目前人脸识别的准确率已经越来越高,这使得人脸识别很容易被接受,推广

起来难度较小。人脸识别在商业领域有着巨大的前景,越来越受到大家的重视。

这些年来人脸识别技术得到快速的发展,目前在国内已经有人脸识别技术在商业

上的应用成功的案例。而随着人脸自动识别技术的进步,人脸自动识别技术在很

多的领域都得到广泛的应用,例如,视频会议、智能卡、视频监控、公安系统侦

测、身份证等证件验证、自动门卫系统、银行安全监控等。人脸识别具有重要的

应用价值,而且在模式识别中有非常重要的理论研究意义。目前人脸自动识别在

图像领域的研究比较成功,这些年人脸自动识别也在人工智能的领域成为了学者

研究的热门课题。

1.2 人脸识别的主要内容

人脸识别主要是希望解决两个问题:对个人身份的鉴别和确认。身份鉴别是

通过匹配去确认用户的身份信息,身份确认则是为了确认是否是其声明的信息。

前者是一对多的比较,后者是一对一的比较。本文的人脸特征识别包含了身份鉴

别和身份确认这两个部分的。本文中将身份鉴别和身份确认都称为身份识别,不

去区分这两者。

人脸识别通常是指通过已有的人脸库,利用相关的人脸识别技术,达到检测

和识别人脸的目的。人脸识别主要分为人脸检测、人脸表征、人脸识别三个过程,

如下图1.1。

图像

人脸 特征

图1.1 人脸识别图 1.2.1人脸检测

人脸检测包括三个步骤:分别是人脸检测、人脸定位和人脸跟踪。人脸检测

就是通过获取的图像,然后判断其中存在人脸与否,并且我们还可以在给出一些

条件的情况下计算出人脸的位置以及大小。人脸跟踪是指在一系列的图像中进行

实时的检测人脸。人脸检测很容易受到噪声、光照、摄像机参数以及遮挡等影响。

人脸检测也跟人脸表征和人脸识别的准确率相关,所以人脸检测是人脸特征识别

中很重要的一步。这几年来,人脸检测也逐渐发展为一项单独的研究方向,并越

基于OpenCV 的人脸识别算法研究与实现

3

来越受到研究者们的关注。

1.2.2 人脸表征

人脸表征就是人脸特征提取。人脸的特征表达同时有多样性和唯一性的特

点,我们在提取特征的时候要同时保证这两个特性才能很好的对人脸图像进行准

确描述。通常人脸图像的信息量是非常巨大的,我们为了提高算法效率就必须对

获取的图像做一个降维处理。

1.2.3人脸识别

人脸识别是将需要识别的人脸去比较已有的人脸库,从而得到识别出的人脸

和原始人脸特性的相似度。前面也介绍过,人脸识别一般分成人脸确认和人脸辨

认。人脸辨认会涉及到海量人脸数据的处理,所以人脸辨认会比人脸确认要困难

很大,计算也复杂很多。在海量人脸数据处理中,处理时间以及处理精度是首要

目标,所以人脸识别的重点是如何选择人脸特征提取的算法以及如何去匹配从而

保证算法的识别效率。图1.2是一个典型的人脸识别系统。

图1.2 典型的人脸识别系统

1.3 人脸识别问题中的疑难点

有很多种生物特征识别算法可以鉴别人的身份信息,比如声音、虹膜、指纹、

DNA 等,这些生物特征识别技术都有一些各自的缺陷。虽然人脸识别在应用方

面有着很大的优势,但是人脸的多样性又会给识别过程带来很多困难。具体的说,

它的困难主要表现在:

(1)人脸识别计算的复杂性

很多经典的识别案例比如文字识别只需要处理比较少的类,而且每个类都有

大量的训练样本,但是在人脸识别中,所需要训练的样本类非常多,而且每个类

训练个数也少,这样识别算法在少量的训练样本中提取特征,进行匹配。尽管目

前出现的一些商用的人脸识别系统已经可以使用,但是如果希望人脸识别技术大

工程硕士专业学位论文

规模应用于商业用途上,人脸识别还有很多实际问题需要解决。

(2)人脸图像的获取会受到多方面影响

从目前来看,姿态、光照、人脸表情、背景、装饰、遮挡、成像条件、年龄跨度等干扰因素对算法效率的影响可能会超过算法本身的影响。姿态:人脸出现的姿态多种多样,这会导致人脸图像外观上的变化;光照:对于大多数基于灰度统计特性的识别算法而言,光照的强度和分布方向也会对人脸图像上的灰度特征的分布有很大影响;人脸表情:人脸图像会因人的表情和心理状态的不同而表现出不同的特征;背景:人所处的环境也会直接影响到识别算法;装饰:人脸的一些装饰会影响到人脸的识别算法,比如眼镜、化妆效果;遮挡:人脸在某些特殊的环境下会受到一定的遮挡,这些被遮挡的部分的人脸特征会丢失;成像条件:人脸成像过程中,摄像机离人眼的距离、摄像的方向和角度、光照的强弱都会影响识别效果;年龄跨度:年龄跨度也是人脸识别不可忽略的一个因素,人脸图像会随着人的年龄增长而产生变化。

(3)人脸识别算法的适应性问题

人脸图像会随着人的年龄增长而产生变化。尤其是在青年阶段,年龄对人脸图像影响可能会非常巨大,而由于很长的时间跨度问题,每个年龄阶层的样本采集又比较困难,这给算法的稳定性带来了很大的挑战。

1.4 人脸识别的应用

任何一种新技术的发展都会受到商业应用的激励,人脸识别也是一样,它一开始是应用于公安部门的刑侦破案上。而如今,人脸识别已经应用到了社会生活的各个领域,主要有以下几个方面[2]:

(1)信息安全:对重要文件的加密和解密、计算机系统和网络的登陆

(2)商业企业:电子货币、考勤系统

(3)证件鉴别:学历证明、身份证、护照

(4)场所进出:金融机构、国家机要部门的门禁识别

(5)公共安全:反恐、公安刑侦、边防检查

(6)家庭娱乐:智能家居、体感游戏

(7)异地检测:社保异地证明

从应用上来说,人脸确认技术可以用于门禁系统、银行安全领域、身份证鉴别等。而人脸辨认技术可以应用于公安刑侦,根据FERET的FRV2002报道,最新一种应用是Watch List Task[3],它就是人脸确认和人脸辨认技术的综合。这种技术的过程是这样的,对原始图像,系统会先从一个数据库中检索出一个与它类

4

基于OpenCV的人脸识别算法研究与实现

似的图像集合,若其相似度超过了一定的阈值,则对这个图像集合进行身份验证并给出这个图像的鉴别结果。

我国的第二代身份证号码与一代身份证号码有所不同,第二代公民身份证是一种智能卡,身份证中的芯片不仅包含了文字这些常规信息,还包括了指纹信息、人脸照片,由于身份证是我国的法定证件,在录入人脸照片时,脸上不能有疤痕、缺陷等,第二代身份证对人脸照片有以下要求:拍摄前要擦拭汗水油污;拍摄时要着深色有领衣服,并且如果本人佩戴眼镜,拍摄时必须佩戴眼镜,如果眼镜片反光,可佩戴无镜片镜框并且镜框不能遮挡眼睛;必须是正面头像等。如果需要对公民身份证进行人脸识别,这些细致的要求可以尽可能减少影响识别算法的因素,提高识别效率和准确率。

1.5 本文研究的主要内容和组织结构

综上所述,人脸识别具有广泛的应用前景和重要的学术价值。如果在比较复杂的背景条件下去实现人脸识别并且有较高的准确率和较快的速度,还是需要长足的研究计划和改进。其中,人脸识别算法是整个人脸识别课题的核心,特别在复杂外界条件下的人脸识别,识别效果会受到光照、遮挡、表情等因素影响。本文了解了基于不同思想的人脸识别算法,对PCA算法进行深入研究,并且ORL 人脸库进行了实验分析。

本文主要分成五章,每章内容安排如下:

第一章主要介绍了人脸识别的研究背景和意义,描述了人脸识别的研究内容,并提出了需要解决的难题以及以后的发展方向。

第二章介绍了人脸检测和识别的基本理论。本章将分别详细描述人脸检测、定位的理论,人脸特征提取的理论以及人脸识别的评价标准。

第三章深入讨论人脸识别算法的研究。

第四章详细介绍了本文采用的人脸识别算法。

第五章介绍了本文基于OpenCV的人脸识别系统的实现。

本文的最后是结语,简要的概括了本文的一些基本内容,同时对以后的人脸识别的研究工作进行了展望。

5

工程硕士专业学位论文

第二章人脸检测与识别的理论基础

2.1人脸检测及定位的理论基础

目前,国外对人脸识别的研究非常多,比较知名的研究机构包括麻省理工学院、卡内基美隆大学等。国内对人脸识别的研究相对起步较晚,近年来,国内很多知名学校都投入了人脸识别的研究工作,如清华大学、中科院计算机所和自动化所、南京理工大学、浙江大学等,这些学校和机构已经取得了很大进展,理论水平也逐渐接近国际先进水平[4~6]。

彭敬业等[7]提出了一种贝叶斯人脸识别方法,它使用几个近似表达式作为匹配准则,并且提出一种快速计算方式,与基于图像灰度的方法相比,识别率提高了8%左右。机器学习委员会主任周志华等[8]提出了一种将神经网络集成应用于多视角人脸识别算法,通过多视角特征分析的方式获得人脸的特征,其识别的精度由75.625%提升到97%。王世光等[9]提出了一种基于纹理特征分布和基于变形模型的脸部特征提取的方法,有效解决了可变形模板对参数初始值依赖性强和计算时间长的问题。

2.1.1 基于知识规则的方法

基于知识规则的方法是根据人脸的先验知识来进行检测人脸的。正常情况下在一副人脸的图像中具有对称的两个眼睛、鼻子、嘴。通过这些器官之间的位置关系来表达这些特征之间的关系。但是使用这种方法的前提是我们必须将人类的知识详细转换到非常明确的规则。而规则的详细和明确会导致检测的错误率过高。

Yang等[10]提出一种基于人脸知识的多级人脸检测方法,这个方法中使用了三级人脸区域灰度分布区域规则,根据规则对输入图像进行选择,用样本满则这些规则的程度来作为判断人脸检测的依据。卢春雨[4]对这个提出改进,按照人脸器官的分布将人脸分成3*3个block,在算法中自适应地去调整每个block 的大小,再使用一组基于每个block的灰度统计和梯度统计的规则去检测人脸,并取得了较好的效果。李华胜等[11]提出了一种利用区域增长来分割人脸区域,再利用霍夫变换和模板匹配等方法提出人脸区域,如鼻子、眼睛、嘴巴等特征。其实验结果是这个方法的识别率能达到95.5%。

6

基于OpenCV 的人脸识别算法研究与实现

7

2.1.2 基于可视特征的方法

基于可视特征的方法利用了可视人脸的特征来总结先验知识,再通过使用人

脸分布、颜色、纹理等特征来检测和识别人脸图像。

(1)几何特征

大部分人脸的外观虽然各有不同,但是其内部构造是存在一定的规律的,其

五官的位置分布存在一定的比例关系。图2.1为人的五官位置的相对比例。

图2.1 人脸器官的相对位置分布

这张图说明每个人脸尽管不太相同,但是五官的比例和位置不相上下的。这

种特征就可以用来检测输入图像中是否存在满足条件下的人脸图像区域。

Yang 等[10]提出一种基于人脸灰度分布的知识规则的方法,将人脸图像从低

分辨率到高分辨率进行筛选,用样本的符合知识规则的程度来作为检测人脸的算

法方案。Sirohey 等[12]提出一种方案,先用canny 算法进行边缘检测,再对这些

边缘筛选分组,最后用椭圆来拟合人脸轮廓,从而达到从背景中分割人脸的效果。

Chetverikov 等[13]提出了一种人脸亮度分布形成的斑点和条带信息去检测人脸,

人脸是包括两个黑点(眼睛)和三个亮点(鼻子及其两侧),条带表示人脸轮廓

和眼眉、嘴等信息。但是基于几何特征的方法有很明显的缺陷,它可能会受到光

照、噪声、遮挡等因素的影响,并且人脸的阴影区域会给几何特征带来不良的影

工程硕士专业学位论文

响。

(2)纹理特征

人脸拥有独特的纹理特性,不同于其他事物。Dai等[14]利用了基于空间灰度相关矩阵的参数特征来表述纹理特征,输入图像先用颜色信息加强,再用空间灰度矩阵去得到结构化的特征,把人脸的结构化模型检测作为检测人脸的依据。

(3)颜色特征

人的肤色也是比较显著的一个特征,它是人脸的一种显著纹理,利用颜色去检测人脸是一个可靠的办法。经过大量研究表明人类的人脸个体差异是由于亮度引起的,而不是色度[15]。

目前来说,已有的颜色空间模型包括RGB,HSV,YIQ,CIE,YCrCb,YES 等,它们都已经被用于人脸肤色的标记。Dai等[14]提出使用空间灰度相关矩阵的参数特征来表述纹理特征,利用这些参数去建立人脸模型,由于人脸颜色接近橘黄色,所以又将人脸模型结合YIQ颜色空间中的I分量,从而建立人脸检测算法。人脸肤色有很多优点:第一,使用人脸肤色进行人脸检测由于没有使用一些特殊的人脸特征,这就会大大减少头部的姿态和方向对算法效率的影响;第二,它不限制人脸的自由活动,减少了实际环境对算法的影响。但是使用肤色检测人脸必然会受到光源颜色和光照角度的严重影响,所以利用肤色检测人脸也是一个非常复杂的问题。现在很多基于颜色的人脸识别的研究都会把颜色信息与形状信息、运动信息结合起来,利用图像序列来定位和跟踪人脸。

2.1.3 基于模板匹配的方法

模板匹配是指通过计算输入图像与模板的相关性达到识别人脸的效果,在模板匹配的算法中,人脸模板一般都是人为定义的。

我们首先介绍的是通用模板的匹配,对于输入的人脸图像,分别去计算通用模板中的脸部轮廓、眼睛、鼻子等相关值,然后用相关值去计算相关程度,并用于确定人脸的是否存在。但是由于过于简单的人脸模板不适应尺寸、姿态和形状的变化,所以在很多场合中模板匹配的方法并不适合。在现实研究中,模板匹配算法用的比较多还是采用多尺度、多子模板以及可变形模板等方法。下面就来介绍一种常用的方法——可变形模板匹配。可变形模板匹配可以说成是基于几何特征方法的改进版,它通过设计一种参数可以调整的人脸模型并定义了一个能量函数使之最小化,此时的最小化能量函数的参数就是人脸的几何特征。这种方法存在的缺陷有两个,一个是能量函数的设计,确定能量函数中的系数是需要经验值的;一个是能量函数优化过程复杂,效率不高,在商业应用中可能不一定适合。

Lades等[16]提出了一种动态链接模型(DLA),这种方法是针对畸变不变形

8

基于OpenCV的人脸识别算法研究与实现

的物体进行识别,它将待识别的图像用稀疏图来表征,见图2.2,其顶点使用多尺度描述,边用来表示拓扑关系,并利用几何距离进行标记。然后用基于匹配代价的函数优化的弹性图匹配技术去实现识别人脸的。

图2.2 人脸弹性图匹配方法

2.2人脸的特征提取与识别理论基础

人脸特征提取和识别方法的发展可以分成三个阶段[17]:

第一阶段主要研究人脸的面部特征。在Bertillon的系统中,联系输入图像和数据库中的一张人脸图像,并结合指纹分析提供了一个较完善的识别系统。Allen[18]为了提高脸部识别率设计了一种有效的模拟重建,Parke实现了这一想法,实现出的模型质量较高[18]。

第二阶段是人机交互阶段。代表性工作的有Goldston等[19],他提出一种人脸正面图像使用几何特征参数表示,设计了一套基于用21维特征矢量表达人脸正面图像特征的识别系统。Kaya等[20]提出一种基于欧几里得距离表征人脸特征的方法,设计了一套知识引导的自动回溯系统,其中计算人脸的特征参数是采用积分投影的方法,并且这是基于一张图像的,然后利用分类技术去匹配人脸。这个系统能够实现快速实时识别。

第三阶段是人脸自动机器识别的阶段[2]。近些年来,随着计算机性能的大幅提升,人脸识别方法取得了比较大的进展,提出了很多种自动识别的方法。目前主要可以分为以下几类:基于几何特征的人脸识别、基于代数特征的人脸识别、基于机器学习的人脸识别。

9

工程硕士专业学位论文

2.2.1基于几何特征方法

基于几何特征的方法基本思想是将人脸表述为一个几何特征矢量,并参照于模式识别方法中的聚类思想去设计分类器,然后进行识别,其中我们如何选取这个几何特征矢量就显得非常关键。我们选取的几何特征矢量是希望能够反映人脸之间的差异,同时希望能减少光照对算法的影响。Brunelli等一开始是用改进的积分投影法提取欧几里得表征的多维人脸矢量,Yuille等则使用了另一种几何特征提取方法,他是使用可变形模板结合人脸活动轮廓进行人脸几何特征提取,Chow等[36]则采用了自适应霍夫变换结合动态模板方法。

2.2.2基于代数特征方法

基于代数特征(特征脸)的方法则一般将图像平面上的像素点变换到一个投影空间中,用基本图像对人脸进行编码,这种方法的目的就是寻找一个从空间域到时间域的最优表示,我们把这个优化的向量叫做特征图像。

首先介绍第一种统计分析方法—PCA。主成分分析是一种用少量的特征描述样本方法,从而达到降维特征空间的目的。其基础是K-L展开式。Tutk等[21]提出了使用K-L展开式的人脸识别方法。它是用K-L展开后的特征向量表述人脸特征,人脸图像和非人脸图像都被投影到同一个子空间,因为人脸在这个子空间是没有本质上的变化的,非人脸则不同。这种方法的好处是既能降维,还能提取人脸的特征。图2.3是ORL人脸数据库的主分量。

图2.3 ORL人脸数据库的主分量

第二种基于代数特征的方法是ICA。ICA是独立分量分析。它是一种非正交线性坐标变换的方法,与PCA方法类似,ICA也通过训练数据计算求得一个特征子空间,之后将输入图像数据投影到这个特征空间,用求得的特征量进行分类和识别。不同于PCA的是,ICA方法是要求独立的去统计特征空间的每个分量。图2.4是基于ICA方法的人脸识别的模型。

10

基于OpenCV 的人脸识别算法研究与实现

11

图2.4 基于ICA 方法的人脸识别的模型

第三种基于代数特征的方法—LDA 。线性判别分析的基本思想是将多维空间

的样本数据投影到一维特征空间,该方法实际上就是将多维模式空间映射到一维

特征空间,用类的成员信息构成一组特征向量,进而体现了不同人脸的变化,我

们将它称之为Fisher-face 。图2.5是 PCA 与LDA 的降维对比图。

图2.5 PCA 与LDA 的降维对比图

2.2.3 基于机器学习的方法

基于机器学习不同于基于几何特征的方法,基于几何特征的方法是专家预先

定义好的,而基于机器学习的方法则是利用统计分析和机器学习的技术从样本中

学习得到人脸特征的。

工程硕士专业学位论文

1.人工神经网络(ANN)

ANN作为模式识别方法的一种在这几年来发展迅猛,是学者们的研究热点之一。神经网络可以描述为单一且大量的神经元连接在一起组成大规模的并行计算系统,神经网络对规则和模型的依赖较低,它具有学习复杂算法的能力,可以通过训练来适应数据[21]。神经网络算法使用二维矩阵表述,利用了神经网络学习和分类的能力,这个方法可提取较为复杂的特征。神经网络在计算方式是并行的而且其信息的编码方式是分布式的。这是目前处理大数据的潮流。在研究方面,Kohen[22]首先使用全互联神经网络存储并重建人脸的图像。该研究经过试验验证,在有噪声存在、有遮挡情况下能有效重建人脸图像,对人脸识别有较高准确度。图2.6就是一个典型的两层感知器网络结构。输入节点数是N,中间节点数是m,输出节点数是c。

图2.6 两层感知器网络结构

2.支持向量机(SVM)

SVM是一种全新的基于统计的机器学习方法[23]。SVM分类器是线性的,其分类能力和学习能力非常出色,也是目前研究的热点之一。SVM是一种线性分类器,它选择可以分离的超平面然后最小化不可见的预知分类错误,它是基于结构最小化的,它不同于基于经验值方法,经验值方法不能解决的模型选择和非线性的一些问题在这里都可以很好的解决。SVM再解决二类问题上面性能非常优异,而对于多类问题,SVM的解决方案是分成很多个二类问题去解决。Jonsson 等[24]提出一种把PCA和SVM结合起来的方法并应用于人脸识别。目前SVM 在解决规模较大的问题时耗费存储空间较大,学习算法效率较低,因此目前来说怎么在实际应用中快速实现SVM识别算法也是非常急需解决的一个难题。图2.7是一个简单的二分类问题。

12

基于OpenCV的人脸识别算法研究与实现

图2.7 简单二分类问题

3.隐马尔可夫模型(HMM)

HMM的思想是假设对象能够被表示为一个参数的随机过程,而且这些参数必须能用一个函数去评价,样本表示成一组观察向量,训练HMM从观察向量中去学习典型概率。Samaria等[25]构建了一套模型利用HMM 进行人脸识别。人脸的空间结构有普遍的共性,从上到下分布分别是前额-眼睛-鼻子-嘴-下巴,Samaria 把人脸图像分成对应的五个部分来构造一系列观察向量,隐式状态就是对应的五个状态组成的HMM。

2.3 人脸识别的评价体系

2.3.1 评价标准

目前用于人脸识别比较知名的人脸库有MIT,CMU等,这些数据库都是一些小型数据库,而每个人脸库的使用标准不同,这使得不同的识别算法的性能不好比较。

为了促进人脸识别的实用化,美国的国防高级项目研究组开展了人脸识别技术FERET计划[26],建立了一个人脸库FERET Database,将其用于人脸识别算法,并制订了一套通用的测试标准。在测试的这些算法中,对于相同条件下的人脸的正面图像,识别率达到了95%以上,对不同光照或者不同摄像机拍的人脸,识别率在85%左右。我国在2004由中科院自动化所发起了“生物特征认证与评测中心”,这个机构开始向国内免费提供数据库。表2.1是参加FERET测试的公司及所采用的人脸识别方法,表2.2是1997年FERET的测试结果。

13

工程硕士专业学位论文

表2.1 参加FERET测试的公司及所采用的人脸识别方法

表2.2 1997年FERET的测试结果

2.3.2性能指标

下面是国际上公认的用于人脸自动机器识别系统系能评价的一些重要的定义和指标[2]:

(1)检测:检测和定位人脸图像的过程

(2)拒检:无法正常检测到人脸

(3)拒检率:被拒检的概率

(4)匹配相似度:指参与比对人脸图像的相似度,相似度越大表示匹配度越高

(5)错误拒绝:指定某匹配相似度为判定阈值,小于这个阈值就表示不能被正确接受的比率

14

基于opencv的人脸识别程序-代码详解

#include "cv.h" #include "highgui.h" #include #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )//如果没有找到分类器,输出以下 { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); fprintf( stderr, "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" ); return -1;

[作业]OPENCV人脸识别

摘要 人脸检测主要是基于计算机识别的一项数字化技术,用以准确获取人的脸部大小和位置信息,在进行人脸检测时,突出主要的脸部特征,淡化次要的环境、衣着等因素。对于某些情况下,人脸检测也可以计算出人脸,如眼睛,鼻子和嘴等精确的微妙特征。由于在安全检测系统,医学,档案管理,视频会议和人机交互等领域人脸检测系统都有光明的应用前景,因此人脸检测逐渐成为了两个跨学科领域研究的热门话题:人工智能和当前模式识别。本文基于OpenCV视觉库具体的设计并开发了对数字图像中的人脸检测的程序,所采用的人脸检测的原理主要是分类器训练模式(Adaboost算法)提取Haar特征的方法。它在整个软件极其重要的作用,图像中人脸的准确定位和识别都受图像处理好坏的直接影响。本次所设计的软件在图像处理部分所采用的方法是基于Adaboost算法进行Haar特征的提取,在此之上加以通过积分图方法来获取完整的级联分类器结构,进行人脸检测时,OpenCV级联分类器通过Adaboost人脸检测算法进行训练,此后采用不同情况下的实验样本完成精确定位以及检测试验。经过代码的设计和调试,在最后的测试中针对数字图像进行的人脸检测和定位达到了较好的效果,提高了定位和识别的正确率。 关键词:人脸检测,AdaBoost,分类器,OpenCV

Abstract Face detection is mainly based on computer recognition of a digital technology,face size and location information to accurately obtain the person,during face detection, highlight the main facial features,dilute the secondary environment,clothing,and other factors.For some cases,face detection can also calculate a person's face,such as eyes, nose and mouth,and other subtle features accurate.Because in the field of human security detection systems,medical records management,video conferencing,and human-computer interaction face detection system has bright prospects,and therefore face detection is becoming a two interdisciplinary research fields hot topic:artificial intelligence and The current pattern recognition.This article is based.penCV vision library designed and developed specifically for digital image face detection process,the principles used face detection methods are mainly classifier training mode(Adaboost algorithm)to extract Haar features.It is in the vital role of the software,the image of the human face accurately locate and identify all that is good or bad a direct impact on the image processing.This software is designed image processing method used in part based Haar Adaboost algorithm to extract features,on top of this to be to get the full cascade classifier structure by integrating the diagram method for face detection,OpenCV cascade classifier is trained by Adaboost face detection algorithm,then the use of the experimental sample under different circumstances for accurate positioning and testing.Through design and debugging code,face detection and location in the final test for digital images to achieve better results and improve the accuracy of positioning and recognition. Keywords:face detection;AdaBoost;classifier;openCV

基于Opencv的人脸检测源程序(附详细使用说明)

基于Opencv的人脸检测程序 我的电脑上是用visual studio 2015,配置opencv2.4.9,visuanl studio加载opencv的方法百度上可以找到很多,按照要求配置好后以后进行一下操作: 第一步:新建win32应用程序的工程,在该工程以下程序复杂被覆盖win32的几行程序, #include"stdafx.h" #include"opencv2/objdetect.hpp" #include"opencv2/videoio.hpp" #include"opencv2/highgui.hpp" #include"opencv2/imgproc.hpp" #include #include using namespace std; using namespace cv; /** Function Headers */ void detectAndDisplay(Mat frame); /** Global variables */ String face_cascade_name = "haarcascade_frontalface_alt.xml"; String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml"; CascadeClassifier face_cascade; CascadeClassifier eyes_cascade; String window_name = "Capture - Face detection"; /** @function main */ int main(void) { VideoCapture capture; Mat frame; //-- 1. Load the cascades if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading face cascade\n"); return -1; }; if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error loading eyes cascade\n"); return -1; }; //-- 2. Read the video stream capture.open(-1); if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

基于Opencv的视频人脸检测程序源代码(可运行)

1.打开Microsoft Visual Studio 2008,新建一个Win32控制台项目; 2.配置好项目的包含文件和库文件; 3.将……\OpenCV\data\haarcascades中的haarcascade_frontalface_alt.xml拷贝到所建项目的文件夹中; 4.然后添加代码: #include"stdafx.h" #include"cv.h" #include"highgui.h" #include int_tmain(int argc, _TCHAR* argv[]) { CvCapture* capture=0; /*初始化一个视频捕获操作。告诉底层的捕获api我想从Capture1.avi中捕获图片,底层api将检测并选择相应的解码器并做好准备工作*/ capture = cvCaptureFromFile( "F:\\1.avi"); //设置要读的视频(avi格式) static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml",0,0,0); if( !cascade || !capture ) return -1; storage = cvCreateMemStorage(0); /*创建一个窗口,用“Video”作为窗口的标识符*/ cvNamedWindow( "Video",1); /*如果初始化失败,那么capture为空指针,程序停止,否则进入捕获循环*/ if( capture ) { for(;;) { IplImage* frame = cvQueryFrame( capture ); IplImage* img = NULL; CvSeq* faces; if( !frame ) break; img = cvCloneImage(frame);

基于OpenCV的视频人脸识别系统的设计与实现

摘要 基于生物特征识别的身份认证方法和系统研究一直以来都是计算机图形学和模式识别领域研究的热点,其中,由于人脸的稳定性和可见性,针对人脸识别的算法研究和系统应用最为广泛,本文针对校园内实验室和宿舍安全管理需求,设计和实现了一套针对监控视频的基于OpenCV的人脸识别原型系统,开发语言选用C++,全文内容包括: (1)构建了基于OpenCV的视频人脸识别的技术框架。针对实验室和宿舍安全管理需要,构建了基于OpenCV的视频人脸识别的技术框架,能够完成基于视频的实时人脸识别和身份认定; (2)设计了基于OpenCV的视频人脸快速检测算法。人脸检测是人脸识别的前提,本文采用基于OpenCV的快速人脸检测算法实现视频图像中人脸的快速定位和提取; (3)设计了基于AdaBoost算法的视频人脸识别方法。应用AdaBoost算法实现了针对视频流的快速人脸定位和身份识别,能够实现实时身份认定。 系统基于.NET平台设计,使用C++语言进行实现,完成了基于视频的实时人脸身份认定。 关键词:人脸检测; OpenCV;人脸识别; C++; 1

Abstract Based on the research of identity authentication method and system of biometric recognition has been a hot research field of computer graphics, pattern recognition and the stability and visibility, the face, the algorithm research and system applications of face recognition is the most widely, according to the laboratory and dormitory safety management needs of the campus, designed and implemented. A face recognition system based on OpenCV in surveillance video, development language is C++, the main content of this thesis includes: (1)Constructed the technical framework for video based face recognition based on OpenCV. According to the laboratory and the dormitory safety management needs, establishes a framework for video based face recognition based on OpenCV, which can complete real-time face recognition and identity based on video identification; (2)Design of a fast face detection algorithm in video based on OpenCV. Face detection is the precondition of face recognition, this paper uses OpenCV fast face detection algorithm to locate face in video image and extraction based on;The design use application of OpenCV to provide strong support, based https://www.doczj.com/doc/c37024252.html, platform design. (3)Design of video based face recognition method based on AdaBoost algorithm. Application of AdaBoost algorithm for fast face location and recognition of video stream, which can realize real-time identification. System based https://www.doczj.com/doc/c37024252.html, platform design, implementation is carried out using C++ language, completed the real-time face identity recognition based on video Key word:Face detection;OpenCV;Face recognition;C++;

基于opencv的人脸检测界面开发

摘要 人脸检测(Face Detection)是一种在任意数字图像中找到人脸的位置和大小的计算机技术。它可以检测出面部特征,并忽略诸如建筑物、身体和其他任何东西。人脸检测技术不仅仅是人脸跟踪、人脸识别、表情识别等技术的重要条件,同时在人机交互、模式识别、视频检索、智能监控等领域也引起了广泛的重视。 在通过对人脸检测相关知识进行学习的基础上,本文首先对国内外的人脸检测发展进行了相关分析,阐述了本课题的研究背景及意义;第二章介绍基于Opencv实现人脸检测的相关方法和检测原理;第三章指出了基于QT平台,人脸检测界面如何开发,需要用到的相关技术知识和操作流程。第四章设计了基于opencv的人脸检测程序,采用了QT开发工具并结合opencv技术对程序界面进行设计实现。 关键词:人脸检测;QT开发;Opencv;

Abstract Face detection is a computer technology that identifies human faces in digital images. It can detect facial features and ignore something like buildings,bodies and any other things.Face detection technology is not just an important condition for face recognition, also attracting wide attention in the human-computer interaction, pattern recognition, video retrieval, intelligent monitoring and other fields. Firstly in this paper, through the study of relevant technology of face detection recognition, and face detection to identify relevant experience in the domestic and abroad are analyzed,indicating the background and the significance of the topic.Based on opencv,the second chapter introduces how to realize the design.Then the third chapter points out how to develop face detection’s interface based on the QT platform; The fourth chapter based on opencv face detection procedures, using opencv, the QT development tools,achieve the design. Key Words:Face detection; QT development; Opencv;

基于OpenCV的人脸检测算法研究

第8卷第3期 2009年8月  淮阴师范学院学报(自然科学版)JOURNA L OF HUAIYIN TE ACHERS CO LLEGE (NAT URA L SCIE NCE E DITION ) V ol 18N o 13Aug.2009 基于OpenCV 的人脸检测算法研究 齐金山 (淮阴师范学院计算机科学与技术学院,江苏淮安 223300) 摘 要:介绍了一种开放源代码的计算机视觉类库OpenCv ,阐述了该软件的特点及结构,并对 其在Visual C ++2005开发环境下的配置作了详细的说明.然后提出了一个基于OpenCv 的人 脸检测算法.实验结果表明,该算法具有识别效果、实时性好,检测速度快的特点. 关键词:OpenC V ;人脸检测;I pIImage 中图分类号:TP391.41 文献标识码:A 文章编号:167126876(2009)0320216205  收稿日期:2009205222  作者简介:齐金山(19772),男,湖南株洲人,讲师,硕士,研究方向为数字图像处理. 0 引言 人脸的检测是一类具有很大挑战性的问题[1] ,其主要难点在于:人脸是一类高度非刚性的目标,存在相貌、表情、肤色等差异;人脸上可能会存在一些附属物如眼镜、胡须等;人脸的姿态变化万化,并且可能存在遮挡物;待检测图像性质的差异,比如:待检图像的分辨率、摄录器材的质量等.针对以上难点,各国的科研人员作了很多的研究,每年在国际国内的相关期刊和会议上都有大量的关于人脸检测的论文, 如Chellappa 、Zhao 等人分别于1995和2003年发表的两篇人脸识别的综述论文[2,3].人脸检测的算法也 很多,Boosting 算法[4]是其中的一种,但Boosting 算法十分复杂.本文提出了基于OpenC V 进行人脸检测 将比较容易实现,实验结果表明该算法具有识别效果好、实时性好、检测速度快的特点.1 OpenCv 简介 OpenC V (Open S ource C om puter Vision Library )是指Intel 计算机视觉库[5].它由一系列C 函数和少量 C ++类构成,实现了图像处理和计算机视觉方面的很多通用算法.OpenC V 主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识别以及3 D 重建等.由于OpenCv 的源代码是完全开放的,而且源代码的编写简洁而高效,特别是其中大部分的函数都已经通过汇编最优化,以使之能高效而充分地利用英特尔系列处理芯片的设计体系,对于Pentium M MX 、Pentium 、Pentium HI 及Pentium 4这些处理器而言,OpenCv 的代码执行效率是非常高的,所以近年来在国外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理软件. 111 OpenCv 的特点 相对于MAT LAB 等其它常用的图像处理软件来说,OpenCv 有其显著的不可比拟的优点,主要体现在如下几个方面: 1)OpenCv 是一个包含了超过300个C 函数的应用编程接口,它不依赖于外部库,既可以独立运行,也可在运行时使用其它外部库. 2)高性能:OpenCv 中所有的算法都是基于封装于IP L 的具有很高灵活性的动态数据结构,而且其中有一半以上的函数在设计及汇编时被Intel 公司针对其所生产的处理器优化. 3)提供了一些与诸如E iC 、Ch 、MAT LAB 等其它语言或环境的接口,这些接口在其安装完之后位于安装目录opener/interfaces 下. 4)开放性:不管对于商业的还是非商业的用途,OpenCv 都是完全免费的,其源代码完全开放,开发

《基于 OpenCV的人脸识别系统》

西安电子科技大学 人工智能学院暑期夏令营科研实践《基于OpenCV的人脸识别系统》 实践报告 姓名:XXX 学校:XXXX 院系班级:XXXXXXXXX 联系方式:XXXX

目录 1 项目背景 (1) 2 项目目标 (1) 3 项目方案 (2) 3.1 人脸采集 (2) 3.2 人脸训练 (3) 3.3 人脸识别 (4) 4 项目调试 (6) 4.1 采集调试 (6) 4.2 训练调试 (6) 4.3 识别调试 (7) 5实践总结 (8)

如何创造一个安全的、数字现代化的、智能化的宿舍门禁系统有着十分重要的意义。然而,在日常管理中我们经常会碰到这样的问题:外来人员混入宿舍带来的安全隐患、夏天未带校园卡而在公寓楼前苦等、宿舍出入口必须有人盯守、晚归被困公寓楼外等等。 在当今计算机普及与急剧增长的状况下,应该实施一些高效率的系统,不仅省钱,省事,而且便捷,针对以上情况,十分有必要建立一个全面、高效、人性化、智能的高校宿舍出入管理系统。 因此,做一个人脸识别系统就非常地有必要! 2 项目目标 本项目拟完成人脸采集、人脸训练和人脸检测与识别的功能。 人脸采集程序主要完成以下功能: 1. 建立新的文件夹:用户根据提示输入自己姓名的简称,程序会在工程目录下建立该用户的文件夹,用以存放拍摄的照片; 2. 打开摄像头和写入图像:调用笔记本摄像头,当P键按下时,显示当前帧的图像,经处理后,保存图像;当q键按下时,立即退出采集程序 3. 人脸检测与裁剪:在当前帧识别出人脸后将其裁剪至ORL人脸数据 库大小即92x112。 人脸训练程序主要完成以下功能: 1. CSV文件读取:CSV文件对应的图像数据和对应的标签; 2. 样本训练:包括ORL人脸数据库的样本和自己的样本。 人脸训练样本取自ORL人脸数据库,共40个人,每人10张照片。照片在不同时间、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集,所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有轻微旋转)。此外,增加自己的样本,并以相同尺寸拍摄20张左右图像。 人脸识别与检测程序主要完成以下功能: 1. 人脸检测:识别出当前帧是否有人脸; 2. 人脸预测:根据训练结果判断当前帧中人脸是否属于样本集; 3. 姓名显示:若属于样本集则显示姓名缩写,否则,显示“0”。

基于OpenCV的人脸识别设计方案

基于OpenCV的人脸识别设计方案 导读: 本文提出了一种在Linux 平台下开发脸识别系统的方案,通过QT 来开发用户界面,调用OpenCV 图像处理库对相机进行采集和处理采集图像, 从而实现了人脸检测、身份识别、简单表情识别的功能。 人脸识别的研究可以追溯到上个世纪六、七十年代,经过几十年的曲折发展 已日趋成熟,构建人脸识别系统需要用到一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等。而人脸识别在基于 内容的检索、数字视频处理、视频检测等方面有着重要的应用价值,可广泛应 用于各类监控场合,因此具有广泛的应用前景。OpenCV 是Intel 公司支持的开 源计算机视觉库。它轻量级而且高效--由一系列 C 函数和少量C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法,作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,其 中就包括很多可以应用于人脸识别的算法实现,是作为第二次开发的理想工具。 1 系统组成 本文的人脸识别系统在Linux 操作系统下利用QT 库来开发图形界面,以OpenCV 图像处理库为基础,利用库中提供的相关功能函数进行各种处理:通 过相机对图像数据进行采集,人脸检测主要是调用已训练好的Haar 分类器来 对采集的图像进行模式匹配,检测结果利用PCA 算法可进行人脸图像训练与 身份识别,而人脸表情识别则利用了Camshift 跟踪算法和Lucas–Kanade 光流算法。 2 搭建开发环境 采用德国Basler acA640-100gc 相机,PC 机上的操作系统是Fedora 10,并

基于OpenCV的人脸识别算法研究

基于OpenCV的人脸识别算法研究 摘要:通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉类库openCV进行人脸检测系统的设计,实现了对出现在视频或图像中的人脸检测。此外,在VC++6.0环境下实现了对一个简单的人脸检测系统软件的界面开发,该系统对人脸检测的速度较快,检测结果较为准确,可以作为其他人脸检测或人脸模式识别的系统的开发基础。 关键词:人脸检测;openCV;Adaboost;系统 Face detection system design based on openCV Abstract: According to the research of Adaboost algorithm of Face Detection,people made use of the algorithms and computer vision class library openCV for the design of face detection system and achieved the target of detecting faces showing up in videos and pictures. What’s more,in the environment of VC++6.0,it achieved the development of simple Face Detection. The speed of Face Detection is very fast and the test results are accurate. It can be used as the development foundation of other face detection or face pattern recognition system. Key words: face detection;openCV;Adaboost;system 1.引言 随着计算机与数字信号处理技术的高速发展,人脸检测技术在众多领域得到广泛应用。人脸检测技术是指在视频或图像中检测出现人脸位置、大小的过程。作为人脸信息处理中的一项关键技术,人脸检测技术已经超出了其它人脸识别模式的应用范畴,在视频处理、图像处理、身份验证、安全监测等方面有着重要的应用价值。随着计算机语言算法的发展,近年来出现了大量的人脸检测的算法,其中能够较好的解决人脸的检测速度与检测效果的算法,是在2001年由Paul Viola和Michael Jones首先提出的Adaboost算法。openCV是由Intel 提供的一系列包括C与C++的提供计算机视觉和图像处理的开源软件包,它为视频或图像处理搭建了很好的软件平台。本系统就是基于openCV利用Adaboost算法设计的一个简单的人脸检测系统#该系统能够快速&准确的检测到图像或视频中的人脸。 2.AdaBoost人脸检测算法 对人脸检测的研究最初可以追溯到20世纪70年代,早期的研究方向与现在的研究方向与方法不同。目前在实际中应用的人脸检测方法较为普遍的是基于Adaboost算法的方法。 Viola的人脸检测方法是一种基于积分图、级联分类检测器和Adaboost算法的方法,方法框架可以分为以下3大步骤: 1)使用Haar-like特征表示人脸,使用“积分图”实现特征数值的快速计算; 2)使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器; 3)将得到的若干强分类器串联组成一个级联结构的层叠分类器,训练得到的强级联结构能有效地提高分类器的检测速度。

怎样使用OpenCV进行人脸识别

怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容 (https://www.doczj.com/doc/c37024252.html,/modules/contrib/doc/facerec/facerec_tutorial.html),小弟我尝试翻译一些重要内容。这部分内容是Philipp Wagner写的,他的github:https://https://www.doczj.com/doc/c37024252.html,/bytefish,他的网站http://www.bytefish.de/,应该是个德国人。下面应该是他的照片。 友情提示,要看懂代码前,你得先知道OpenCV的安装和配置,会用C++,用过一些OpenCV函数。基本的图像处理和矩阵知识也是需要的。[gm:我是箫鸣的注释]由于我仅仅是翻译,对于六级才过的我,肯定有一些翻译错的或者不当的地方,所以请大家纠错。 1.1.介绍Introduction 从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的 opencv\modules\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂) 目前支持的算法有 Eigenfaces特征脸createEigenFaceRecognizer() Fisherfaces createFisherFaceRecognizer() Local Binary Patterns Histograms局部二值直方图createLBPHFaceRecognizer() 下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

毕业设计:基于OpenCV的人脸识别算法(终稿)-精品

安徽工业大工商学院 毕业学士论文 基于OpenCV的人脸识别算法 姓名:陈滔 申请学位级别:学士专业:测控技术与仪器 指导教师:方挺

摘要 人脸在社会交往中扮演着十分重要的角色,是人类在确定一个人身份时所采用的最普通的生物特征,研究人脸跟踪识别及其相关技术具有十分重要的理论价值和应用价值。彩色图像序列的人脸检测、跟踪与识别技术是随着计算机技术的高速发展和视频监控等应用的需要在近几年才逐渐成为一个研究热点。本文着重构建一套人脸跟踪识别系统,致力于精确实时地对彩色视频中的人脸图像检测跟踪,并可以将跟踪到的人脸图片传输到识别端进行身份识别。系统分为客户端和服务器两部分。针对传统Camshifl跟踪算法进行形态学处理、分配多个跟踪器等改进后的算法应用于客户端进行多人脸的跟踪。服务器端首先将人脸图像按其主要特征进行分块,再对分块图执行Eigenface算法实现人脸身份的识别。这套系统完成了对多人脸的跟踪效果,可广泛的应用于各种安防系统之中如:ATM机监控系统,门禁系统等。

Abstract Human face is 0111"primary focus of attention in social intercourse playingamajor rolei conveying dentity and emotion.Researchonthe face tracking,recognition technology has great theoreticaland practical value.This paper focusesOilbuildingasetofhumanface recognition and trackingsystem tocommitted toaccurate and real-timecolorvideoimages,andcalltransmit the tracked human face image to the recognition part to identify the person’S status.Thesystem is divided into client and server parts.Thetracking algorithm whichcarrieson morphology processing after traditional track algorithm Camshifl and assignments severaltrackingdevices is applied to the client for duplex facetracking.Theserver—side first divides the person face image into blocksaccording to its chief feature,then the blocksuses the Eigenfacealgorithm separately to realize the person’S status recognition.The system implementation for multiple face trackingcallbe widelyused among the various security systems,suchas:ATM machine monitoring system,accesscontrol system.Keywords:Face DetectionFace TrackingFace Recognition Eigenface Camshift

基于OPENCV的人脸识别程序 代码详解

#include"cv.h" #include"highgui.h" #include #ifdef_EiC #define WIN32 #endif static CvMemStorage*storage=0; static CvHaarClassifierCascade*cascade=0; void detect_and_draw(IplImage*image); const char*cascade_name= "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main(int argc,char**argv) { CvCapture*capture=0; IplImage*frame,*frame_copy=0; int optlen=strlen("--cascade="); const char*input_name; if(argc>1&&strncmp(argv[1],"--cascade=",optlen)==0) { cascade_name=argv[1]+optlen; input_name=argc>2?argv[2]:0; } else { cascade_name="E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name=argc>1?argv[1]:0; } cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0); if(!cascade)//如果没有找到分类器,输出以下 { fprintf(stderr,"ERROR:Could not load classifier cascade\n"); fprintf(stderr, "Usage:facedetect--cascade=\"\"[filename|camera_index]\n"); return-1;

OpenCV利用摄像头人脸识别

?Introduction 网上存在很多人脸识别的文章,这篇文章是我的一个作业,重在通过摄像头实时采集人脸信息,进行人脸检测和人脸识别,并将识别结果显示在左上角。 利用OpenCV 实现一个实时的人脸识别系统,人脸库采用ORL FaceDatabase (网上下载) ,另外在数据库中增加了作业中自带的20张照片和自己利用摄像头采集到的10张照片,系统利用摄像头实时的采集到场景图像,从中检测出人脸用方框标出,并利用提供的数据库进行人脸识别,并在图像左上角显示相匹配的数据库图片。 ?Method 算法流程分两步,分别是人脸检测和人脸识别。人脸检测使用的是ViolaJones 人脸检测方法,利用样本的Haar-like 特征进行分类器训练,得到级联boosted 分类器,加载训练好的人脸分类器,利用分类器在视频帧中查找人脸区域;人脸识别利用了局部二进制模式直方图。 ?Haar-like 特征 Haar-like 特征如下图所示 图1 Haar-like 特征 ?LBPH 人脸识别常用的方法有三种,Eigenfaces、Fisherfaces 和LBPH;对于高维的图像空间,我们首先应该进行降维操作。LBP 不把图像看做高维的矢量,而是通过物体的局部特征来描述。 将每个像素和其相邻像素对比形成局部的结构,把该像素看做中心,并以该值对邻接像素做阈值处理,如果临界像素的亮度大于该像素则为 1 否则为0,这样每个像素点都可以用一个二进制数来表示,比如一个使用3*3 临界点的LBP 操作如下图所示: 图2 LBP

?Implementation ?识别训练 利用准备好的数据库进行识别训练:首先我们利用Opencv安装文件中的python脚本 create_csv.py建立CSV文件,文件中每条记录如:orl/s13/2.pgm;12,分号之前是图片所存路径,而分号之后是图片的标签号,每一组图片对应着唯一的标签号;之后利用代码中的train_data和read_csv函数对数据集进行训练。使用到的OpenCV 类和函数有: FaceRecognizer,createLBPHFaceRecognizer ?人脸检测 运用Opencv安装文件中的haarcascade_frontalface_alt.xml文件,使用分类器在视频帧中查找人脸区域,并用绿色方框标出。用到的OpenCV 类和函数有: CascadeClassifier,detectMultiScale。 ?人脸识别 读取训练好的yaml文件,对每个监测到的区域的图像分类,并在视频帧人脸区域上方显示分类结果(分类结果显示为标签和可信度),在左上角显示缩略图。用到的OpenCV 函数主要有:predict. ?Code 1/*头文件:*/ 2 #include "opencv2/core/core.hpp" 3 #include "opencv2/contrib/contrib.hpp" 4 #include "opencv2/highgui/highgui.hpp" 5 #include "opencv2/imgproc/imgproc.hpp" 6 #include "opencv2/objdetect/objdetect.hpp" 7 8 #include 9 #include 10 #include 11 #include 12 13char *FACES_TXT_PATH = "face.txt"; 14char *HARR_XML_PATH = "haarcascade_frontalface_alt.xml"; 15char *FACES_MODEL = "face.yaml"; 16char *POTRAITS ="potraits.jpg"; 17int DEVICE_ID = 0; 18 19/*主文件*/ 20 #include "config.h" 21

相关主题
文本预览
相关文档 最新文档