酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

1枚の画像から複数のポジティブ画像を生成する「opencv_createsamples」

1枚の画像から複数のポジティブ画像を生成するには、「opencv_createsamples」というツールを使用します。

特定のロゴ画像等から複数のポジティブ画像を作成するため用意されているツールです。数枚の顔写真から複数のポジティブ画像を生成する用途で使われるケースは少ないです。ロシアのRhonda Ltd.,という会社のブログによると、以下のように書かれています。

You can put any value to -w and -h depend on aspect ratio of the target object which you want to detect. But objects of smaller size will not be detected! For faces, commonly used values are 24×24, 20×20. But you may use 24×20, 20×24, etc.

Computer Vision Software » Blog Archive » FAQ: OpenCV Haartraining

意訳すると「オブジェクトを認識させる為には-wと-hのパラメータの値を何にすれば良いの?」に対して、「顔認識させたい場合は24x24または20x20にするのが一般的だ」と回答しています。ここで注意しないといけないのは作成したパラメータ以下のサイズのオブジェクトは認識できませんのでご留意ください。

例えば、下図のような1枚のポジティブ画像(アルパカ)を用意します。opencv_createsamplesを使用する場合、対象となるオブジェクトが画像いっぱいに写っている必要があります。ロゴの場合は周りに少しだけ空白を開けておくと認識率が上がるそうです。

f:id:ch3cooh393:20160310115729p:plain

opencv_createsamplesを使って複数枚のポジティブ画像を作成しました。

f:id:ch3cooh393:20160310115713p:plain

使用パラメータ例

alpaca.pngを元に70x70のpos_alpaca.vecを作成します。vecファイル内には学習データとなるポジティブ画像が4,000枚格納されています。

opencv_createsamples \
    -img alpaca.png -vec pos_alpaca.vec \
    -num 4000 -bgcolor 255 \
    -w 70 -h 70 -show

-show」オプションを追加することで下図のように生成された画像を閲覧する事が可能です。