這份程式碼在 Orin ****上執行,用來測試 YOLO 模型是否能正常執行即時影像偵測。
主要功能:
best.pt
權重)。q
鍵即可關閉程式。testModel_Orin.py
import time
import cv2
from ultralytics import YOLO
# === 設定參數 ===
MODEL_PATH = "best.pt" # YOLO 權重
CAM_INDEX = 0 # /dev/videoX 對應的索引
FRAME_W = 1280
FRAME_H = 720
CONF_THRES = 0.25
IOU_THRES = 0.45
DEVICE = 0 # 0=GPU 第0張卡;若沒有GPU或想用CPU,改成 "cpu"
SHOW_FPS = True
def open_camera(cam_index=0, w=1280, h=720):
cap = cv2.VideoCapture(cam_index)
if not cap.isOpened():
raise SystemExit(f"無法開啟攝影機 {cam_index}")
# 設定解析度與壓縮格式(MJPG 在許多 UVC 上能提升取流效率)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, w)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG"))
# cap.set(cv2.CAP_PROP_FPS, 30) # 需要時可嘗試設置
return cap
def main():
# 1) 載入模型
model = YOLO(MODEL_PATH)
# 2) 開相機
cap = open_camera(CAM_INDEX, FRAME_W, FRAME_H)
# 3) 連續偵測
fps_hist = []
win_name = "YOLO - Webcam (press q to quit)"
while True:
ok, frame = cap.read()
if not ok:
print("讀取影像失敗,結束。")
break
t0 = time.time()
# 直接對 frame (numpy array, BGR) 推論
results = model(
frame,
conf=CONF_THRES,
iou=IOU_THRES,
device=DEVICE,
verbose=False
)
annotated = results[0].plot() # 繪製 bbox/label
# 4) 疊上 FPS
if SHOW_FPS:
fps = 1.0 / max(1e-6, time.time() - t0)
fps_hist.append(fps)
if len(fps_hist) > 30:
fps_hist.pop(0)
avg_fps = sum(fps_hist) / len(fps_hist)
cv2.putText(
annotated,
f"FPS: {avg_fps:.1f} (device: {DEVICE})",
(10, 30),
cv2.FONT_HERSHEY_SIMPLEX,
0.8,
(255, 255, 255),
2,
cv2.LINE_AA,
)
# 5) 顯示
cv2.imshow(win_name, annotated)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()