NikaLog

プログラムと音楽と、時々デザイン。

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目を閉じている人に対しては認識されていませんが、まずまず認識されていますね。



なお、イラスト(アニメ顔)の顔認識とかもあります。次のサイトを参照してみてください。