読者です 読者をやめる 読者になる 読者になる

OpenCV カスケードファイルの作成方法

OpenCVとは画像処理のライブラリです。
その機能の一つに物体検出という機能があります。
物体を検出する方法は「物体の特徴を抽出」⇒「抽出した特徴量を学習」⇒「学習データにより物体を検出」
この機械学習された学習データのことを、カスケード分類器といいます。

カスケード分類器のつくりかた

事前準備
・ポジティブ画像を1枚以上用意
・ネガティブ画像を複数枚用意(1000枚くらいあるとよい)

1. ポジティブ画像、ネガティブ画像各々のファイル名をリストにしたテキストファイルを作成

ファイル名をリスト化させるコマンド

dir /b >sample.txt
2. OpenCVのツールで解釈できる入力ファイル(バイナリファイル)を作成

opencv_createsamples というツールを利用

opencv_createsamples -img orbis.png -vec orbis.vec -num 8000 -bgcolor 255 -maxidev 40 -maxxangle 0.5 -maxyangle 0.5 -maxzangle 0.5

各パラメータの説明
・img ポジティブ画像
・vec 作成するバイナリファイル名
・num ポジティブ画像数

3.学習 opencv_traincascade

opencv_traincascade -data ./cascade/sample/ -vec sample.vec -bg negative.txt -numPos 4000 -numNeg 220 -precalcValBufSize 4096 -precalcIdxBufSize 1024 -featureType LBP -bt LB -mode ALL
4. 各パラメータの説明

・vec 作成したバイナリファイル名
・data カスケードファイルの保存先
・bg ネガティブ画像
・numPos ネガティブ画像数
・precalcValBufSize 特徴量のメモリサイズ
・precalcIdxBufSize 特徴量用のバッファメモリー(多いと計算速度が速くなる)
・featureType 特徴量の見つけ方
・bt boost分類器のタイプ

認識させるマーカーに応じて、パラメータの変更が必要かもしれません。
NG画像が多すぎると学習途中でエラーになってしまいます。
何度かやって実験する必要があるかと。