【簡単!】Pythonで画像識別処理のメモ
こんばんは!
本日は、GPT-4先生に教えていただいた簡単Pythonコードをメモ書きします。
今回は、読み取った画像がニャンニャンなのか、ワンワンなのかなどを、識別してくれるコードです。
GoogleColabや、AnacondaのSpyderエディタで実行可能ですが、初期設定は事前にお済ませくださいませ。(調べればでてきますので。)
必要なライブラリをインストール
GoogleColabの場合
!pip install tensorflow
!pip install keras
!pip install opencv-python
Anaconda Promptの場合
pip install tensorflow
pip install keras
pip install opencv-python
あとはGoogleColabもSpyderも一緒。
必要なものをダウンロードし、『model.save』でモデルを保存していきます。
PCのスペックにより少々お時間かかりますので、よろしければ歯磨きでも。
import keras
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
from keras.datasets import cifar10
from keras.utils import np_utils
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=32, epochs=20, validation_split=0.2)
score = model.evaluate(X_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
model.save('image_recognition_model.h5')
次に、保存したモデルを読み出して、画像のクラスを判定してもらいます。
画像URLを変えれば、以下のコードだけを実行すれば動くはずです。
GoogleColabの場合、ランタイムを切断後は、最初から実行をお願いします。
image_url = "{URL}" ←この列に画像のURLを入れます。
print("Predicted class:", predicted_class) ←最終行にあるこのコードで、リンク先の画像が度のクラスに属するものなのかを判定して、
【Predicted class: x】のように結果を表示してくれます。
from keras.models import load_model
import cv2
import numpy as np
import urllib.request
model = load_model('image_recognition_model.h5')
# 画像のURLを指定
image_url = "{URL}"
# 画像をダウンロードし、NumPy配列に変換
with urllib.request.urlopen(image_url) as url:
image_array = np.asarray(bytearray(url.read()), dtype=np.uint8)
# NumPy配列をOpenCVの画像形式に変換
img = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
# 画像が正しく読み込まれているかどうかをチェック
if img is None:
print(f"画像が読み込めません: {image_url}")
else:
img = cv2.resize(img, (32, 32))
# 前処理を行い、モデルの入力形式に合わせます。
img = img.astype('float32') / 255.0
img = np.expand_dims(img, axis=0)
# 画像認識を行い、予測結果を取得します。
predictions = model.predict(img)
predicted_class = np.argmax(predictions)
print("Predicted class:", predicted_class)
尚、注意点としては、CIFAR-10データセットのクラスラベルに対応させているため、以下のクラスに無いものは間違った判定結果が表示されます。
0.airplane
1.automobile
2.bird
3.cat
4.deer
5.dog
6.frog
7.horse
8.ship
9.truck
以上。
この記事が気に入ったらサポートをしてみませんか?