| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |

オープンソースな画像解析ライブラリであるところのOpenCVには、顔認識の機能がある。これの使い方を簡潔にメモしておく。
ダウンロードはここから。複数のバージョンが提供されているが、ここではbeta5というのを選ぶ。また、Windows版とLinux版が提供されているが、ここから先は、Windows版を用いた場合のやり方を書いていく。
OpenCV_b5a.exeのダウンロードが完了したら、実行してマシンにインストールする。インストールでは、特に迷う箇所はないだろう。以後の説明は、デフォルトのパス(C:\Program Files\OpenCV)にインストールしたものとして書いていく。
インストールが終わったら、"C:\Program Files\OpenCV\bin"にパス(環境変数のPATH)が通っているかを確認する。通っていなければ通しておく。
OpenCVには、インストールが成功したかを確認するチェックプログラムが添付されている。 C:\Program Files\OpenCV\bin\cvtest.exe を実行して、プログラムの実行が滞りなく完了することを確かめること。途中でエラーメッセージが出たら何とかすること。何とかならなければ諦めるか、Windows版は投げ捨ててLinux版を使おう。
実際にプログラムを書く前に、顔認識機能を使うサンプルプログラムが添付されているので、まずはこれを使ってみると良い。 C:\Program Files\OpenCV\samples\c\facedetect.exe がそれである。プログラムの引数として、顔の定義ファイルと認識対象の画像を渡す必要がある。取り敢えずは以下のように実行してみよう。
C:\Program Files\OpenCV\samples\c>facedetect --cascade="..\..\data\haarcascades\haarcascade_frontalface_alt_tree.xml" lena.jpg
下のようなウィンドウがポップアップするはず。しなかったら何とかすること。何とかならなければ諦めるか、Windows版は投げ捨ててLinux版を使おう。
赤く囲まれた矩形が、認識された顔の領域である。かの有名なLena嬢のお顔が正しく認識されていることがわかる。上のコマンドの lena.jpg の部分を変更すれば、任意の画像で試すことができる。手元の画像で適当にやってみた感触では、まあ悪くないと思う。顔認識は盛んに研究されている分野であり、最新の研究成果と比較したときに、どれくらいの精度であるのかはわからないけど。
続いて、OpenCVの顔認識機能を、自分で書いたプログラムから呼び出して使ってみる。ここでは開発環境にVisual Studio .NET 2003を用いるが、C/C++をコンパイルできる環境であれば何でも構わない。
プログラムを書く前に、開発環境にパスを通す。「インクルードファイル」として
・C:\Program Files\OpenCV\cv\include
・C:\Program Files\OpenCV\cxcore\include
・C:\Program Files\OpenCV\cvaux\include
・C:\Program Files\OpenCV\otherlibs\highgui
を、「ライブラリファイル」として
・C:\Program Files\OpenCV\lib
を通すこと。
まず、1からプログラムを書くのではなく、サンプルプログラムをビルドしてみる。 facedetect.exe のソースコードが C:\Program Files\OpenCV\samples\c\facedetect.c として添付されているので、これを使う。ビルド時には、C:\Program Files\OpenCV\libにあるlibファイルを適当に(エラーが出なくなるまで)リンクするように。ビルドされたexeファイルを実行し、facedetect.exeと同じ動作をするか確かめよう。また、facedetect.cに一通り目を通し、「ふーん、こんな風にやれば良いのか」くらいの感覚を掴んでおくと良い。
ここまでで、OpenCVの顔認識機能を自分のプログラムから使う準備が整った。
続く。

