見出し画像

【簡単!】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


以上。

この記事が気に入ったらサポートをしてみませんか?