4

Google ならこの質問に答えられると思っていたのですが、うまくいきませんでした。

Viola-Jones (Haar のような機能のブーストされたカスケード) メソッド以外の顔検出アルゴリズムのオープン ソース C++ 実装を知っている人はいますか?

また、Fisherfaces のオープン ソース C++ 実装はどこかに存在しますか?

ありがとう。

4

1 に答える 1

14

この投稿は注目を集めているので、更新したいと思います。私はOpenCVに書いた顔認識ライブラリを提供しました。これには、これを書いている時点での固有顔、フィッシャーフェイス、ローカルバイナリパターンのヒストグラムが含まれています。そのため、OpenCV 2.4.2には、開始するためのすべてが付属しています。非常に詳細なドキュメントを参照してください。

今、元の答え。

私はケビンの投稿にリンクされている記事の著者です。フィッシャーフェイスの非対称行列S_{W}^ {-1}S_{B}の固有値を見つける必要があることに注意してください。ブログでは明示的に言及していません。OpenCVには、現在のバージョンでは対称行列のソルバーしかありません。固有値と特異値は非対称行列と同等ではないため、SVDも使用できません。私のプロジェクトでは、非対称行列の固有値問題を解くためにJAMAソルバーをC ++に適合させたので、外部ライブラリを使用する必要はありません。CMakeLists.txtが構成されているため、Eigen使用できるため、選択できます。

これで、OpenCV2 C ++ APIを使用してFisherfacesメソッドを実装し、コードを次のgithubアカウントにプッシュするための数分がついに見つかりました。

main.cppは、Fisherfacesクラスの使用方法と、線形判別分析の使用方法を、 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が推奨する方法かどうかはわかりませんが、投稿するには少し長すぎると思います。

2つのことに注意してください。(1)CSVファイル(これと同じように)から画像を読み取ります。ラベルの順序を気にする必要はありません。(2)固有ベクトルを列ごとに保存しますが、OpenCVのPCAはそれらを行ごとに保存します。個人的な好みの問題ですが、他のソルバーでは見たことがないので、列ごとに保存することにしました。

于 2011-10-23T04:31:09.767 に答える