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

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

基于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)将得到的若干强分类器串联组成一个级联结构的层叠分类器,训练得到的强级联结构能有效地提高分类器的检测速度。

2.1 Haar-like特征
haar特征是基于灰度图,首先通过大量的具有比较明显的haar特征(矩形)的物体图像用模式识别的方法训练出分类器,分类器是个级联的,每级都以大概相同的识别率保留进入下一级的具有物体特征的候选物体,而每一级的子分类器则由许多haar特征构成(由积分图像计算得到,并保存下位置),有水平的、竖直的、倾斜的,并且每个特征带一个阈值和两个分支值,每级子分类器带一个总的阈值。

识别物体的时候,同样计算积分图像为后面计算haar特征做准备,然后采用与训练的时候有物体的窗口同样大小的窗口遍历整幅图像,后逐渐放大窗口,同样做遍历搜索物体;每当窗口移动到一个位置,即计算该窗口内的haar 特征,加权后与分类器中haar特征的阈值比较从而选择左或者右分支值,累加一个级的分支值与相应级的阈值比较,大于该阈值才可以通过进入下一轮筛选。

当通过分类器所有分类级的时候说明这个物体以大概率被识别。

常用的Haar-like 特征有线性特征,边缘特征,中心特征。

图1 Harr-like特征
2.2积分图
由于训练样本通常有近万个,并且矩形特征的数量非常庞大,如果每次计算特征值都要统计矩形内所以像素之和,将会大大降低训练和检测的速度。

因此引入了一种新的图像表示方法——积分图像特征的特征值计算法,该方法只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。

这样只要遍历图像一次,就可以求得所有子窗口的特征值。

积分图[2]定义为:
其中I(x′,y′)为图像在点(x′,y′)处的像素值。

为了节约时间,减少重复计算,则图像I的积分图可按如下递推公式计算:
这样就可以进行任意矩形区域内像素积分运算。

由图像的积分图可快速地计算图像中任意矩形内所有像素灰度积分。

如图2所示,点1的积分图像的值为(其中Sum为求和):
图2特征和计算
同理,点2、点3、点4的积分图像分别为:
矩形区域D内的所有像素灰度积分可由矩形端点的积分图像值得到:
2.3 Adaboost算法基本原理
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。

将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

使用Adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。

Adaboost算法中不同的训练集是通过调整每个样本对应的权重来实现的。

开始时,每个样本对应的权重是相同的,即其中n为样本个数,在此样本分布下训练出一弱分类器。

对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分类错的样本就被突出出来,从而得到一个新的样本分布。

在新的样本分布下,再次对弱分类器进行训练,得到弱分类器。

依次类推,经过T次循环,得到T个弱分类器,把这T个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。

Adaboost的具体算法如下:
设输入的n个训练样本为:{(x1,y1),(x2,y2)......(xn,yn)},其中xi 是输入训练样本,yi∈{0,1}分别表示正样本和负样本,其中正样本数为l,负样本数为m。

n=l+m,具体步骤如下:
初始化每个样本的权重;
对每个t=1,...,T(T为弱分类器的个数)
①把权重归一化为一个概率分布:
如此使得ωt为一个概率分布。

②对每个特征f,训练一个弱分类器hj,计算对应所有特征的弱分类器的加权错误率
③选取最佳的弱分类器ht(拥有最小错误率):θt
④按照这个最佳弱分类器,调整权重:
其中θi=0表示被正确的分类,ei=1表示被错误的分类,当错误分类时:
3)最后的强分类器为:
其中
2.4级联分类器
级联分类器是由多个强分类器级联而成的,其中,每一层均有Abadoost算法训练得到的强分类器构成,第一层分类器得到疑似人脸的正确结果后,触发第二层进行分类,当第二层分类器得到疑似人脸的正确结果后,触发第三层进行分类,依次类推,最后确定疑似人脸的图像就确认为人脸。

反之,当触发到某一层时,分类器得到的结果是非人脸时,就立即停止对图像的检测。

级联分类器的结构类似于金字塔,如图3所示,通过级联分类器,可以很对人脸做出检测。

由于本系统较为简单,所以只用到了4级强分类器构成级联分类器。

3人脸检测的软件实现方法简介
3.1.1系统流程
该系统可分为两个模块,静态图像人脸检测和视频图像中的人脸检测。

基于静态图像的人脸检测流程大致可分为4个过程(如图5所示):1)加载已经训练好的分类器;2)将其转化为计算机可以识别的内部格式;3)加载该图片以进行检测;4)显示检测结果到检测区。

基于视频图像的人脸检测主要流程为:1)摄像头提取图像;2)加载已训练好的级联分器并将图像其转化为内部各式;3)判断检测标志位,若为真,首先捕获当前一帧并创建该帧图像,然后载入当前一帧图像,并对图像的人脸区域进行检测,反之,结束检测;4)将检测到的结果显示到检测区。

3.1.2 openCV人脸检测主要函数
openCV软件包中提供了丰富的基于图像和视频处理的视觉类库[4],该系统主要用到的函数有:
1)cascade =(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);该函数主要功能为载入级联分类器,其中,cascade_name为级联分类器的路径。

2)CvMemStorage*storage=cvCreateMemStorage(0);该函数创建一个默认大小为64 kB的内存块并返回指向块首的指针。

3)CvSeq*faces =cvHaarDetectObjects(small_img,cascade,storage,1.1,1,
0,cvSize(40,40));该函数的功能是使用训练好的级联分类器在图像中找到包含人脸目标的矩形区域,并将这个区域作为一个矩形框返回。

4)cvRectangle(img,LeftPoint,RightPoint,color,2,7,0);该函数实现对检测到的人脸区域用方框标记出来。

5)获得被检测到的人脸后,要对图像进行包括图像色彩转换、图像大小变换和直方图均衡化等相关处理,方可把检测到的人脸显示在检测区中。

相关的函数包括:cvCvtColor(img,gray,CV_BGR2GRAY);该函数是对图像进行色彩转换。

cvResize(gray,small_img,CV_INTER_LINEAR);该函数是对图像的大小进行变换。

cvEqualizeHist(small_img,small_img);该函数的作用是对灰度图像直方图的均衡化。

6)对于视频图像的人脸检测来说,还需要从电脑上的摄像头读取视频,openCV提供好的实时视频采集,cvCapure*cvCaptureFromCAM(int 1);该函数的功能是对摄像头(个为1)打开进行定义。

3.2制作级联分类器
制作分类器[6]需要制作正样本文件和负样本文件。

负样本可以来自于任意的图片,这些图片不能包含目标特征。

负样本由背景描述文件来描述。

背景描述文件是一个文本文件,每一行包含了一个负样本图片的文件名(基于描述文件的相对路径),该文件创建方法如下:采用Dos命令生成样本描述文件。

4测试结果
在个人用的笔记本电脑上进行视频图像中的人脸检测和图片中的人脸检测的测试,得程序测试图如图6和图7所示. 结果表明,基于openCV的简单的人脸检测系统,可以快速的从视频或静态图像中检测到人脸,并在检测区将人脸用椭圆标记。

图6基于摄像头视频的单人脸检测结果
图7基于摄像头视频的多人脸检测结果
5结束语
本文中简要阐述了在Adaboost人脸检测算法的基础上,采用级联分类器的方法检测动态视频和静态图像中人脸,在检测区对人脸进行标记,并对结果进行了分析。

分析结果显示,采用计算机视觉类库openCV实现基于Adaboost算法的人脸检测,具有检测速度快,检测结果准确,实时性强等优点,且实现的方法简单实用。

文中所阐述的基于openCV的简单人脸检测系统可用于其他人脸识别与实时监控的软件系统开发。

本文由于时间有限,只用了简单人脸识别进行人脸检测,实用性上有限制也存在很多不足,希望在今后的学习研究中,能够结合更多的人脸特征,做出更精确的判断,为人脸识别的发展做出贡献。

最后,感谢汪老师本学期的对我们的精心指导!
参考文献:
[1]梁峰.连续视频流中人脸检测和识别的研究[D].成都:电子科技大学,2010
[2]尹俊超,刘直芳.基于OpenCV 的运动目标检测与跟踪[J].计算机工程与设
计.2011(08):224-226
[3]Gray Bradski.&Adrian Kaehler.Learning OpenCV[M],北京:人民邮电出版社,2009
[4]贾小军.基于开源计算机视觉库OpenCV 的图像处理[J].计算机应用与软件,2008(04):29-31
[5]秦小文,温志芳,乔维维.基于OpenCV 的图像处理[J].电子测试.2011(07): 152-155
[6]刘文达.基于OpenCV 人脸检测识别跟踪的研究[D],武汉:武汉理工大学,2009
[7] Ary Bradski,Adrian Kaebler.学习OpenCV[M].北京:清华大学出版社,2009.
[8]黄文杰,陈斌.一种快速图像处理的积分方法[J].计算机应用,2005,25(1):266-268.HUANG Wen-jie,CHEN Bin. A fast image process of inte-grationmethod[J].Computer Applications,2005,25(1):266-268.
[9]崔晓青.基于AdaBoost算法的人脸检测人系统的研究与实现[D].长春:吉林大学计算机科与技术学院,2008.
[10]郭磊,王秋光. Adaboost人脸检测算法研究及OpenCV实现[J].哈尔滨理工大学学报,2009,14(5):123-126.GUO Lei,WANG Qiu-guang. Research of face detection based on Adaboost algorithm and openCV implementation[J].Journal of Harbin University of cience and Technology,2009,14(5):123-126.
[11]陈胜勇,刘胜.基于OpenCV的计算机视觉技术实现[M].北京:科学出版社,2008.
[12]唐徙文,曾义.人脸检测级联分类器快速训练算法[J].计算机仿真,2007,24(12):324-327TANG Xi-wen,ZENG Yi. An improved algorithm for constru-cting cascade classifier based on Adaboost[J]. Computer Simu-lation,2007,24(12):324-327.
[13]陈志恒,姜明新.基于openCV的人脸检测系统的设计[D].成都,电子科技大学,2012
[14]王慧琴. 数字图像处理[M]. 北京:北京邮电大学出版社,2006
[15]Viola P., Jones M. J. Robust Real-Time Face Detection. International Journal of Computer Vision 57(2), 137-154, 2004.
[16]方玫.OpenCV 技术在数字图像处理中的应用[J].北京教育学院学报,2011(03):94-104。

相关文档
最新文档