2011-09-27 89 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