Open phonon-py opened 3 months ago
実際だと、リアルタイム検出だと常に更新されているので、どのタイミングでトリガーするか?現在の画像内に同一のオブジェクトが存在するか、カウントできるかを確認する
YOLOを使用してリアルタイムでオブジェクトを検出し、その結果に基づいて特定のラベルの個数をカウントし、特定の条件を満たす場合に画面にメッセージを表示することは可能です。以下にその方法の概要と具体的なPythonコードの例を示します。
以下のコード例はYOLOv5を使用して、リアルタイムで特定のラベルの個数をカウントし、その個数が10以上であれば「OK」と表示するものです。
import cv2
import torch
# YOLOv5モデルの読み込み
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# 特定のラベル(例: 'person')をカウント
target_label = 'person'
threshold_count = 10
# ビデオキャプチャの設定(デフォルトカメラを使用)
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# オブジェクト検出
results = model(frame)
# 検出結果の解析
labels = results.xyxyn[0][:, -1].cpu().numpy()
label_names = [model.names[int(label)] for label in labels]
# 特定のラベルの個数をカウント
count = label_names.count(target_label)
# フレームに情報を描画
cv2.putText(frame, f'{target_label} count: {count}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
# 条件判定とメッセージ表示
if count >= threshold_count:
cv2.putText(frame, 'OK', (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 検出結果の描画
results.render()
frame = results.imgs[0]
# フレームを表示
cv2.imshow('YOLOv5 Real-Time Object Detection', frame)
# 'q'キーが押されたらループを終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# リソースの解放
cap.release()
cv2.destroyAllWindows()
torch.hub.load('ultralytics/yolov5', 'yolov5s')
でYOLOv5モデルをロードしています。cv2.VideoCapture(0)
でデフォルトのカメラをキャプチャしています。model(frame)
で各フレームに対してYOLOを使用してオブジェクトを検出します。cv2.imshow
を使用してフレームを画面に表示し、リアルタイムで更新します。このコードを実行することで、特定のラベルが指定された個数に達した場合にメッセージを画面に表示することができます。
ビデオアップロードの機能を削除し、検出結果をフレーム内のテキストラベルに表示するように変更したコードは以下の通りです。
このコードは、YOLOv5を使用してWebカメラから物体検出を行い、その結果をTkinterウィンドウ内に表示します。検出結果はフレーム内のテキストラベルに表示されます。ビデオアップロード機能は削除され、Webカメラのみを使用します。