我原以为谷歌可以回答这个问题,但我运气不佳。
有谁知道除 Viola-Jones(增强类 Haar 特征的级联)方法之外的任何人脸检测算法的任何开源 C++ 实现?
另外,是否存在任何地方的 Fisherfaces 的开源 C++ 实现?
谢谢。
最佳答案
这篇文章引起了一些关注,所以我想更新它。在撰写本文时,我已经向 OpenCV 贡献了我编写的人脸识别库,其中包括 Eigenfaces、Fisherfaces 和 Local Binary Patterns Histograms。所以 OpenCV 2.4.2 现在附带了所有开始使用的东西,请参阅非常详细的文档:
现在是原来的答案。
我是凯文帖子中链接的文章的作者。请注意,您需要为 Fisherfaces 找到非对称矩阵 S_{W}^{-1} S_{B} 的特征值,我没有在我的博客中明确提到它。 OpenCV 在其当前版本中只有一个对称矩阵求解器;由于特征值和奇异值对于非对称矩阵并不等效,因此您也不能使用 SVD。对于我的项目,我已将 JAMA 求解器调整为 C++ 以解决非对称矩阵的特征值问题,因此无需为此使用外部库。 CMakeLists.txt 已配置,因此也可以使用 Eigen,因此您可以选择。
现在我终于找到了一些时间来使用 OpenCV2 C++ API 实现 Fisherfaces method 并将代码推送到我的 github 帐户:
main.cpp 向您展示了如何使用 Fisherfaces class 以及如何使用与上相同的示例: http://www.bytefish.de/wiki/pca_lda_with_gnu_octave 使用线性判别分析。它是一个 CMake 项目,所以编译就像输入一样简单:
philipp@mango:~/some/dir$ mkdir build; cd build
philipp@mango:~/some/dir/build$ cmake ..
philipp@mango:~/some/dir/build$ make
philipp@mango:~/some/dir/build$ ./lda
我不知道这是否是在答案中发布代码的首选 Stackoverflow 方式,但我认为发布时间太长了。
请注意两点。 (1) 我从 CSV 文件 ( just like this one ) 中读取图像,您不必关心标签的顺序。 (2) 我按列存储特征向量,而 OpenCV 中的 PCA 按行存储它们。这样做只是个人品味的问题,但我从未见过任何其他求解器的情况,因此我决定按列存储它们。
关于computer-vision - C++ 人脸检测/识别实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7574623/