当前位置:首页 > 吴根金基于android和OpenCV的人脸识别系统的开发 - 图文
基于android和OpenCV的人脸识别系统的开发
第2章 人脸检测模块相关理论研究
2.1 基于OpenCV的人脸检测
OpenCV中有自带的级联分类器,实现人脸的检测,本次使用的分类器是haarcascade_frontalface_alt.xml,这个分类器可以通过以下步骤得到:
(1)提前准备好非常多的图片,包括正负样本的图片、检测的目标和随机的背景。
(2)用可执行程序createsamples.exe创建样本。
(3)通过调用可执行程序haartraining来训练生成分类器。
人脸检测之前首先要实时读取摄像头的图片帧,然后加载级联分类器,如下图所示:
InputStream is = getResources().openRawResource(R.raw.haarcascade_frontalface_default);File cascadeDir = getDir(\mCascadeFile = new File(cascadeDir, \mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
每一帧图片要要进行灰度变化,变为灰度图mGray,每一帧图片都要使用这
个分类器函数detectMultiScale进行检测,如下所示:
mJavaDetector.detectMultiScale(mGray, faces, 1.1, 4, 2,
new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size());其中,在进行检测测试的时候,发现,设置detectMultiScale的参数,可以达到不同的效果。
2.2 人脸检测基本原理
人脸检测在人脸识别和其他模式识别的研究中扮演着至关重要的作用,如今的人脸检测的方法主要是基于人脸的几何特征或者人脸的肤色或者是人脸的统计理论[5],但是,人脸检测受到很多外界因素的影响,比如说光线强弱、人脸的表情、是否有遮挡物以及人所处的背景,因此研究的难度也是比较大。其实,人脸检测归根结底就是判断人脸和其他非人脸的物体之间的不同特征,可以根据人脸的肤色、眼睛鼻子嘴巴等五官进行判断。然后进行人脸的特征的匹对,如果有人脸则通过获取人脸的坐标,将人脸图片截取出来。人脸检测的正确率对后期人脸识别起着关键的作用,由于最初的AdaBoost算法还不够完善[5],因此,如果再
3
福州大学本科生毕业设计(论文)
加上人眼睛的检测,可以大大的提高人脸检测的正确率。人脸检测的流程图如图2-1所示:
图2-1 人脸检测流程图
2.3 基于Haar-like特征的人脸检测方法
2.3.1 人脸类的Haar特征
人脸类Haar特征是Viola在上世纪提出来的[9]。Haar特征是通过相邻区域的灰度特征来反映图像特征[9]。实质上就是一种矩形特征[9],就像图2-2中显示的一样。
当我们在进行人脸检测的时候,是通过将一个用于检测的子窗口。窗口在图片窗口当中不断地移动,每滑到一个位置就会计算出这个位置所对应的特征。然 后利用我们之前已经训练好的级联分类器进行筛选。如果在所有的强分类器筛选过程都没问题,说明这个区域就是人脸。这些特征可以抽象为带有条纹的矩形, 将任意一个矩形放到人脸区域。如果用X1表示白色部分的像素和,X2表示黑色部分的像素和,Y?X1?X2那么Y就是所谓的特征值。如果把矩形放到非人脸的区域,计算得到的Y和人脸Y是不一样的,用这个间接信息来取代一个直接的像素来反映情况这就是利用Haar-like特征来实现人脸的检测。
4
基于android和OpenCV的人脸识别系统的开发
图2-2 Haar特征
Haar特征是通过Y?X1?X2来计算的[10,11]。通过引入积分图像,可以加快运算,像素值是左上方的像素,如下公式所示。
(ii(x,y)?
x'??x;y'??y?value(x',y'))
?1?
很明显的可以看得到,要形成一个积分图像,要花很长时间,这对于能否很好的并行化是非常关键的[1,2]。
分类器采用组织级联的方式可以很大程度的减少没必要的计算。如图2-3所示,级联分类器由多个分类器组成,每个分类器都是比较弱的。一旦子窗口在任何阶段出问题,它将会被判断为没有脸,只有子窗口通过所以阶段才能够被认为是一个脸。
图2-3 积分值示意图
第一个阶段的分类器只包含最有效但又是最少特征,使原始的判断,和排除大多数没有脸的区域。潜在地区也将会被更高级别的有更多特征的分类器检测到,只有很少的潜在子窗口可以进入到最后阶段的分类器,大部分的分类器很快就会被排除。
因为人脸的位置和大小都不确定,照片在子窗口中需要不断的检测人脸。在检测过程中,子窗口会从左到右,从上到下地扫描图片。然后图片会重新规划下其尺寸,因此所有尺寸不同的图片将会被检测。在这部分,积分图像和级联分类器会被频繁的访问。
5
福州大学本科生毕业设计(论文)
2.3.2 AdaBoost分类器
AdaBoost分类器采用的方法能够进行实时的人脸检测[7],最原始的AdaBoost方法是基于统计学理论的[6]。AdaBoost算法的实现原理就是将很多个弱分类器串联成一个强分类器[8],根据每次训练的样本的正确性和前一次总体的分类正确性给每个样本赋予一个权重,然后再传递给下一个分类器训练,每次都选择最能代表人脸的特征,最终将每次训练得到的结果整合,得到最后的那个强分类器。把每次得到的强分类器串联在一起得到一个级联的分类器,程序中调用load函数加载这个级联分类器就可以实现对人脸的检查,大大的提高了检测的速率[6,8]。
2.4 本章小结
本章主要讲到了基于Haar-like特征的人脸检测。同时介绍了人脸检测的原理和本系统中的实现过程。
6
共分享92篇相关文档