手書き数字をAIに判定させてみよう【Keras×Colab】

2025年5月10日土曜日

Google Colab Keras TensorFlow 画像分類 機械学習

X f B! P L

はじめに

こんにちは、SHOUです!
以前の記事では、Google Colab×Keras を使って手書き数字(MNISTデータセット)の分類モデルを作りました。
今回はその続編として、自分で用意した1枚の手書き数字画像をAIに判定させてみます!
「自分の書いた数字がちゃんと認識されるのか?」ワクワクしますね😊

準備するもの

  • Google Colabアカウント
  • Google Driveアカウント
  • Drive内に置いた手書き数字の画像ファイル(PNGやJPG)
今回は28×28ピクセルのグレースケール画像が理想ですが、大きい画像でも Colab 上でリサイズできるので大丈夫です👌

Google DriveをColabにマウント

まず、Google Drive を Colab に接続します👇
  1. from google.colab import drive
  2. drive.mount('/content/drive')
すると、認証リンクが出るので、指示に従って認証してください。
マウントが完了すると、Drive のファイルが /content/drive/MyDrive/ 以下に見えるようになります。

Google Colabのセットアップ

まず、Google Colabを開き、ランタイムでGPUを選んでおきましょう。 設定:
[ランタイム] → [ランタイムのタイプを変更] → [ハードウェア アクセラレータ: GPU]

必要なライブラリをインポート

  1. import tensorflow as tf
  2. from tensorflow import keras
  3. import numpy as np
  4. from PIL import Image
  5. import matplotlib.pyplot as plt

学習済みモデルの用意

以前作ったモデル(MNIST用)をColabで再度学習して使用します。
  1. # モデルの構築と学習
  2. model = keras.models.Sequential([
  3. keras.layers.Input(shape=(28, 28)),
  4. keras.layers.Flatten(),
  5. keras.layers.Dense(128, activation='relu'),
  6. keras.layers.Dropout(0.2),
  7. keras.layers.Dense(10, activation='softmax')
  8. ])
  9.  
  10. model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  11.  
  12. # MNISTデータで学習
  13. (x_train, y_train), _ = keras.datasets.mnist.load_data()
  14. x_train = x_train / 255.0
  15. model.fit(x_train, y_train, epochs=5)
  16.  
  17. # モデル保存
  18. model.save('mnist_model.keras')
または、事前に保存したモデルをロード👇
  1. model = keras.models.load_model('mnist_model.keras')

画像ファイルの読み込み

ここでは、Drive内の画像ファイルを指定します。
  1. # Drive内の画像パス
  2. image_path = '/content/drive/MyDrive/Colab/handwritten_digit.png'
  3. # 画像を開く
  4. img = Image.open(image_path).convert('L')
  5. # 表示して確認
  6. plt.imshow(img, cmap='gray')
  7. plt.axis('off')
  8. plt.show()

今回判定させる画像👇

画像の前処理

MNISTは28×28ピクセルのグレースケール画像なので、リサイズ&正規化を行います。 また、MINSTは、黒地に白い数字なので、白黒反転させます。
  1. # 画像ファイル名を指定
  2. img = Image.open('/content/drive/MyDrive/Colab/handwritten_digit.png').convert('L')
  3.  
  4. # リサイズ&正規化
  5. img = img.resize((28, 28))
  6. img_array = np.array(img) / 255.0
  7.  
  8. # モデル入力用に形を整える
  9. img_array = img_array.reshape(1, 28, 28)
  10.  
  11. # 追加:白黒反転
  12. img_array = 1.0 - img_array

MNISTの画像確認

MNISTの画像が黒地に白い数字になっているか確認してみます。

  1. import matplotlib.pyplot as plt
  2. from tensorflow.keras.datasets import mnist
  3.  
  4. # データの読み込み
  5. (x_train, y_train), (_, _) = mnist.load_data()
  6.  
  7. # 最初の画像とラベル
  8. image = x_train[0]
  9. label = y_train[0]
  10.  
  11. # 画像を表示
  12. plt.imshow(image, cmap='gray')
  13. plt.title(f'Label: {label}')
  14. plt.axis('off')
  15. plt.show()

MNISTの画像👇

判定させる画像を表示

MNISTに合わせて白黒反転させた画像を確認します。
  1. import matplotlib.pyplot as plt
  2.  
  3. # グレースケール画像として表示
  4. plt.imshow(img_array[0], cmap='gray')
  5. plt.title('Preprocessed Image')
  6. plt.axis('off')
  7. plt.show()

白黒反転した画像👇

いよいよ予測!

  1. prediction = model.predict(img_array)
  2. predicted_class = np.argmax(prediction)
  3. print(f'AIの判定結果: {predicted_class}')
  4. print("---")
  5. print(f'AIの自信度')
  6. for i, prob in enumerate(prediction[0]):
  7. print(f'{i}: {prob:.4f}')
AIが自分の書いた数字を正しく認識しているか確認してみましょう✨
  1. 1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 37ms/step
  2. AIの判定結果: 4
  3. ---
  4. AIの自信度
  5. 0: 0.0022
  6. 1: 0.0000
  7. 2: 0.0001
  8. 3: 0.0000
  9. 4: 0.9866
  10. 5: 0.0000
  11. 6: 0.0000
  12. 7: 0.0044
  13. 8: 0.0000
  14. 9: 0.0066

この画像は '4' で、AIも '4' と認識しました。

また、98%で'4'と認識しているようです。

白黒反転させなかった場合の判定結果

白黒反転させなかった世界線での判定結果
  1. 1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 41ms/step
  2. AIの判定結果: 3
  3. ---
  4. AIの自信度
  5. 0: 0.0000
  6. 1: 0.0000
  7. 2: 0.0000
  8. 3: 0.9984
  9. 4: 0.0000
  10. 5: 0.0016
  11. 6: 0.0000
  12. 7: 0.0000
  13. 8: 0.0000
  14. 9: 0.0000

元の画像は同じ'4' ですが、AIは '3' と誤認識してしまいました。

また、自信満々99%で'3'と認識しているようです。

まとめ

今回は、Google ColabとKerasを使って、手書き数字画像をAIに分類させる方法を試してみました。独自に作成した数字「4」の画像を判定させたところ、結果も「4」と認識されました。 学習したモデルに合わせて白黒反転させることで、正しく認識させることができました。ぜひ皆さんも自分のデータで試してみてください!

このブログを検索

自己紹介

機械学習を学習中。虫も飼ってます。

お問い合わせ

名前

メール *

メッセージ *

プライバシーポリシー

QooQ