📚

TeachableMachineで作成したモデルでリアルタイム認識

2024/04/17に公開

はじめに

本記事では、TeachableMachineを使って物体分類するモデルを作成し、リアルタイムで認識する手順を説明します。

動作環境

OS: Windows 11
Python: 3.10.4
必要なライブラリ:
numpy 1.20.0
keras 2.11.0
pillow 9.3.0

注意点

モデルの作成

TeachableMachineでモデルを学習させます。今回は水筒とその他を分類するモデルを作成しました。
エクスポート形式はTensorflowのkerasを選択します。
ダウンロードしたフォルダを展開し、実行するPythonプログラムと同じフォルダに配置します。

フォルダ構成

  • test
    • ●●.py
    • keras_model.h5
    • labels.txt

使用したコード

import cv2
from keras.models import load_model
import numpy as np
import time

# モデルをロード
model = load_model("keras_model.h5", compile=False)

# ラベルをロード
class_names = open("labels.txt", "r").readlines()

# ウェブカメラを初期化
cap = cv2.VideoCapture(0)

while True:
    # フレームをキャプチャ
    ret, frame = cap.read()
    
    # フレームを224x224にリサイズ
    resized_frame = cv2.resize(frame, (224, 224))
    
    # 画像を正規化
    normalized_image_array = (resized_frame.astype(np.float32) / 127.5) - 1
    
    # kerasモデルに入力するための配列を作成
    data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
    
    # 配列に画像をロード
    data[0] = normalized_image_array
    
    # モデルで予測
    prediction = model.predict(data)
    
    # 予測結果のインデックスを取得
    index = np.argmax(prediction)
    
    # 予測されたクラス名を取得
    class_name = class_names[index].strip()
    
    # 予測の確信度を取得
    confidence_score = prediction[0][index]
    
    # 予測結果と確信度を表示
    print("Class:", class_name[2:], end="")
    print("Confidence Score:", confidence_score)
    
    # 予測結果と確信度をフレームに描画
    cv2.putText(frame, "Class: {}".format(class_name[2:]), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    cv2.putText(frame, "Confidence Score: {:.2f}".format(confidence_score), (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    
    # 結果をリアルタイムに表示
    cv2.imshow('Real-time Analysis', frame)
    
    # 'q'キーを押すと終了
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    
    # フレームレートを制御するための遅延 (オプション)
    time.sleep(0.1)

# キャプチャを解放し、ウィンドウを破棄
cap.release()
cv2.destroyAllWindows()

実行結果

モデルが上手く水筒とその他のオブジェクトを分類することができました。

まとめ

TeachableMachineを使うことで、比較的容易にカスタムモデルを作成し、リアルタイム物体認識を実現できます。この技術は自動運転をはじめとする様々な分野で応用可能です。

今後は、ラジコンの自動運転への応用に向けて、モデルの精度向上や、実環境でのテストを進めていく予定です。

Discussion