我正在开发一个用于面部认证的 C++ 应用程序。首先,我必须检测人脸并对图像进行预处理。
- 对于人脸检测,我使用了 HaarCascadeClassifier。问题是这个工具或这个算法给了我一个面部区域,该区域由一个有点大的矩形检测到,该矩形覆盖了头发和一些背景。有没有办法改变这个矩形的尺寸?我使用了“frontalfacecascaadclassifier.xml”。
- 对于面部预处理,我想完全像这种技术一样进行面部对齐。我将如何实现这一目标?
我正在开发一个用于面部认证的 C++ 应用程序。首先,我必须检测人脸并对图像进行预处理。
在给定图像中找到眼睛的准确位置绝非易事。用于在 OpenCV 中寻找眼睛的 Haar 级联会产生太多的误报而无用,而且这种方法对图像旋转不具有鲁棒性(虽然它可能会补偿轻微的旋转,但我不知道训练图像)。如果我是你,我会在http://scholar.google.com上进行广度优先搜索,以查找该研究领域的相关论文。
您需要一个强大的头部姿势估计来对齐面部图像。我自己做了一些研究,我认为在这里共享算法和代码很有用。我见过的最有趣的方法是:
Gary B. Huang、Vidit Jain和Erik Learned-Miller。复杂图像的无监督联合对齐。计算机视觉国际会议 (ICCV), 2007. (项目页面) , (PDF Online available) , (Source code)
X.朱,D.拉马南。野生计算机视觉和模式识别 (CVPR)中的人脸检测、姿势估计和地标定位,罗德岛普罗维登斯,2012 年 6 月。 (项目页面),(PDF 在线可用),(源代码)
然后你不能使用另一个 Haar 分类器来找到每只眼睛(眼睛很容易找到)然后假设这个人有两只眼睛,我们定义一个“水平”的脸来表示眼睛是水平的。
只需测量两只眼睛之间的角度并将图像旋转该角度即可。
angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X )
我在 Wild 项目页面的 Labeled Faces 中尝试了以下面部对齐代码。它工作得非常好,不需要检测面部特征点。C++ 代码可从以下网址下载:http: //vis-www.cs.umass.edu/faceAlignment/
如果您仍然希望找到面部关键点,我发现 Viola-Jones 检测器不是很健壮和准确。我个人推荐使用 Flandmark 人脸关键点检测器:http ://cmp.felk.cvut.cz/~uricamic/flandmark/ ,它更加健壮和准确。C 代码可以从上面的站点下载。
最先进的面部对齐方法必须是这样的:
有监督的下降方法及其在人脸对齐中的应用 X. Xiong 和 F. De la Torre 在 CVPR 2013
它非常快速和有效。您可以查看他们的项目网站IntraFace。
他们提供了一个易于使用的软件。但是,核心部分代码,即监督下降法(SDM)并没有发布,它只是简单的线性回归,可以很容易地实现。
这里有一个演示它可以处理倾斜的脸(为了隐私问题,添加模糊并注意左上角的轴): https ://drive.google.com/file/d/0BztytuqPViMoTG9QaEpZWi1NMGc/edit ?usp=分享
检测未对齐的人脸会使人脸识别变得困难。有时您想修复对齐,有时排除未正确对齐的那些就足够了(例如,如果您正在检测视频流中的人脸)。我采用了后一种方法并训练了一个特殊的 Haar Cascade,以仅检测正确对齐、光线充足的人脸。详细信息:http ://rwoodley.org/?p=417 。
如果您使用我的级联,请告诉我它是如何为您工作的。我很好奇其他人会得到什么结果。它满足了我的需求。
我在这里使用 OpenCV 和 DLib 实现了它:https ://github.com/ManuBN786/Face-Alignment-using-Dlib-OpenCV
任何倾斜的面都可以使用我的代码对齐。
在搜索了一整天的算法来实现这一点之后,我发现了 Hemlata 等人的“通过查找面部特征和倾斜面的倾斜角度进行人脸检测”。从 Google 切换到 DuckDuckGo 后。它支持以大于 45 度的角度倾斜的面。
至于如何在代码中实现,这是我目前正在研究的另一个问题,但至少这是一个起点。
对于人脸认证,可以使用dlib或者face_recognition来做,比现在的 opencv 非常方便和准确。
至于 dlib,人脸对齐可以在这里找到(C++ 代码)http://dlib.net/face_alignment.py.html
或在这里(python代码)https://www.pyimagesearch.com/2017/05/22/face-alignment-with-opencv-and-python/。
算法论文名为Face Alignment at 3000 FPS via Regressing Local Binary Features由 dlib 实现。