Pythonでできる機械学習画像判定~TensorFlow(keras)で犬猫判定モデルを作ろう!~初心者でも簡単にAIができる!プログラムの作り方を紹介!

学習

TensorFlowという機械学習ライブラリを使って、犬と猫の画像を分類するモデルを作っていきます。
機械学習に興味があるけど、難しそうだから手を出せなかったという方も、今回の動画を見れば初心者でも簡単にAIを体験することができます。

▶チャプターリスト(目次)
00:00 イントロダクション
00:10 オープニング
01:38 機械学習モデルの基本
09:19 プログラム解説
11:27 画像判定結果
13:50 まとめ

#tensorflow
#keras
#PIL

▼On-site programming developer training institution
↓↓↓VMaterial(現場のプログラム習得用タイムパーフォーマンスMAXの新ビデオ教材)のあるオンラインスクールはコチラです。
https://firesoft-developing-cource.teachable.com/

↓↓↓チャンネル登録はコチラ
https://www.youtube.com/channel/UC9LBFFnjLr8RRASYQZ1E3wg?sub_confirmation=1

【dog or cat画像判定】
※同じディレクトリに[cat]と[dog]のフォルダーを作りトレーニング用画像をデータセットとして入れておきます。
※エラーになりますので、トレーニング用画像かChoose Imageボタンで判定させる画像のパスか名前に、日本語が入らないようにして下さい。

▼predict_image.py
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from keras.utils import to_categorical
import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import ImageTk, Image

# 画像ファイルのパス
from tensorflow.python.keras.layers import Activation
IMG_SIZE = 64

# モデルの作成とトレーニング
data = []
labels = []
classes = [‘cat’, ‘dog’]

for c in classes:
path = os.path.join(os.getcwd(), c)
for img in os.listdir(path):
try:
img_path = os.path.join(path, img)
image = cv2.imread(img_path)
image = cv2.resize(image, (IMG_SIZE, IMG_SIZE))
data.append(image)
labels.append(classes.index(c))
print(img_path)
except Exception as e:
print(e)

data = np.array(data)
labels = np.array(labels)

# データをシャッフルする
idx = np.arange(data.shape[0])
np.random.shuffle(idx)
data = data[idx]
labels = labels[idx]

# データをトレーニング用と検証用に分割する
num_samples = len(data)
num_train = int(num_samples * 0.8)
x_train = data[:num_train]
y_train = labels[:num_train]
x_val = data[num_train:]
y_val = labels[num_train:]

# 画像データの正規化
x_train = x_train / 255.0
x_val = x_val / 255.0

# ラベルをone-hotエンコーディングに変換する
y_train = to_categorical(y_train)
y_val = to_categorical(y_val)

# モデルを構築する
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=x_train.shape[1:]))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation(‘relu’))
model.add(Dense(2))
model.add(Activation(‘softmax’))

# モデルをコンパイルする
model.compile(loss=’categorical_crossentropy’,
optimizer=’adam’,
metrics=[‘accuracy’])

# モデルをトレーニングする
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_val, y_val))

# GUIの作成
root = tk.Tk()
root.title(“Cat or Dog Classifier”)
root.geometry(“500×500″)

# ボタンのクリック時の処理
def predict():
# 画像を選択する
file_path = filedialog.askopenfilename()

# 選択された画像を表示する
image_tk = Image.open(file_path).resize((IMG_SIZE, IMG_SIZE))
image_tk = ImageTk.PhotoImage(image_tk)
img_label.configure(image=image_tk)
img_label.image = image_tk
print(file_path)

# 選択された画像をモデルに入力して予測結果を表示する
image_selected = cv2.imread(file_path)
image_selected = cv2.resize(image_selected, (IMG_SIZE, IMG_SIZE))
image_selected = np.expand_dims(image_selected, axis=0)
image_selected = image_selected / 255.0
prediction = model.predict(image_selected)
if np.argmax(prediction) == 0:
result_label.configure(text=”This is a cat!”)
else:
result_label.configure(text=”This is a dog!”)

# 画像を表示するラベルの作成
img_label = tk.Label(root)
img_label.pack()

# 予測結果を表示するラベルの作成
result_label = tk.Label(root, font=(“Helvetica”, 18))
result_label.pack()

# ボタンの作成
button = tk.Button(root, text=”Choose Image”, command=predict)
button.pack()

root.mainloop()

コメント

タイトルとURLをコピーしました