クラスIDとバウンディングボックスから、接近検知を行いたい…
- Jetson Orin, Jetson Nano
- YOLOv8.3.11
物体追跡(MOT)
参考にさせていただきました:
https://qiita.com/daifuku10/items/50cb5cd9740e07fde591
track_webcam.py
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 学習済みモデルをロード
cap = cv2.VideoCapture(0) # カメラを開く
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # 横1280ピクセル
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # 縦720ピクセル
while True:
success, frame = cap.read() # 1フレーム読み込み
# 物体のトラッキング persist:フレーム間でトラッキングを永続化
# verbose:コンソールへのログ出力を無効化 conf:信頼しきい値
results = model.track(frame, persist=True, verbose=False, conf=0.5)
annotated_frame = results[0].plot() # トラッキング結果をフレームに描画
items = results[0] # 複数の物体情報を取得
for item in items: # 1つ取得し
cls = int(item.boxes.cls) # クラスIDを取得
label = item.names[int(cls)] # クラスIDからラベル名を取得
score = item.boxes.conf.cpu().numpy()[0] # 信頼度を取得
x1, y1, x2, y2 = item.boxes.xyxy.cpu().numpy()[0] # バウンディングボックスの座標を取得
id_value = item.boxes.id # トラッキングIDを取得 存在しない場合はNone
if id_value is None: # トラッキングIDが存在しないなら空文字
track_ids = ''
else: # 存在すればIDを取得
track_ids = item.boxes.id.int().cpu().tolist()[0]
print(str(cls), str(label), str(score), str(track_ids), \
str(x1), str(y1), str(x2), str(y2))
cv2.imshow("YOLOv8 Tracking", annotated_frame)
if cv2.waitKey(1) != -1:
break
cap.release() # カメラを開放
cv2.destroyAllWindows() # ウィンドウを閉じる