OpenCV for Unity Ver.3.2.0
Unity 2017.3.0.f3
Windows7 64bit
こんにちは
現在OpenCV For Unityを使い、カメラに特定のオブジェクトが映った場合、赤枠がそのオブジェクトを囲うようなものを作ろうとしています
OpenCV For UnityのVer.3.2.0に標準で入っているFaceDetectionWebCamTextureExampleを使っています
このシーンはデフォルトではWebカメラに映った画像から顔を検出し、顔の部分を赤枠が囲むサンプルです
そこで、カスケードファイルを目的のオブジェクトを学習させたカスケードファイルに差し替えることで、目的のオブジェクトがカメラに映ると検出してくれると考えました
カスケードファイルは以下の手順で作成しました
1.正解画像として、目的のオブジェクトを撮影した画像データを1000枚用意(pngでサイズはバラバラ。機械学習時に指定するw,hよりも大きくしておく)
2.不正解画像として、適当な画像データを450枚用意(pngでサイズは統一し、機械学習時に指定するw,hよりも大きくしておく)
3.OpenCV64ビット版をインストールし、以下のコマンドで正解のベクトルデータを作成(poslistは正解画像のリスト)
OpenCV
1opencv_createsamples.exe -info ./pos/poslist.txt -vec ./vec/pos.vec -bg ./neg -num 1000 -w 180 -h 120
4.作成したベクトルデータを用いて、以下のコマンドで機械学習を実行してカスケードファイルを作成(ngllistは不正解画像のリスト)
OpenCV
1opencv_traincascade.exe -data ./cascade/ -vec ./vec/pos.vec -bg ./neg/nglist.txt -numPos 900 -numNeg 451 -w 180 -h 120
5.OpenCV For UnityをインポートしてStreamingAssetsフォルダを作成し、その中に4で作成したカスケードファイルを置く
6.FaceDetectionWebCamTextureExampleでカスケードファイルを読んでいるところを5で作成したカスケードファイルを読むように書き換える
7.実行し、Webカメラで目的のオブジェクトを撮影する
ここで、画像は映ったのですが目的のオブジェクトのところに赤枠が出ないという状態です。誤認識して赤枠が出るということもありませんでした。そこで質問なのですが
Ⅰ:検出する対象が変わった場合、カスケードファイルを入れ替えるだけでいい?
Ⅱ:目的のオブジェクトを学習させる手順はこれで合っている?
Ⅲ:ⅠとⅡが間違っている場合、どのような手順を追加すればいい?
以上です。御回答よろしくお願いします
あなたの回答
tips
プレビュー