今回はOpenCVでカスケード分類器を自作していきます。カスケード分類器を作るとそれを利用することによって画像や動画の物体を認識することができるようになります。
使用例1)OpenCVとC++とVisualStudioで顔認識してみる
使用例2)OpenCVとWebカメラでリアルタイム顔認識をする
これを応用すれば色々なところで役に立ちそうなので今回試してみました。
大まかな流れは目次の通りとなります。
必要なものを用意する
カスケード分類器を作成するために以下のフォルダとファイルが必要となります。フォルダは以下の名前の通りに作成し、ファイルはOpenCVの中に格納されているものをコピーしてきます。最新のOpenCVには以下のファイルが入っていなかったりするようなので、そのときは「opencv-2.4.11」をインストールしてその中からコピーします。
正解画像(ポジティブ画像)を格納する
今回認識したいものを正解画像として「pos」フォルダに格納します。そのとき周囲の無駄な範囲は含めないように編集しておきます。
不正解画像(ネガティブ画像)を格納する
不正解画像も用意しておきます。不正解画像は何でもいいということなので「neg」フォルダにいくつか格納しておきます。
ベクトル画像を生成する
カスケードXMLを生成するにあたり、正解画像のベクトルデータを作っておく必要があります。カレントディレクトリを「CascadeXML_Creation」に移動しておきます。以下のコマンドを入力してベクトルデータを生成します。
以下のコマンドを実行すると正解画像から作られたサンプル画像が表示されますので「☓」で閉じます。
1 |
opencv_createsamples.exe -img ./pos/Grey.jpg -vec ./vec/Grey.vec -num 50 -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5 -show |
コマンドが正常終了すると「vec」フォルダにベクトルデータが生成されていることが分かります。
不正解画像ファイルリストを作る
また、カスケードXMLを作成するにあたり、不正解画像ファイルのリストも作成しておく必要があります。「neg」フォルダにカレントディレクトリを移します。以下のコマンドを実行して不正解画像ファイルリストを生成します。
1 |
dir *.jpg /b > nglist.txt |
以下のように「neg」フォルダに不正解画像ファイルリストができます。
カスケードXMLを作る
必要なものが全てそろったらカスケード分類器を生成していきます。カレントディレクトリを「CascadeXML_Creation」に移動しておきます。以下のコマンドを入力してカスケードXMLを生成します。
1 |
opencv_traincascade.exe -data ./cascade/ -vec ./vec/Grey.vec -bg ./neg/nglist.txt -numPos 40 -numNeg 20 |
コマンドが正常終了すると「cascade」フォルダにカスケードXMLができます。
これでカスケード分類器の生成は完了しました。これをPythonやC++などで読み込んで利用すると画像の判定ができるようになるはずです。
具体的な使用例はこちらの記事にまとめています。
使用例1)OpenCVとC++とVisualStudioで顔認識してみる
使用例2)OpenCVとWebカメラでリアルタイム顔認識をする
以上、今回は「OpenCVでカスケード分類器を自作する方法」を説明させていただきました。
参考サイト
こちらのブログがとても参考になります!
・OpenCVを利用した横浜線編成判定器の作成
コメントを残す