人脸检测(detection)与人脸校准(alignment)

由于个人想做一下人脸角度识别,但能够找到的比较好的model是于仕祺大神的facedetection,奈何大神的版本只有Windows下的链接库,Ubuntu下使用不了,所以就基于人脸识别与人脸校准自己写一个角度识别的代码。其基本思想是通过人眼睛、鼻子、嘴巴的倾斜位置与人脸正中线角度进行比较,能够粗略计算出人脸的yaw与pitch角,并且基于Kinect2的深度信息,可以大概读取到人脸距离Kinect2的距离信息。
人脸检测(detection)在opencv中早就有直接能拿来用的haar分类器,基于Viola-Jones算法。这里介绍一种MSRA在14年的最新技术:Joint Cascade Face Detection and Alignment(ECCV14)。这篇文章直接在30ms的时间里把detection和alignment都给做了,PR曲线彪到很高,时效性高,内存占用却非常低,在一些库上虐了Face++和Google Picasa。
人脸校准(alignment)是给你一张脸,你给我找出我需要的特征点的位置,比如鼻子左侧,鼻孔下侧,瞳孔位置,上嘴唇下侧等等点的位置。
下面是Joint Cascade Face Detection and Alignment的结构图:
人脸检测(detection)与人脸校准(alignment)_第1张图片
作者建立了一个叫post classifier的分类器,方法如下:

1.样本准备:首先作者调用opencv的Viola-Jones分类器,将recal阀值设到99%,这样能够尽可能地检测出所有的脸,但是同时也会有非常多的不是脸的东东被检测出来。于是,检测出来的框框们被分成了两类:是脸和不是脸。这些图片被resize到96*96。

2.特征提取:接下来是特征提取,作者采用了三种方法:

第一种:把window划分成6*6个小windows,分别提取SIFT特征,然后连接着36个sift特征向量成为图像的特征。
第二种:先求出一个固定的脸的平均shape(27个特征点的位置,比如眼睛左边,嘴唇右边等等),然后以这27个特征点为中心提取sift特征,然后连接后作为特征。
第三种:用他们组去年的另一个成果Face Alignment at 3000 FPS via Regressing Local Binary Features (CVPR14) ,也就是图中的3000FPS方法,回归出每张脸的shape,然后再以每张脸自己的27个shape points为中心做sift,然后连接得到特征。

3.分类:将上述的三种特征分别扔到线性SVM中做分类,训练出一个能分辨一张图是不是脸的SVM模型。

参考博客:
http://www.cnblogs.com/sciencefans/p/4394861.html

你可能感兴趣的:(opencv)