機械学習では入力する値はベクトル化しないといけない。となると画像を学習させるときは画像をベクトル化する必要があります。このベクトル化どうやってやるのか謎でいろいろ調べたところ、普通にnumpyを使えば良いらしくこんな簡単にベクトル化できるのだなとちょっと感動しました。
numpyを以下のコードで試しました。
# numpy_practice.py from PIL import Image import numpy as np from matplotlib import pylab as plt import sys args = sys.argv img = np.array( Image.open(args[1]) ) print(img.shape) print(img[0])
実行と出力結果は以下のような感じ
$ python src/numpy_practice/numpy_practice.py 画像のパス (160, 160, 3) [[255 254 255] [255 254 255] [255 254 255] [255 254 255] [255 253 254] [255 253 254] [255 253 254] [255 253 254] [255 253 254] [254 254 254] [254 254 254] [254 254 254] [254 254 254] [254 254 254] [254 255 254] [251 254 253] [249 253 252] [251 254 254] [252 255 254] [249 254 249] [248 252 246] [249 250 246] ...
160x160の画像でRGBのそれぞれの値が配列になって入っています。これでピクセルごとのデータを数値に出来たのでこれを処理しやすい形に変換して食わせることができれば画像を学習することができそうです。ここまで気づくのに結構時間がかかってしまった。あとはこれを使って学習できる形に変換して実際に試してうまく行けるか確認したてようやく自分のやりたい画像分類とかに進めそうです。