Googleは取得出来る画像の枚数や制限が厳しいです。yahooはなぜかクレジッドカードの登録が必要なプランです。
https://datamarket.azure.com/dataset/bing/search
無料のプランを選択します。
もしくは、MITが提供している画像データを使ってみます。
これはデータセットをどんな風に用意するのかを勉強することも出来ます。
http://cbcl.mit.edu/software-datasets/
他には以下のようなデータセットもあります。
http://vasc.ri.cmu.edu/idb/html/car/index.html
http://www.vision.caltech.edu/html-files/archive.html
http://iris.usc.edu/Vision-Users/OldUsers/bowu/DatasetWebpage/dataset.html
ある物体の形状、例えば人や顔などを検出する場合は、データの準備が出来たら、大量に収集した画像のパターンを学習させます。
しかし、形状は同じだが内容が異なる、例えば本やCDのカバー、キャラクター(特徴的な形状)の場合は、様々な角度から見た画像を学習させる必要があります。
OpenCVには、ホモグラフィー変換を行う関数がついていて、自分でパターンを生成することも可能です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ホモグラフィー(透視変換)を行う | |
* | |
* pts1 元の4点 | |
* pts2 変換後の4点 | |
*/ | |
Mat cv_perspective(InputArray src, Point2f pts1[], Point2f pts2[]) { | |
// ホモグラフィ行列取得。サーバアプリ内でも求めているので3×3のMatを自作すれば不要。 | |
Mat perspective_matrix = getPerspectiveTransform(pts1, pts2); | |
Mat dst_img; | |
warpPerspective(src, dst_img, perspective_matrix, src.size(), INTER_LINEAR); | |
// debug | |
namedWindow("Display Image perspective src", CV_WINDOW_AUTOSIZE); | |
imshow("Display Image perspective src", src); | |
namedWindow("Display Image perspective dst", CV_WINDOW_AUTOSIZE); | |
imshow("Display Image perspective dst", dst_img); | |
return dst_img; | |
} |
もうひとつはOpenCVに付属しているopencv_createsamplesを使用する方法があります。
1つの画像からランダムにアフィン&ホモグラフィー変換した画像を、OpenCVで使用する独自の「.vec」ファイルで出力します。
引数は知っておく必要があります。
-img
学習の元画像を示します。
1枚の画像からではなく,集めたたくさんの学習画像から学習用正解ファイルを生成する場合,-imgの引数を-infoに変えて正解画像リストファイルを指定します。
-vec
出力ファイル名です。学習用画像データは全てこの1つのファイルにまとめられます。
-num
作成する学習サンプル画像の数です。positiveサンプルが少ないと分類が学習がうまくいかないことが多いです。少なくとも3000くらいは作成したほうが良いです。
-bgcolor
背景色を示します。ロゴなど、印刷されている媒体がはっきりしている場合には、背景色を指定します。そうでない場合は、以下のbgを指定します。
-bg
検出したいオブジェクトが,複雑な背景の中にある場合が予想されるとき指定します。negative画像で準備した画像リストファイルを指定するか、背景の風景が
似通っているならば、シュチュエーションにあった画像を指定します。
以下のwとhはサンプル画像の大きさです。検出出来る物体の最小サイズにもなります。
OpenCVでは顔の場合24x24、人の場合はもう少し大きくても良いと思います。
学習サンプル画像では,元の画像を回転させたものが生成されるため,遊びを持たせるために元画像よりも小さくする(例えば1/2のサイズ)を指定すると良いです。
-w
学習サンプル画像の横幅(ピクセル)を指定します。検出したい物体に合わせて調整が必要です。
-h
学習サンプル画像の縦幅(ピクセル)を指定します。
-show
このオプションを指定すると,実際にどのようなサンプル画像が生成されたかを見ることができます。
Waitkey状態で画像が1枚ずつ表示されます。押すことで,次のサンプル画像を見ることができます。画像の閲覧をやめる場合はESCキーを押すか,ウィンドウを閉じます。
事前にどのような画像が生成されるかを見ることで,その他のオプションのパラメータを最適化します。
次は、生成した画像を使ってBoostによる学習するコマンドです。
0 件のコメント:
コメントを投稿