OpenCVでhaartrainingを利用する際の注意事項
研究でハマったのでメモ書き程度に.画像処理に関する記事です.
Win32bitマシンでhaar-like特徴量を利用した物体検出,haartraining.exeを利用する時若干注意すべきことがあります.
そもそもhaar-like特徴量とは
Haar-like特徴とは、画像における特徴量として、照明条件の変動やノイズの影響を受けやすい各画素の明度値をそのまま用いるのではなく、近接する2 つの矩形領域の明度差を求めることで得られる特徴量である.
S高専h19d04戦記
回転不変ではないものの照明影響不変・拡大縮小不変であるので顔検出など形状が決まっているものに対して特徴検出が有効な特徴量となっています.
haar-like特徴量を利用した手っ取り早い検出器の作成
Gihyo.jpさんの記事がまとまって見やすいのでこちらを参考にしてください.
http://gihyo.jp/dev/feature/01/opencv/0004
しかしながら,32bitマシンで実行を行うとまれにこのような画面が出ることがあります.
OpenCV Error: Insufficient memory (Failed to allocate 1229797140 bytes) in unknown function, file ..\..\..\src\cxcore\cxalloc.cpp, line 52 This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information.
原因を調べていくと,以下のページに辿り着きました.
OpenCVはユーザ定義のメモリアロケータを指定できるように設計されていますが、ユーザ定義のメモリアロケータを呼び出す前にOpenCVで定義されているメモリサイズ上限のチェックして、それを超えている場合にエラーとしてはじいてしまいます。なぜなのかは不明なので危険な修正ですが、これをやめさせないと一度に1GB以上のメモリが確保できません。
haartrainingで2GB以上のメモリを使用する方法 - デー
再コンパイルの手順
ここではOpenCV2.1,Visual Studio 2008を利用した場合について説明します.VSは環境が違うとこの手順だとうまくいかないかもしれません(2005では不都合を確認済)
sourceforgeからzipファイルをダウンロードし,Cドライブ直下においてください.
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download
解凍すると,OpenCV-2.1.0というフォルダができますが,後々のためにOpenCV2.1にリネームします.
cxmisc.hの変更
OpenCV2.1/include/opencv/cxmisc.hの以下を変更
#define CV_MAX_ALLOC_SIZE (((size_t)1 << (sizeof(size_t)*8-2))) #define CV_MAX_ALLOC_SIZE ULONG_MAX
CMakeによるVisualStudio用ソリューションファイルの作成
CMakeを利用してVisual Studio用のソリューションファイルを生成します.
http://www.cmake.org/cmake/resources/software.html
where is the source codeにC:\OpenCV2.1,
where to build the binariesにC:\OpenCV2.1/buildを指定.
左下のConfigureを押すと対象コンパイル環境を聞いてきますので,Visual Studio 2008を選択.
画面が赤くなるかと思います.
ここでBUILD_NEW_PYTHON_SUPPORTのチェックを外しもう一度Configureを押すと赤い画面が消え,Configure Doneと出るはず.
最後に,Generateボタンを押せばソリューションファイルが生成されます.
Visual Studioを利用したコンパイル
C:\OpenCV2.1/build/OpenCV.slnを開きます.
ビルド->パッチビルドを選択し,ALL_BUILD(Debug/Release),INSTALL(Debug/Release)にチェックを入れてビルドしてください.
これで,build/binの下にメモリ対策が施されたopencv_haartraining.exeが生成されるはずです.
その他,参考になったサイトなど
- http://www.slideshare.net/takmin/opecv-object-detectiontakmin
- haartrainingまわりについてわかりやすく書いてあります
- http://note.sonots.com/SciSoftware/haartraining.html
- 英語ですが,少ないサンプル数からcreatesamplesを繰り返すことによって,より多数のサンプルに対するvecファイルを生成するツールなどが置いてあります.