自前のjpg画像データを使用して機械学習とかさせたい
教本等ではkerasのload_mnist などで持ってきたのMNISTデータ等で学習している。
がしかし実用化とか考えるとmnist 等は利用しない自作データを持ってきて学習させるためにはndarray形式にさせる必要がある。
用意
画像のみが入っているフォルダを作成
右クリックプロパティとかでそのフォルダのアドレスを取得しておく
importしたもの
import os
import numpy as np
import glob
import cv2
実行時のバージョン pip
作成したプログラム
#学習データの場所を指定
#学習データの場所を指定 アドレスの取得
train=glob.glob(os.path.join("address", '*'))
#address="/Users/User1/data/train"
#画像のサイズの指定
#横
x_size=256
#縦
y_size=320
#データの格納
x_train=[]
for j in range(len(train)):
img=cv2.imread(os.path.join(train[j]))
#グレイスケール変換を行うとき
#img=cv2.cvtColor(timg,cv2.COLOR_BGR2GRAY)
img=np.asarray(img)
#指定したサイズに変更
img_resize=cv2.resize(img,(x_size,y_size))
#格納
x_train.append(img_resize)
#正規化
x_train=np.float32(x_train)
x_train/=255
解説
trainとx_trainは別物
trainの説明
trainには参照先のフォルダ内の画像のアドレスがそれぞれ格納される
["/Users/User1/data/train/1.jpg","/Users/User1/data/train/2.jpg"......]
の様に格納される。
img=cv2.imread(os.path.join(train[j])
trainのj番目、"/Users/User1/data/train/〇〇.png"から画像を取得する
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
これを入れるとグレースケール変換が行われる。
img=np.asarray(img)
numpy配列に変換
img_resize=cv2.resize(img,(x_size,y_size))
指定したサイズに変更
x_train.append(img_resize)
学習用の配列に追加
for文の後にnp.shape(x_train) すると、(枚数,縦,横)で読み込まれることが確認できる。
モデルに入れるとき
input_img = Input(shape=(size, size, 3))
のように指定する。この時白黒もしくはグレースケール変換したものであれば以下のようにする。
input_img = Input(shape=(size, size, 1))
以上