概要
OpenCVで画像を検出させるためのカスケードファイルを自分で作ろうと思いOpenCVに同梱されているopencv_traincascade.exeを使って検出器を作ろうとしたときにハマったことについてメモ。
環境
Windows OpenCV
OpenCV ver 2.4.13
今回のハマり部分
Windows のコマンドプロンプトから、opencv\build\x64\vc12\bin\に移動してopencv_traincascade.exeを実行する。下記のようなコマンドを実行した。
opencv_traincascade.exe -data ./cas/test -vec ./vec/test.vec -bg ./neg/nglist.txt -numPos 50 -numNeg 20
すると以下のようなエラーメッセージが出た。
cascadeDirName: cas/test
vecFileName: vec/test.vec
bgFileName: neg/nglist.txt
numPos: 50
numNeg: 20
numStages: 20
precalcValBufSize[Mb] : 1024
precalcIdxBufSize[Mb] : 1024
stageType: BOOST
featureType: HAAR
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.995
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
===== TRAINING 0-stage =====
<BEGIN
POS count : consumed 50 : 50
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.
エラーメッセージ
Train dataset for temp stage can not filled. Branch training terminated.
Cascade Classifier can't be trained. check the used training parameters
ググって色々と調べてみたが私の場合はあまり参考にならなかった。
いちおう参考までに調べたエラーの結果は以下の通り。
-
改行コードが違う
http://villager5.blog.163.com/blog/static/8273636201462452037527/ -
WindowSizeの指定が違う
-w 24 -h 24にしないとダメっぽい?
などだったが、私の場合はどちらも当てはまらなかった。
解決
結局、調べてわからなかったので、初心に返ってインストールのところから読み直してなんとなくわかった。
OpenCVをインストールする際に、C:\ 以下のフォルダーを選んでおけばよかっただけだった。
>私の場合、デスクトップで展開してました。
※インストールする際、管理者権限で実行しないと、C:\ 以下に「opencv」のフォルダーが見当たらなくなるので要注意。
追記
これで難なくopencv_traincascade.exeを起動させ無事に先ほどのエラーもなく実行することはできたが、新たなエラーメッセージが出た。
===== TRAINING 0-stage =====
<BEGIN
POS count : consumed 50 : 50
NEG count : acceptanceRatio 20 : 1
Precalculation time: 3
+----+---------+---------+
| N | HR | FA |
+----+---------+---------+
| 1| 1| 1|
+----+---------+---------+
| 2| 1| 1|
+----+---------+---------+
| 3| 1| 1|
+----+---------+---------+
| 4| 1| 1|
+----+---------+---------+
| 5| 1| 1|
+----+---------+---------+
| 6| 0.9955| 0.391|
+----+---------+---------+
END>
Parameters can not be written, because file cas/test/params.xml can not be opened.
エラーメッセージ
Parameters can not be written, because file cas/test/params.xml can not be opened.
このメッセージは、「cas/test/フォルダーに書き込む権限がありません」という意味なので、
①casフォルダーを右クリック
②プロパティからセキュリティーを選択
③「追加」からeveryoneを追加して権限を付与
以上でエラーメッセージが出ることなく進めることができた。
検出器を作成するにあたり参考にさせていただいた記事
http://www.pro-s.co.jp/engineerblog/opencv/post_6202.html
https://github.com/opencv/opencv/blob/master/apps/traincascade/cascadeclassifier.cpp
http://qiita.com/shu223/items/ffd2202eaf92d342f83d