我正在寻找一个强大的人脸检测算法/库,最好是用 C 语言(C++ 也可以;如果需要,我可以移植其他语言)。我过去使用过OpenCV的实现,但我不认为它对旋转是不变的。不需要是实时的,但也不应该太慢(也许每张照片一两秒就可以了)。寻求高可靠性,而不是很多误报。有谁知道任何好的实现?
6 回答
在OpenCV Wiki上查看有关使用Haar-like features进行人脸检测的页面。
@floppydisk:同一个人发布了另一个项目,该项目实现了这些类似 Haar 的面部检测功能。
这个概念并不难理解,你甚至可以自己实现它。也许最困难的部分是构建增强分类器的级联(但 openCV 已经很容易实现所有这些!)
可以在人脸检测中使用的其他一些可以使仿射变换不变的方法包括:
您可以尝试查看此库:
http://vasc.ri.cmu.edu/NNFaceDetector/
它显示在旋转的测试用例之一中。正如你所看到的,它是作为一篇论文完成的,所以如果你愿意,你也可以阅读那篇论文。
在 Code Project 上,有人发布了面部识别项目的详细描述,以及该项目的一些 C++ 源代码和他使用的库的链接。他的算法侧重于使用颜色差异来查找皮肤斑块,然后测试 19x19 像素的图片是否与人脸匹配。我不熟悉面部识别的所有库,但阅读了他的一些代码,许多方法和函数的名称中都有 CV,所以他可能正在使用 OpenCV 库,但我不熟悉它,所以我我不能 100% 确定。但是,他确实提供了很多关于他的应用程序和源文件的解释,所以这可能是一个很好的起点。
马克 - 你说 OpenCV 可能不会旋转不变
什么会阻止您进行四次比较,每次比较后旋转 90°?
我唯一使用过的是 Visionics FaceIt。它运作得相当好,但最后我知道离自由非常、非常、非常远(无论是在啤酒中还是在演讲中)。
我没有使用 Haar 特征进行人脸检测,但据我所知,它在检测人脸方面可能比 eigenfaces/pca 更有效。
我遇到了关于面部旋转问题的问题。我的想法是也许你可以尝试形状匹配并尝试纠正对象。尝试将其定向为正常的头部纵横比。在我的 Eigenface 项目中,我从未走得那么远,但请告诉我它是如何工作的。这在matlab中应该很容易。:P