我正在开发一款用于人脸认证的 C++ 应用程序。首先,我需要检测人脸并对图像进行预处理。
- 为了进行人脸检测,我使用了 HaarCascadeClassifier 工具。问题是这个工具或算法会给出一个稍微大一点的矩形来框选包括头发和一些背景在内的面部区域。有没有解决方案可以更改这个矩形的尺寸?我使用了 "frontalfacecascaadclassifier.xml"。
- 对于人脸预处理,我想要做到像这个技术所示的人脸对齐。我该如何实现?
我正在开发一款用于人脸认证的 C++ 应用程序。首先,我需要检测人脸并对图像进行预处理。
Gary B. Huang, Vidit Jain和Erik Learned-Miller。《复杂图像的无监督联合对齐》。计算机视觉国际会议(ICCV),2007年。(项目主页), (PDF在线可用), (源代码)。
X. Zhu, D. Ramanan。《野外环境中的人脸检测、姿态估计和关键点定位》。计算机视觉与模式识别(CVPR),罗德岛普罗维登斯,2012年6月。(项目主页), (PDF在线可用), (源代码)。
您可以使用另一个Haar分类器来查找每只眼睛(眼睛很容易找到),然后假设人有两只眼睛,我们定义“水平”脸为眼睛水平。
简单地测量两只眼睛之间的角度,并将图像旋转该角度。
angle = atan ( eye1.Y - eye2.Y ) / (eye1.X - eye2.X )
people.train
数据对我的一些样本图像进行训练,效果不如我所希望的那样好。它旋转了一些我的控制图像,并且没有像我想要的那样旋转我的测试图像。您能否分享一下您的测试集样本以及它给出的结果,这将使我更有信心做出这个建议? - Seanny123对于人脸认证,您可以使用 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实现的。