基于OpenCV的人脸检测系统设计
2018-07-12何瑶陈湘萍
何瑶,陈湘萍
(贵州大学电气工程学院,贵州 贵阳 550025)
0 引言
随着计算机与信息技术的不断发展,人脸检测与识别在各个领域均得到了广泛使用。人脸检测是人脸识别系统中的重要组成单元。人脸检测指的是应用一定的策略对给出的图片或者视频来进行检索,判断是否存在着人脸,如果存在则定位出每张人脸的位置、大小与姿态的过程[1-2]。根据现有的算法,目前的人脸检测方法可分为三类,分别是基于统计理论方法,基于几何特征方法以及基于肤色模型方法。其中,基于统计理论方法中的Adaboost[3-4]人脸检测算法是由剑桥大学的Paul Viola和Michael Jones提出,在人脸检测中应用比较广泛,但也存在着较高的误检率。OpenCV(Open Source Computer Vision Library)由Intel公司开发,是开源的视觉算法库,由C和C++函数组成[5-7]。本文借助OpenCV库,引入HSV色彩空间肤色分割算法,与Adaboost算法相结合,设计基于肤色分割与Adaboost算法相结合的人脸检测系统,并比较该系统与Adaboost算法设计的人脸检测系统对图片与实时视频人脸检测的检测率和误检率。
1 人脸检测算法
1.1 Adaboost算法
1.1.1 Adaboost算法原理
Adaboost算法是通过无数次循环迭代来寻求最优分类器的过程[8]。用弱分类器Haar特征中任一特征放在人脸样本上,求出人脸特征值,通过更多分类器的级联便得到人脸的量化特征,以此来区分人脸和非人脸。Haar功能由一些简单黑色白色水平垂直或旋转45°的矩形组成。目前的Haar特征总的来说广义地分为三类:边缘特征、线特征以及中心特征。Haar特征的本质其实就是一个差值,即人脸特征值[9-10]。这个差值为求得白色区域的像素灰度和与黑色区域的像素灰度和两者之差。利用积分图,可以迅速的计算出Haar特征值,积分图的运算如式(1)所示。
ii(x,y)为图像经运算之后所得积分图内每个像素点的像素值,i(x',y')为原图像在(x',y')处的像素值。一个完整的图像包括每个像素的左方及上方的区域总和。
1.1.2 Haar分类器训练原理
根据adaboost算法原理,我们可以得到一个弱分类器[11-12],弱分类器的数学结构如式(2)所示。
最开始的弱分类器为h(x,f,p,θ) , 其中子窗口图像确定x,f为Haar特征值,p为不等号的方向,θ为阈值。强分类器由无数弱分类器组成,其检测率与误检率为一对矛盾体。因此,我们会通过调整检测率与误检率的参数来面对不同的需求。级联分类器由多个强分类器进行叠加组成。它的前几层的强分类器较为简易,后几层则是相对而言比较复杂的强分类器。通过前几层简单强分类器可以迅速去除无关背景区域。而后几层能够更好的区分出人脸。通过一级一级的递进选择,直至判断出人脸。我们完全可以假定很高的检测率和相对而言比较高的误检率在经过级联分类器层层迭代后,其仍然具有很好的检测率和很低的误检率。检测速度与精度大大增强。每个窗口对特征值进行运算的数量为式(3)所示。
在式(3)中,pj为第 j层强分类器的检测率,ni为第i层强分类器的特征数,k为级联分类器的总层数。
1.2 肤色分割
肤色检测拥有算法简易且响应速率快等优势。基于肤色分割的人脸检测避免了由类似皮肤颜色区域或类似人脸特征所引起的误检,因而与Adaboost算法一起使用有着更高的性能和更低的误检率。
1.2.1 HSV色彩空间
色调(H),饱和度(S),亮度(V) 在HSV色彩空间中作为参数用以描述颜色[13]。其中,色调(H)指的是颜色外观,能够彼此区分不同颜色。在HSV色彩空间里,H由绕Z轴的转动角表示[14-15]。S表示颜色的纯洁度,它指彩色成分所占比例,S的取值范围为0.0到1.0之间。其中,0.0表示灰色,1.0表示完全饱和。亮度(V),是颜色的明暗程度,它其取值范围为0.0到1.0。其中,0.0表示黑色,1.0表示白色。在使用HSV色彩空间中进行肤色分割时,色调值在6~38区间内,饱和度值在0.23~0.28区间内,亮度值在0.55~0.67区间内,我们可以视为人类的皮肤[16]。RGB颜色空间转到HSV颜色空间的算法为:
1.2.2 肤色分割
将人的肤色在图片中分离的过程叫做肤色的分割[14-15]。具体的步骤有如下几步。第一步、获取彩色图像;第二步、将每个像素由RGB对应到HSV颜色空间;第三步、将HSV颜色空间的图片分解为三张单通道图片分别进行处理;第四步、对每张通道图片进行判定,如果其像素点在所给定的肤色阈值之内,则将该点置为白色,如果条件不满足,该像素设为黑色;第五步、将白色图像点与原图像进行合并,黑色图像点继续为黑色,如此便对图像进行肤色分割。
1.3 图像预处理
面对各种条件各异的外部环境变化,图像一般会呈现出噪声、清晰度低等各种缺陷。因此,为了减小缺陷对提取到的人脸特征的影响,在特征提取之前,先对对图像进行预处理操作。当我们处理彩色图像时,即需要对三个通道依次处理,这会带来巨大的时间开销,因此为了提高系统的处理速度,减少难度,我们需要把彩色图像进行灰度化处理。在对视频图像进行检测分析之前,我们应该尽可能减少噪声干扰,从而加快准获取图像的特征,并更好进行模式识别,也能够减少其计算量。我们选择使用Gauss滤波来减小图像噪声。Gauss滤波是通过Gauss函数来选择权值的线性滤波方法。其算法如公式6所示,σ表示方差,它决定Gauss滤波器宽度。
当检测目标所处环境下的光线发生变化时,直方图均衡化可以降低带来的影响。直方图均衡化主要原理为在原图像的灰度直方图中,将原图像中灰度级密集部分拉开,即将相对集中的灰度区间变为均匀分布在全部灰度范围[17]。
2 人脸检测系统设计及仿真实验
在本设计中,引入HSV色彩空间肤色分割算法,与Adaboost算法相结合,设计基于肤色分割与Adaboost算法相结合的人脸检测系统,该人脸检测系统具有图片或视频采集、肤色提取与分割、图像预处理、载入分类器、检测人脸、矩形框出被检测人脸的功能。之后比较该系统与Adaboost算法设计的人脸检测系统对图片与实时视频人脸检测的检测情况和误检情况。
2.1 人脸检测系统结构图
在此系统中,经过肤色分割后的图像,仅仅存在人脸和类肤色区域,接着运用Adaboost分类器,这样便能准确迅速标注人脸位置。因此,基于adaboost算法与肤色分割相结合的人脸检测系统不仅检测速度快、而且准确度高,还避免了类人脸特征导致的误检。
图1 基于adaboost算法与肤色分割相结合的人脸检测系统Fig.1 Face detection system based on adaboost algorithm and skin segmentation
2.2 人脸检测系统
2.2.1 分类器的训练过程
建立正负样本集:基于MIT人脸库,建立正负样本集及其说明的txt文件。
训练人脸检测分类器:首先生成训练集的VEC 文件,之后书写相应代码进行分类器训练。
2.2.2 检测程序的设计流程
1)读取待检测图像:此阶段是载入待检测图片或者载入摄像头并获取视频流的一帧。
2)肤色提取:把图片中每一个像素从RGB对应到HSV颜色空间,然后将HSV空间的图片分解成三张单通道图片依次进行处理,然后对每张通道图片进行判定,如果其像素点在所给定的肤色阈值之内,则将该点置为白色,如果条件不满足,该像素设为黑色。
3)肤色分割:将白色图像点与原图像进行合并,黑色图像点继续为黑色,如此便对图像进行肤色分割,如图2所示。
图2 对载入图像进行肤色分割Fig. 2 Skin segmentation for loading images
4)图像预处理:将载入的图片或者图像进行预处理,预处理步骤为先灰度化图片,然后执行平滑处理中高斯滤波操作,最后执行直方图均衡化。其中,灰度化是为了保证检测的效率和准确性,高斯滤波可以消除部分图像噪声,直方图均衡化则可以让人脸在图像中更好的凸现出来。
5)加载人脸检测分类器:将所训练的人脸检测分类器加载到程序中。
6)人脸特征提取:利用成功加载的分类器,快速计算出图像中haar特征,然后进行人脸的检测和定位。
7)识别人脸并输出:根据人脸特征提取后得出的结果,确定人脸的坐标和范围,使用矩形框标记出原图像中人脸的具体位置,并显示图像。
3 人脸检测结果分析
3.1 静态图片检测结果
将基于肤色分割与Adaboost算法相结合的人脸检测系统与使用Adaboost算法的人脸检测系统检测结果做对比,红色方框表示检测出的人脸范围。简单背景人脸检测是检验人脸检测系统最基本性能,实验表明在简单背景人脸条件下,两种系统都有着很好的性能。在复杂背景条件下,人脸检测结果如图3所示。
图3 复杂背景人脸检测结果Fig.3 Complex background face detection results
实验表明, 在复杂背景多人脸条件下, 肤色分割同adaboost算法相结合的系统有着较好的检测效果。将人脸检测类型划分为4种情况,将两种系统检测的结果做一个对比,对比结果如表1所示。
表1 两种系统检测结果对比Table 1 Comparison between the two algorithms
实验数据表明,在人脸检测中,2种人脸检测系统的检测率相当,但是肤色分割与adaboost算法相结合的检测系统的误检率为3%,优于adaboost算法(11%)的误检率。
3.2 动态视频检测结果
Adaboost算法的人脸检测系统结果和肤色分割与adaboost算法相结合的人脸检测系统结果如图4所示。基于adaboost算法与肤色分割相结合的人脸检测系统能够有效排除类人脸区域,且能够避免或减小产生误判概率,因此能得到较好的检测效果。
图4 动态视频检测结果Fig.4 Dynamic video test results
4 结论
本文基于OpenCV视觉库,在adaboost算法的基础上,依靠人类肤色在HSV色彩空间中的特性,使用基于HSV色彩空间的肤色分割同Adaboost算法相结合的算法,设计出了人脸检测系统。系统的构成部分包括图片或动态视频图像的采集、肤色提取与分割、图像的预处理(包括灰度化、高斯滤波、直方图均衡化等)、特征提取、分类识别、人脸的定位等。实验证明该算法能够减小系统的误检率。