tech::hexagram

personal note for technical issue.

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以上のメモリを使用する方法 - デー

というわけで,32bitマシンで実行する場合はOpenCVソースコードを変更し,再コンパイルする必要があるようです.

コンパイルの手順

ここでは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が生成されるはずです.

その他,参考になったサイトなど