
ゆうき( @BASEBALLY15 )です^^
前回は, FlickrというサイトのAPIを取得し,複数の画像を一度にダウンロードしましたね.
はい^^
今回は,取得した画像を数値化し,学習用とテスト用に分けたいと思います.
(Udemy『画像判定AIアプリ開発・パート1』を参考,AnacondaのSpyderを使用)

画像を学習用とテスト用に分けよう!
下準備
今回は,画像データを処理するので,最初にそのための機能をインストールしておきます.
インストール方法:Anaconda Promptを開き,『conda install pillow』と打ち込む.
また,データを学習用とテスト用に分けるために,『conda install sklearn』と打ち込み,sklearnもインストールしておきます.
それでは,コードを見ていきましょう^^
ライブラリ
保存名:veg_generatedata.py
#画像に処理をするためのライブラリ
from PIL import Image
#ディレクトリやファイルに処理をするためのライブラリ
import os, glob
import numpy as np
#データを学習用とテスト用に分けるためのライブラリ
from sklearn import model_selection
コード
クラスの作成と画像サイズの指定
まずは,クラスの作成と画像サイズの指定を行います.
#クラスを作成
veg_classes = ["cabbage", "lettuce"]
#クラスの数(=2)
num_veg_classes = len(veg_classes)
#画像のサイズを指定
image_size = 50
画像データの編集と数値化
次に,読み込んだ画像を『画像データ』と『ラベルデータ』に分けるので,そのためのリストを用意します.
#画像データの配列を用意
X = []
#ラベルのデータを用意
Y = []
そして,前回に約250枚の画像をダウンロードしたので,そこから150枚に減らしていきたいと思います.(2つのデータ数を統一する.)
また,画像のままだと TensorFlow(テンソルフロー)で処理できないので,画像データを数値化します.
#画像データとラベルデータに分割
for index, classlabel in enumerate(veg_classes):
#画像のディレクトリ名
photo_dir = "./" + classlabel
#画像を一枚ずつ取得
files = glob.glob(photo_dir + "/*.jpg")
#写真をRGB化し,変更を加える
for i, file in enumerate(files):
#もし,150枚以上なら,終了
if i>=150: break
#画像を開く
image = Image.open(file)
#RGB化する
image = image.convert("RGB")
#サイズを50×50にリサイズする
image = image.resize((image_size, image_size))
#画像データを数字に変換する
data = np.asarray(image)
X.append(data)
Y.append(index)
これで,XとYにデータが入ったのですが,TensorFlow(テンソルフロー)で処理を行う際にデータの扱いを容易にするために,Numpy形式に変換しておきます.
#XとYをnumpy形式に変換する(TensorFlowでは,numpy形式の方が扱いやすい)
X = np.array(X)
Y = np.array(Y)
学習用とテスト用に分割
そして,XとYをそれぞれ学習用とテスト用に分けたいと思います.
#学習用とテスト用に分割
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y)
#学習用とテスト用のデータをまとめておく
xy = (X_train, X_test, Y_train, Y_test)
最後に,分割したデータを以下のコードを記述し,保存しておきたいと思います.
判別を行う際に,必要となります.
#Numpy形式でファイルを保存しておく
np.save("./vegetables.npy", xy)
これで,学習用とテスト用に分割したデータが保存されました.
終わりに
今回は,ダウンロードした複数の画像を学習用とテスト用に分割しました.
次回は,分割したデータを使って,ニューラルネットワークによる判別を行っていきたいと思います^^
それでは・・・