Day16 物件追蹤


🟡 先看看程式的效果

今天的程式是一個很有趣的即時物件追蹤程式呢, 不過使用上要注意一下, 請在程式開始後按 S, 然後用滑鼠在物件的左上角點擊並拖放到物件的右下角再按 Enter 確定, 讓程式學習需要追蹤的物件是甚麼, 然後程式就一直會追蹤著那件物件的了。

Today’s program is a very interesting real-time object tracking program. However, please pay attention to the usage: after starting the program, press S, then click and drag with the mouse from the top left corner of the object to the bottom right corner, and press Enter to confirm. This allows the program to learn what object needs to be tracked, and then it will continuously track that object.


🟡 學習目標

這個物件追蹤程式的實際可以用於:
– 機器人視覺系統
– 安全監控系統
– 運動分析
– 人機互動應用


🟡 程式碼

請先下載 “物件追蹤.py”
請按此下載

# 導入OpenCV函式庫
import cv2

# 開啟攝影機(0代表預設攝影機)
cap = cv2.VideoCapture(0)

# 創建CSRT追蹤器實例
tracker = cv2.TrackerCSRT_create()

# 初始化ROI(Region of Interest)變數
roi = None

# 讀取第一幀影像
ret, frame = cap.read()
cv2.imshow('frame', frame)

# 主要循環
while True:
    # 持續讀取新的影像幀
    ret, frame = cap.read()

    # 如果還沒有選擇追蹤目標
    if roi is None: 
        # 顯示提示訊息
        cv2.putText(frame, "Press 'S' to select object to track", (10, 30), 
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
        cv2.putText(frame, "Then press 'Enter' to confirm", (10, 60), 
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 128, 128), 2)

    # 更新追蹤器
    if roi is not None:
        # 更新追蹤器
        success, rect = tracker.update(frame)
        if success:
            # 將追蹤結果的座標轉換為整數
            (x, y, w, h) = [int(i) for i in rect]
            # 在影像上繪製綠色矩形框標示追蹤目標
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 顯示處理後的影像
    cv2.imshow('frame', frame)

    # 檢查鍵盤輸入
    key = cv2.waitKey(1)
    
    # 如果按下 S 鍵,則開始選擇追蹤目標
    if key == ord('s') and roi is None:
        roi = cv2.selectROI('frame', frame)
        # 確認使用者有選擇區域(不是全部為0)
        if roi != (0, 0, 0, 0):
            # 初始化追蹤器,設定追蹤目標
            tracker.init(frame, roi)

    # 如果按下ESC鍵(鍵值27),則結束程式
    if key == 27:
        # 關閉所有OpenCV視窗
        cv2.destroyAllWindows()
        break

🟡 小小挑戰一下

大家可以嘗試進行一些修改或改良喔! 例如:
✌️改良一下程式, 讓使用者覺得更容易使用吧!

😁 明天見!

按這裏回到 Python + AI 的 21 天挑戰