C/C++中的强大人脸检测?

19

我正在寻找一个稳健的人脸检测算法/库,最好使用C语言(C ++也可以;如果必要,我可以转换其他语言)。我过去曾经使用过OpenCV的实现,但我认为它对旋转不变性不敏感。不需要实时处理,但速度也不应该太慢(每张照片可能需要一两秒钟)。希望能高可靠性,且虚警较少。有人知道有什么好的实现吗?


4
“你可以快速、便宜或准确地完成,选择其中两个。”这看起来就像是在要求不可能的事情。 - Tabitha
5
@Wergan:我并没有要求快速和廉价。准确的人脸检测可以在50毫秒内完成。我说最多可能需要2000毫秒。这不算要求过高。 - mpen
1
模式识别是一个非常困难的主题,特别是如果你从单一角度视图(如照片)工作。这将是一路上的试错:对于大头照来说还可以(相对容易),但对于全彩色人群照来说则几乎不可能。 - slashmais
这是为一个相册网站而设计的。我不需要处理整个人群,只需要挑选出照片中的主要对象即可。但我认为处理整个人群也并非不可能...我已经看到一些非常令人印象深刻的处理结果了。 - mpen
6个回答

9

请查看OpenCV Wiki上关于使用Haar-like特征进行人脸检测的页面。

@floppydisk:同一个人发布了另一个项目,用于实现这些用于人脸检测的Haar-like特征。

这个概念并不难理解,甚至可以自己实现。也许最困难的部分是构建级联增强分类器(但openCV已经全部准备好了!)

在人脸检测中可以使用其他一些方法,这些方法可以被制作成对仿射变换不变的形式,包括:


5

你可以尝试查看这个库:

http://vasc.ri.cmu.edu/NNFaceDetector/

在其中一个测试用例中,显示了旋转的面孔。正如您所看到的,它是作为论文完成的,如果您愿意,也可以阅读那篇论文。


嗯...只有大约80%的召回率,但误报率很低(高精度)。我不确定这是好是坏?哦好吧,如果我能编译它,这已经足够开始了。谢谢 :) - mpen
高精度对我来说更重要。如果必要的话,剩下的20%可以手动标记,但我认为我们现在应该能够获得超过95%的准确率。也许我错了。 - mpen
好的,这个在64位Ubuntu上好像无法编译。 - mpen

2

马克 - 你说OpenCV可能不具有旋转不变性

那么,是什么阻止你在每个比较后旋转90度进行四次比较呢?


没有任何东西可以阻止它。这是一个有效的回答 ;) - mpen

2
在Code Project上,有人发布了一个面部识别项目的详细说明以及该项目的一些C++源代码和他使用的库的链接。他的算法专注于使用颜色差异来找到皮肤贴片,然后测试19x19像素图片是否匹配人脸。我不熟悉所有的人脸识别库,但是通过阅读他的代码,许多的方法和函数名称中都带有CV,因此他可能使用的是OpenCV库,但我并不十分确定。不过,他提供了关于他的应用程序和源文件的大量解释,这可能是一个良好的起点。

1
他可能正在尝试构建自己的CV库。我以为他可能一直在剥离OpenCV的部分,但没有什么真正表明这一点。他吹嘘有98%的准确率,但那主要是在他自己的脸上进行训练和测试的,所以并不能说明太多问题。他没有提到任何关于旋转的内容...我希望他能给出更详细的评估。精度-召回曲线很棒。好吧,谢谢你。我也可以试试...说不定会非常好。 - mpen
1
我有更好的统计数据,可以证明那个声称拥有98%准确率的人在撒谎或者是过度训练。面部识别目前还远远达不到这个水平,即使是最好的系统也没有那么高的准确率。 - monksy

1

我没有使用Haar特征进行人脸检测,但据我记得,它可能比特征脸/主成分分析更有效地检测人脸。

我遇到了关于人脸旋转问题的问题。我的想法是,也许您可以尝试形状匹配并尝试纠正对象。尝试将其定位为正常头部长宽比。我在Eigenface项目中从未走得那么远,但请告诉我它的工作原理。这在matlab中应该很容易。:P


1
我唯一使用过的是Visionics FaceIt。它运行得相当不错,但据我所知,它非常非常远离免费(无论是啤酒还是言论自由)。

1
应该提到“免费”也很好。FaceIt似乎是面部识别软件... 我正在寻找一个开源算法。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接