基于计算机视觉技术的人脸检测系统设计王斌,郭攀,张坤,黄乐(长安大学信息工程学院,陕西西安710064)摘要:通过对基于Haar-like 特征的AdaBoost 人脸检测算法研究,利用由该算法训练的级联分类器和计算机视觉类库OpenCV 进行人脸检测系统设计,实现了基于静态图像、摄像头视频和avi 视频的人脸检测与标记,以及标记后的人脸区域图像实时显示和存盘。
此外,在VC++6.0环境下实现了对人脸检测系统软件界面的开发。
实验结果表明,该检测系统开发周期短,检测速度快,实时性强,检测率高,可作为人脸识别和人脸跟踪系统的开发基础。
关键词:计算机视觉;人脸检测;AdaBoost 算法;Haar-like 特征;OpenCV 中图分类号:TP391.4文献标识码:A文章编号:1674-6236(2011)16-0038-04The design of face detection system based on computer vision technologyWANG Bin ,GUO Pan ,ZHANG Kun ,HUANG Le(College of Information Engineering ,Chang ’an University ,Xi ’an 710064,China )Abstract:Through the research for AdaBoost face detection algorithm based on Haar -like features ,make use of the cascade classifier trained by this algorithm and computer vision library OpenCV to design a face detection system ,realize face detection and mark based on static image ,camera video and avi video ,finish displaying and saving the face region images marked by rectangles real -timely.Besides ,achieve the development of software interface by VC++6.0.The experiment result shows that the face detection system has features of short develop cycle ,rapid detection ,real -time and high detection rate ,which can be used for the bases of face recognition system and face tracking system.Key words:computer vision ;face detection ;AdaBoost algorithm ;Haar -like feature ;OpenCV收稿日期:2011-06-19稿件编号:201106084作者简介:王斌(1985—),男,河南南阳人,硕士研究生。
研究方向:信号与信息处理及智能控制。
随着计算机技术和数字信号处理技术的快速发展,计算机视觉技术逐渐应运而生,并得到了广泛的应用。
OpenCV [1](Open Source Computer Vision Library )是由Intel 提供的由一系列C 函数和少量C++类构成的计算机视觉开源软件包,它拥有数百个可实现图像处理和计算机视觉方面的中、高层API ,可以十分方便地搭建基于计算机视觉技术的静态图像和视频流处理软件平台,可作为二次开发的理想工具。
由于基于Haar-like 特征的AdaBoost 人脸检测算法具有检测速度快、实时性强、鲁棒性好等优点,本文采用基于Haar-like 特征的AdaBoost 人脸检测算法和OpenCV 相结合的方法在VC++6.0软件开发平台上分别对基于静态图像、摄像头视频和avi 视频的人脸检测系统进行设计,实现了从静态图像中检测出人脸并标记出人脸位置、从摄像头视频中实时检测和标记出人脸的位置和从avi 视频中提取检测出有人脸的帧并实时标记人脸,同时还实现了对标记后的人脸区域图像进行实时显示和存盘。
1AdaBoost 人脸检测算法人脸检测的目的就是把静态图像或视频帧中的人脸区域和非人脸区域区分开。
Viola 等人提出的人脸检测方法是一种基于积分图、级联分类器和AdaBoost 算法的方法,该方法可分为以下3个步骤实现[2]。
1)使用Haar-like 特征表示人脸,并采用一种新的图像表示方式—“积分图”快速计算其特征值。
2)利用AdaBoost 机器学习算法挑选出一些最能代表人脸的矩形特征(弱分类器)并按照加权投票的方式将弱分类器构造成一个强分类器。
3)将训练得到的若干个强分类器串联起来构造成一个级联结构的分类器,从而提高分类器的检测速度。
1.1Haar-like 特征用一些简单的矩形特征来表示人脸特征,因其类似于Viola 等人提出的Haar-like 小波而得名[3]。
常用的Haar-like特征有边缘特征、线性特征和中心特征,如图1所示。
其中特征值是指图像上两个或者多个形状大小相同的矩形内部所有像素灰度值之和的差值,在系统中统一采用白电子设计工程Electronic Design Engineering第19卷Vol.19第16期No.162011年8月Aug.2011图1Haar-like 特征Fig.1Haar -like features-38-色矩形区域所有像素灰度值之和减去黑色矩形区域所有像素灰度值之和[3]。
例如,图1(b )的特征值是靠两边的矩形像素总和与中间矩形像素和的差值。
也可根据实际情况扩展出多种新的Haar-like 特征模板。
1.2积分图为了提高样本训练和人脸检测的速度,Viola 等人提出了积分图的表示方法,这种方法可使矩形特征值得到快速计算。
积分图的计算方法如公式(1)所示[4]:ii (x ,y )=x ′≤x Σy ′≤yΣI (x ′,y ′)(1)其中I (x ′,y ′)为图像在点(x ′,y ′)处的像素值,ii (x ,y )是计算后的积分图像。
若采用递推公式[4](2)和(3),积分图只需遍历一次原图像所有点即可计算出来,其中s (x ,y )为点(x ,y )所在位置的列积分值,定义s (x ,-1)=0,ii (-1,y )=0。
s (x ,y )=s (x ,y -1)+i (x ,y )(2)ii (x ,y )=ii (x -1,y )+s (x ,y )(3)1.3AdaBoost 算法基本原理AdaBoost 算法[5]是一种迭代算法,主要用于特征选择和训练分类器,其核心思想是针对不同的训练集训练同一个分类器(弱分类器),然后把这些在不同训练集上得到的弱分类器通过一定的方法集合起来,构成一个最终的强分类器。
在该算法中不同的训练集是通过调整每个样本对应的权重来实现的。
最开始的时候,每个样本的权重是相同的,在此样本分布下训练出一个弱分类器h 1(x )。
对于h 1(x )分类错误的样本则加大其对应的权重,而对于h 1(x )分类正确的样本则减小其对应的权重,从而把分类错误的样本突出出来,进而组合成一个新的样本分布。
同时,根据分类错误的情况赋予h 1(x )一个权重,表示该弱分类器的重要程度,分类错误的越少权重越大。
在新的样本分布下,对其进行再次训练,得到弱分类器h 2(x )及其权重。
以此类推,经过T 次循环训练得到T 个弱分类器和T 个对应的权重,然后把这T 个弱分类器按照一定的权重叠加起来,得到最终的强分类器。
1.4级联分类器级联分类器是由多层强分类器级联而成的,也称之为级联检测器或瀑布型检测器。
其每一层都是由AdaBoost 算法训练得到的强分类器,第1层分类得到的正确结果触发第2层分类器的分类,第2层分类得到的正确结果再触发第3层分类器的分类,以此类推。
这样疑似人脸窗口依次通过各层分类器,就确认为人脸。
反之,如果被检测的窗口在某一层被判断为非人脸,就立即停止对该窗口的检测,开始进行下一个窗口的检测[5]。
这种级联结构的分类器在设计时采用逐级复杂的原则来实现的,最初的几层强分类器比较简单,通常一层由一到几个弱分类器构成,这样可以快速排除掉那些明显不是人脸的子窗口,使后续检测目标越来越少,从而大大提高了检测速度。
此外,为了实现搜索不同大小的目标区域,分类器被设计为可进行尺寸改变,这样可以避免直接对图像进行缩放变换,减小了计算工作量,也提高了检测速度。
2人脸检测系统设计与实现2.1级联分类器的制作和选取级联分类器的制作可采用OpenCV 自带的Haartraining程序训练实现,首先准备大量的正样本(人脸样本)和负样本(非人脸样本),然后利用OpenCV 安装目录中的bin 子目录下的createsamples.exe 和haartraining.exe 分别创建Sample 和训练Sample ,直到收敛为止,最后利用bin 子目录下的performance.exe 进行样本测试的训练,最终生成级联分类器XML 文件[6]。
为了快速开发出一套人脸检测系统,本文选取OpenCV 自带的基于Haar -like 特征的级联分类器haarcascade_frontalface_alt_tree.xml 和haarcascade_profileface.xml 进行实验。
2.2软件系统界面设计采用VC++6.0搭建前台人机界面(如图2所示),该界面主要分为3个部分,分别是检测显示区、定位显示区和菜单区。
检测显示区主要实现基于静态图像、摄像头视频和avi 视频的人脸检测结果显示,定位显示区主要实现对标记后的人脸区域图像进行实时显示,菜单区主要实现基于静态图像、摄像头视频和avi 视频的人脸检测与标记操作以及标记后的人脸区域图像的显示和存盘操作。
2.3人脸检测软件实现基于静态图像的人脸检测流程如图3所示,大致可分为4个过程:1)加载训练好的级联分类器;2)将其转化为内部格式,以便被计算机识别处理;3)加载待检测的静态图像;4)检测出图像中的人脸区域并标记出人脸位置。
基于摄像头视频的人脸检测流程如图4所示,主要过程:1)检测并启动摄像头,如未安装摄像头将会发出警告并结束检测,因视频采集设备种类多和视频处理的实时性要求,本文采用了实时视频处理技术DirectX ;2)加载已训练好的级联分类器并将其转化为内部格式;3)判断检测标志位,若为真,首先捕获当前一帧并创建该帧的图像,然后载入当前一帧图像,并对图像中的人脸区域进行检测和标记,最后判断保存图2人脸检测系统界面Fig.2The interface of face detection system图3基于静态图像的人脸检测流程图Fig.3Flow chart of face detection based on static image《电子设计工程》2011年第16期标志位,此时若为真则保存标记的人脸区域图像并进入下一帧的检测,否则直接进入下一帧的检测;若检测标志位为假则结束检测。