概要
カスケード分類器を作ろうと思ったら、opencv_createsamples
とopencv_tratraincascade
がどこにも見当たらなかったので、経緯と注意点を説明する。
brewでインストール
Macの場合brewとpipでopencvがインストールできるが、brewでインストールした場合のみカスケード分類器を作るのに必要なモジュールもインストールされる。インストール時に私が引っかかったのがopencvのバージョンである。今現在(2019/03/28)のbrewでインストールされるデフォルトのバージョンが4.0.1である。結論から言うと、**バージョンが4.0.1のopencvにはカスケード分類器を作るのに必要なopencv_createsamples
とopencv_tratraincascade
が元から付属されていないのである。**よってopencv_createsamples -info posifile -vec cascade.vec -num 100
のようにコマンドを打ってもNot Foundだけが返ってくる。
解決方法
Homebrewのopencvのページに行くと、バージョンによって名前が異なりそれぞれ別にインストールできるので、それで対応するしかない。私はbrew install opencv@3
としてインストールを行なった結果、バージョン3.4.5のものをインストールでき上記の必要な2つのモジュールもインストールされた。(もちろん実行もできた)
※追記 opencv_createsamplesがうまくいかないときは
私の場合は-infoで指定する画像パスに問題があったためにエラーが起きた。(-215 Assertion errorとかなんとか。roiがおかしいというようなエラーが発生した)
以下のようなファイルを-infoで指定した。
./img/sample-img_001.jpg 1 0 0 50 50
./img/sample-img_002.jpg 2 40 0 100 80 100 200 50 50
./img/sample-img_003.jpg 1 20 30 40 50
...
上のように、パス名にアンダーバー( _ )やハイフン( - )を用いると読み込めずにエラーを吐いてしまう。
なるべく使わないようにファイル名やパス名を考えよう。
まとめ
カスケード分類器を作るならopencv ver4.0.1 以外 のものを使おう
おまけ
ポジ画像120枚、ネガ画像40枚では圧倒的データ不足に陥るので気をつけよう