今天是第七天我們要模擬特斯拉辨識系統,以下yolo v8的程式碼
此範例程式碼將展示如何使用 YOLOv8 進行即時的物體偵測,並結合追蹤算法來追蹤特定物體(如車輛或行人)的位置。
pip install ultralytics opencv-python opencv-python-headless
import cv2
from ultralytics import YOLO
# 初始化 YOLOv8 模型
model = YOLO('yolov8m.pt') # 使用中等大小的模型,可以根據需求調整
# 啟用視訊捕捉(模擬車載攝影機)
cap = cv2.VideoCapture('road_video.mp4') # 替換成你自己的路況影片檔案
# 創建一個物體追蹤器(這裡使用 OpenCV 提供的 KCF 追蹤器)
tracker = cv2.TrackerKCF_create()
initBB = None # 追蹤器的初始邊界框
while True:
ret, frame = cap.read()
if not ret:
break
# YOLOv8 物體偵測
results = model(frame)
detections = results[0].boxes.xyxy # 取得偵測結果的邊界框
# 初始化追蹤器
if initBB is None and len(detections) > 0:
# 假設只追蹤第一個偵測到的物體(如第一輛車)
initBB = tuple(detections[0].cpu().numpy())
tracker.init(frame, initBB)
# 如果追蹤器已啟動,更新追蹤結果
if initBB is not None:
success, box = tracker.update(frame)
if success:
(x, y, w, h) = [int(v) for v in box]
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, "Tracking", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
else:
cv2.putText(frame, "Lost", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
# 顯示結果影像
cv2.imshow("Tesla Detection & Tracking", frame)
# 按 'q' 鍵退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
模型選擇:這裡我們使用了中等大小的 YOLOv8 模型 (yolov8m.pt
),這在準確性和速度之間達到平衡。可以根據需求選擇更大的模型(yolov8l.pt
)或更小的模型(yolov8n.pt
)。
物體追蹤:我們使用了 OpenCV 的 KCF 追蹤器。追蹤器初始化後,會根據第一個偵測到的物體開始追蹤,並在後續的每一幀中更新物體的位置。如果追蹤成功,會在影像上繪製綠色矩形框標註追蹤中的物體;若追蹤失敗,則顯示「Lost」。
即時處理:這段程式碼可以處理即時的視訊流,模擬車載攝影機拍攝的路況影片,實現物體的即時偵測和追蹤。
在實際應用中,可以將多個追蹤器與更多的偵測後處理技術結合,如 Kalman 濾波、光流追蹤等,以達到更加穩定和準確的多物體追蹤。此外,還可以集成其他感測器數據(如雷達、激光雷達)來提供更全面的環境感知。