スマホ写真で画像認識の画像を集める方法
卒業研究で画像認識のプログラムを作成する機会があり、スマホで撮った写真を使って
学習するための画像にしたのですが
その画像をそのままPythonのOpenCVを使って画像を小さく加工すると
撮影した物体の見た目が変わってしまったので、それを解決した方法を交えて、画像を集める方法を紹介します。
※PythonのOpenCVは画像や動画を処理するのに必要な機能が実装されているオープンソースのライブラリです。
解決した方法
(Androidのスマホの場合)
写真サイズの比率がデフォルト(標準)で設定されてある16:9のまま学習画像に使うと、cv2.resize()をするときに縦長、横長になり元の写真と見た目が変わってしまいます。
※cv2.resize()は画像を小さくしたり、大きくしたりする命令です。

そこで、
写真サイズの比率を1:1にするとcv2.resize()をしたときに元の写真と見た目があまり変わらなくなります。
スマホ写真1:1 150×150にリサイズ
1:1の比率で撮ったスマホ写真をcv2.resize()で150×150にして、画像を小さく加工しています。
実際にデフォルト16:9と1:1の比較をします
何も設定していないデフォルトのサイズ16:9のスマホ写真と設定した1:1のスマホ写真を比較をします。
スマホ写真16:9

スマホ写真1:1

OpenCVを使って画像を小さく加工します
スマホで撮った写真を150×150にして小さく加工した画像を比較します。
1 2 3 4 5 6 7 8 |
import cv2 img=cv2.imread("画像名前")#読み込み resize_img=cv2.resize(img,(150,150))#リサイズ150x150 cv2.imshow("img",resize_img)#表示 cv2.waitKey(0) cv2.imwrite("wp_resize_img.jpg", resize_img)#保存 |
16:9の場合

1:1の場合

150×150にして小さくした画像を比較した結果、1:1にした方がスマホ写真と見た目があまり変わっていないのがわかります。
画像を集める方法
スマホ写真の比率を1:1に設定した状態で、少しづつ角度を変えたりしながら、連写機能を使って100枚の写真を撮りました。この写真をもとに学習画像に使います。
本当はもっと画像があった方がいいのですが、画像認識させる種類が多かったので、1つの物体につき100枚だけ撮ることにしました。
あと、その少ない画像を補うために、PythonのOpenCVを使って画像を少しづつ回転させたり、反転させたりして増やしたものを学習画像に使いました。
スマホ写真で100枚の画像を集めて、それを加工した様子
PythonのOpenCVを使って100枚の画像を75×75の大きさに加工した様子。

この100枚の画像をプログラム上で回転させたり、反転させたりして240枚に増やしてします。
そして、その増やした画像を使って学習させました。