OpenCVで顔認識をするプログラム
Microsoft Visual C++ 2010 Expressの使い方に慣れるための練習として、OpenCVで顔認識をしてみました。
とりあえず、VC++ 2010 Expressのダウンロード先
http://www.microsoft.com/japan/msdn/vstudio/express/
OpenCVはこちらから。
http://opencv.jp/opencv2-x-tips/install-on-windowswindows32bit-64bit-visual-studio-opencv21
ソースからビルドするのは面倒なので、「インストーラ付き実行ファイル」を落としてインストールします。
VC++ 2010 Expressを起動し、ファイル-新規作成-プロジェクトを選び、Win32コンソールアプリケーション(もしくはWin32プロジェクト)を選び、適当な名前をつけます。
次のページに進み、空のプロジェクトにチェックを入れます。
cppファイルを追加するために、ソリューションエクスプローラのソースファイルを右クリックして、新しい項目を選びます。
C++ ファイル(.cpp)を選んで、適当な名前をつけます。
エディタが表示されたら、http://opencv.jp/sample/object_detection.html のソースをコピペします。
ただ、このままだと必要なファイルが無く、ソース上に赤線が引かれている状態なので、プロジェクトに必要な設定をします。ソリューションエクスプローラからプロジェクト名を右クリックして、プロパティを選択。
構成のプロパティ-全般の文字セットを、マルチバイト文字セットを使用するに変更。このオプションは、WindowsがUnicodeを使用するけど(TCHAR型)、OpenCVはconst char*を受け取るからその整合が取れなくて…的な問題を解消するためのものです。
次に、インクルードファイルのディレクトリを指定します。構成のプロパティ-C/C++の追加のインクルードディレクトリを選び、OpenCVのインストールされたディレクトリ下のinclude\opencvを指定します(*.hファイルがたくさんあるディレクトリ)
次に、追加のライブラリディレクトリを設定します。リンカー-全般の、追加のライブラリディレクトリにOpenCVインストール先下のlibディレクトリを指定します(*.libファイルがたくさんあるディレクトリ)
ただ、これだけだとどのファイルをリンクするかが分からないため、リンカー-入力の追加の依存ファイルに、ライブラリファイル名を書き込みます。cv210.lib、cvaux210.lib、cxcore210.lib、highgui.libあたりを書いておくといいでしょう(今回のプログラムで全部使うわけではありませんが…)
以上の設定をしたのち、F7キーを押してビルドしてみます。ちゃんと設定があっていれば、1 正常終了 というメッセージが出力されます。
出力されたファイルを見てみましょう。ちゃんとexeファイルが出来ています。
顔認識のためには、顔を識別することを目的に学習されたカスケードと呼ばれるファイルを利用します。OpenCVのインストール先下のdata\haarcascadesの下にxmlファイルがいくつかあります。今回はhaarcascade_frontalface_default.xmlというファイルを使用します。このファイルを、さきほどexeファイルが出力されたディレクトリにコピーします。
コマンドプロンプトでこんな感じで実行します。
とりあえず、小泉内閣の組閣時の写真で顔認識してみました。
どうでしょう。ちゃんと正面を見ていないor目を閉じている人に対しては認識されていませんが、まずまず認識されていますね。
なお、イラスト(アニメ顔)の顔認識とかもあります。次のサイトを参照してみてください。