opencvで顔認識でなくて独自の画像認識する方法
opencv(日本語ドキュメント)と、perlから利用するためのモジュールImage::ObjectDetectを使って独自の画像を認識させる方法のメモ。
まず、Ubuntuでのインストール
opencvはシステム→システム管理→Synapticで,編集→検索から"opencv”と入力する。libcv-dev、libcv1などが表示されるので、ダブルクリックで選択して、適用ボタンを押すと、関連するパッケージ一式が/usr/share/opencv以下あたりにインストールされます。
次にperlからopencvを使うためのImage::ObjectDetectは、
sudo cpan Image::ObjectDetect Imager
opencvがインストールされていないと、エラーが出るので、順番はopencv→Image::ObjectDetectの順で。
顔認識
OpenCVを使って画像の物体認識をするPerlモジュール作った
http://d.hatena.ne.jp/spiritloose/20070308/1173314595
の$cascadeのところに指定してあるのが、opencvにプリインされている顔認識用の学習データなので、これを差し替えるべく以下では独自のデータを作成します。
独自画像認識のトレーニング
適当なディレクトリにポジティブ画像(検出すべき物のサンプル./img)と、ネガティブ画像(検出すべき物が写っていない画像./bg)を用意します。学習用のデータを作るには本当は大量のサンプルが必要らしいが、今回はとりあえずの動作確認で、それぞれ2個づつで。詳しいファイルの用意の仕方は以下参照。
OpenCVで物体検出 - createsamples.exe
http://ugd555.blog1.fc2.com/blog-entry-314.html
Haar状特徴に基づくブースト分類器のカスケードを利用する高速物体検知
http://lab.cntl.kyutech.ac.jp/~kobalab/nishida/opencv/haartraining_jp.htm
最初はポジティブ画像をもとにサンプルを作るコマンド
opencv-createsamples -info info.dat -vec a.vec -w 50 -h 50 -num 2 -show
-showオプションをつけると、info.datで指定した座標をもとに切り出した画像をプレビューすることができます。
出力として、a.vecの中にポジティブサンプル学習データが保存されます。
次に、ネガティブ画像を含めた学習データを元に、学習データを作成するコマンドは、
opencv-haartraining -data output -vec a.vec -bg bg.dat -w 50 -h 50 -npos 2 -nneg 4 -mem 500 -maxfalsealarm 0.01 -nstages 3
ここで、bg/の下には4つのネガティブ画像ファイルがあるとします。
出力として、output.xmlが出力されます。