OpenCV3を使って1枚の正解画像から物体検出器を作成する(Mac)
前回のOpenCV3.0インストールに引き続き、
今回はOpen CV 3を使って物体検出器を作っていきます。
以下の記事を参考にさせていただきました。ありがとうございます。
www.pro-s.co.jp
使用しているのが古いバージョンのようで、OpenCV3と比べてパスなどが異なる箇所があったため備忘録としてメモしていきます。
1. 作業ディレクトリを作る
どこでもいいので作業ディレクトリを作ります。
Users/username/Desktop/traincascade/
さらにこの中に以下のディレクトリを作ります。
- pos(正解画像を保存するフォルダ)
- vec(正解画像ベクトルファイル用フォルダ)
- neg(不正解画像を保存するフォルダ)
- cascade
- cascade/trained_data (分類器用フォルダ)
2. 必要なファイルをディレクトリに入れる
- pos/ の中に正解データ画像を入れます。
pos/image.png
- neg/ の中に不正解画像を入れます。
neg/1.png neg/2.png neg/3png ...
3. opencv_createsamples コマンドでベクトルデータ作成
3000枚の画像を作ってみます。
$ ./opencv_createsamples -img ./pos/image.png -vec ./vec/image.vec -num 3000 -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5
4. 不正解画像一覧ファイルの作成
$ ls neg | xargs -I {} echo neg/{} > nglist.txt
5. 分類器ファイル作成
./opencv_traincascade -data ./cascade/trained_data/ -vec ./vec/image.vec -bg nglist.txt -numPos 2400 -numNeg 100
-numPosにはcreatesamplesで作成した枚数の8割の数を指定。
-numNegにはneg/ に入っている画像の枚数を指定。
以下のデータが分類器になります!
cascade/trained_data/cascade.xml
ちなみに公式ドキュメントはこちらです。
Cascade Classifier Training — OpenCV 3.0.0-dev documentation
より精度の高い分類器を求めて
次回はこちらのスライドを参考に、より精度の高い分類器を作っていきます。
ちなみにこちらを使えば精度が測れるとのこと。 OpenCV Computer Vision Library ()