ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

「3日で作る高速特定物体認識システム」をやってみる(その1:OpenCV)


 情報処理2008年9月号に、「3日で作る高速特定物体認識システム」というのが載っている(1082ページ)。3日でできるんでしょうか?ま、3日でできるかどうかはさておき、興味津々なので、やってみましょう。




■まず、これからの内容

 その記事では、以下の段階で話を進めている

(1)低速特定物体認識システムの構築
(2)近似最近傍探索を用いた高速化
(3)ユーザーインターフェースの構築

 まずは、(1)から。
 (1)は、さらに、こー言う手順になるみたい。

(1-1)OpenCVをインストールする
(1-2)SIFTのソースをとってきて、コンパイルする
(1-3)物体IDと特徴ベクトルのファイルを作成する

ということで、今回は、(1-1)OpenCVをインストールするをやります。




■OpenCVをインストール

OpenCVというのは、「インテルが開発・公開しているオープンソースのコンピュータビジョン向けライブラリ」(引用:Wikipedia)だそうです。
 こいつを、インストールします。

 インストールの仕方は、「OpenCV@Chihara-Lab」の
インストール
http://chihara.naist.jp/opencv/?%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

をそのままやります(以下斜体は上記サイトより引用、斜体でないところも、ほとんど受け売り)。

 そこに書いてあるhttp://sourceforge.net/project/showfiles.php?group_id=22870に行って、opencv-winをダウンロードしてきます。

 そこに書いてあるとおり、
・ダウンロードしてきたファイルを実行
・環境変数のPATHを修正(追加)して
・C:¥Program Files¥OpenCV¥samples¥c¥にある、facedetect.exeを実行

したら、ちゃんと、顔の絵が出ました。




■Visual Studioの設定
 で、Visual Studioを設定します(ウィリアムのいたずらは、Visual Studio 2003を使っています)。

●まず、インクルードファイルを追加します

 そこにあるように、ツール→オプションとやると、下のオプションダイアログがでるので、

そしたら、左側のツリーで「プロジェクト」→「VC++ディレクトリ」を選択、右上の「ディレクトリを表示するプロジェクト(S)」で、「インクルード」を選択して、したの4行を追加するわけですが、

C:¥Program Files¥OpenCV¥cv¥include
C:¥Program Files¥OpenCV¥cvaux¥include
C:¥Program Files¥OpenCV¥cxcore¥include
C:¥Program Files¥OpenCV¥otherlibs¥highgui

追加するには、一番下をクリックで選択されます。選択後、さらにクリックすると、入力できるようになります。


●つぎに、「ライブラリファイル」
 右上の「ディレクトリを表示するプロジェクト(S)」を、「ライブラリファイル」に切り替えて、

C:¥Program Files¥OpenCV¥lib

を追加します。下の図のかんじ





■プロジェクトの作成

 で、プロジェクトの作成をします。
 VisualStudioの「ファイル」→「新規作成」で、「プロジェクト」を選択し、ダイアログを出したら、「Visual C++プロジェクト」の「空のプロジェクト(.NET)」を選択して、空のプロジェクトを作ります。
 今回は、名前は、opencv1にしました。

 そしたら、「プロジェクト(P)」→「***のプロパティ(P)」(今回はopencv1のプロパティ)でプロパティのダイアログを出したら、左側のツリーで「構成プロパティ」→「リンカ」→「入力」を選択します。
 そしたら、「追加の依存ファイル」に以下の1行を追加

cv.lib cxcore.lib cvaux.lib highgui.lib

そうすると、こんな図になります。


 ここまでやったら、
C:¥Program Files¥OpenCV¥samples¥c¥facedetect.cのファイルを、ソースファイルとしてプロジェクトに追加します。ソリューションエクスプローラーで、「ソースファイル」を右ボタンクリックすると、ポップアップウインドウ画出てくるので「追加」→「既存項目の追加」を選択、C:¥Program Files¥OpenCV¥samples¥c¥facedetect.cを選択すると、ソースファイルに追加されます。




■プログラム固有の修正

 このプログラムは、引数に画像ファイルが必要で、カスケードファイルというのが必要になります。

 引数については、まずメニューバーの「プロジェクト(P)」→「***のプロパティ(P)」(今回はopencv1のプロパティ)でプロパティのダイアログを出したら、左側のツリーで「構成プロパティ」→「デバッグ」でコマンド引数に
"C:¥Program Files¥OpenCV¥samples¥c¥lena.jpg"
と入力します(¥は本当は半角なので、全角を半角に直して入力してください)
こんなかんじ。


 カスケードファイルは、ソースを直します。

 main関数で、以下のところ



cascade_name = 以下を、
"C:¥¥Program Files¥¥OpenCV¥¥data¥¥haarcascades¥¥haarcascade_frontalface_alt2.xml";
(¥は本当は半角なので、全角を半角に直して入力してください)
というふうに、haarcascade_frontalface_alt2.xmlのパスにかきなおします。




■VisualStudio2003のための修正
cvaux.hに関する修正はしないでも、コンパイルできました。
でも、実行すると、エラーになります。
そのエラーについては、
OpenCV/インストール
http://co-coa.sakura.ne.jp/index.php?OpenCV%2F%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

の下のほうに載っていました。

 その設定を行います。
 メニューバーの「プロジェクト(P)」→「***のプロパティ(P)」(今回はopencv1のプロパティ)でプロパティのダイアログを出したら、左側のツリーで「構成プロパティ」→「全般」で
「マネージ拡張」を「いいえ」にします。以下の図のようなかんじ。


ウィリアムのいたずらの場合、これで、インストールのときに確認したのと同じ、顔の周りを囲む図がでました。




なんか、このライブラリだけでもすげー・・・(@_@!)
いろいろできそう