ニューラルネットワーク 画像の読み込み

ゆうき( @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)

これで,学習用とテスト用に分割したデータが保存されました.

終わりに

今回は,ダウンロードした複数の画像を学習用とテスト用に分割しました.

次回は,分割したデータを使って,ニューラルネットワークによる判別を行っていきたいと思います^^

それでは・・・

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA