情報が少ないので

OpenCV付属のツールで、機械学習に必要なベクトルデータ (ディープラーニングで言う学習データ?と私は思っています)を作るopencv_createsamples.exeを使う際の注意。
学習対象となる画像を用意し、リストファイルに記載することで、画像からベクトルデータを作成します。

が、このリストを作る際にはまったのでメモ。

  • リストファイルのパス区切り文字列は / でも \ でもOK
  • 絶対パスでもOK
  • ただし、絶対パスでも相対パスでも空白がパスに入るとダメ。例えダブルクォーテーションで囲ってもダメ。ダブルクォーテーションで囲むと、空白の有無に関係なくエラーになる
  • サンプル数や座標の区切りの空白の数は1でも2でもOK
  • エンコードに注意。Shift-Jis、UTF8でもいいが、BOMありはアウト

また、関連ツールにopencv_traincascade.exeがあります。
これは、opencv_createsamples.exeで作ったベクトルデータと、背景画像のリストを入力して学習済みモデルを生成するためのツールです。
このツールも少し注意です。

  • リストファイルのパス区切り文字列は / でも \ でもOK
  • 絶対パスでもOK
  • ただし、絶対パスでも相対パスでも空白がパスに入るとダメ。例えダブルクォーテーションで囲ってもダメ。ダブルクォーテーションで囲むと、空白の有無に関係なくエラーになる
  • エンコードに注意。Shift-Jis、UTF8でもいいが、BOMありはアウト

ここは、前段と同じです。
他には、opencv_traincascade.exeでベクトルデータを作成する際、次元数を -h 48 -w 48 のように、縦横で指定しますが、この時の入力と同じ引数をopencv_traincascade.exeに渡します。

さもなくば、

1
2
3
4
<BEGIN
OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in CvCascadeIm
ageReader::PosReader::get, file C:\builds\2_4_PackSlave-win64-vc12-shared\opencv
\apps\traincascade\imagestorage.cpp, line 157

みたいなエラーがでます、 ようするに、ベクトルデータの次元数と背景画像データをベクトルデータにする際の次元数が違いますよ、ってことです。

Conclusion

正直、ファイルリストだけでここまではまるとは思ってもみませんでした。
何度Linux版を使おうか、と諦めかけたことか。