2011-09-27 157 views
4

我一直认为谷歌可以回答这个问题,但我没有太多的运气。C++人脸检测/识别实现

没有人知道任何开源C++的比方法堇菜 - 琼斯(Haar特征的升压级联)以外的任何人脸检测算法的实现的?

而且,不存在任何地方费舍尔一个开源C++实现?

谢谢。

回答

14

这篇文章得到了一些关注,所以我想更新它。我撰写了OpenCV的面部识别库,其中包括本征面,Fisherface和局部二值模式直方图。所以OpenCV的2.4.2现在来的一切上手,看到非常详细的文档:

现在原来的答案。

我是文章链接凯文的文章的作者。请注意,您需要找到Fisherfaces的非对称矩阵S_ {W}^{ - 1} S_ {B}的特征值,我没有在我的博客中明确提及它。 OpenCV只有当前版本中的对称矩阵求解器;由于非对称矩阵的特征值和奇异值不等价,因此不能使用SVD。对于我的项目,我已经将JAMA解算器改编为C++来解决非对称矩阵的特征值问题,因此不需要使用外部库。 CMakeLists.txt已配置,因此也可以使用Eigen,因此您可以选择。

现在我终于找到了几分钟落实Fisherfaces method与OpenCV2 C++ API,推动了代码到我的github帐户:

main.cpp告诉您如何使用Fisherfaces class以及如何使用线性判别分析与以下示例相同的示例:http://www.bytefish.de/wiki/pca_lda_with_gnu_octave。它是作为一个CMake的项目,所以编译是打字一样容易:

[email protected]:~/some/dir$ mkdir build; cd build 
[email protected]:~/some/dir/build$ cmake .. 
[email protected]:~/some/dir/build$ make 
[email protected]:~/some/dir/build$ ./lda 

我不知道这是否是首选的#1的方式在答题后的代码,但我认为这是一个有点太长发布。

请注意两件事。 (1)我从CSV文件中读取图像(just like this one),您不必关心标签的顺序。 (2)我按列存储特征向量,而OpenCV中的PCA按行存储它们。这样做只是个人品味的问题,但我从来没有见过这样的解决方案,所以我决定按列存储它们。

+0

我很迟才回复此问题,但非常感谢。这非常有帮助。 – theotherphil

+0

没问题。你需要在脸部检测的任何代码?我有一些我可以分享的Python和C++代码。 – bytefish

+0

你有什么实现?我目前只使用OpenCV的Haar级联功能。如果你有使用另一种方法的代码,那么尝试它肯定会很好。 – theotherphil