讓「不禮讓行人」變成可回看的事件:YOLOv8 × DeepSORT
從交通影片中的物件偵測、跨畫面追蹤到場景規則,說明大學畢業專題如何產生可回看的事件提示。
文章目錄
雨天街景裡,車輛、行人和斑馬線可能同時出現在一格畫面中;但「這台車是否在行人通過時讓行」不是單格影像能直接回答的問題。YOLO Right-of-Way Recognition 這個大學畢業專題的核心嘗試,是把一段影片轉成可以回看、檢查、討論的候選事件。
這篇介紹系統如何分析交通影片,以及桌面介面的操作流程與實際輸出。
為什麼單格偵測不夠?
影片進入系統後,YOLOv8(You Only Look Once 第 8 版)會在每一格畫面裡找出行人、車輛、機車和斑馬線;這一步是物件偵測,輸出是帶有類別與位置的框線。單格結果能回答「這裡可能有什麼」,卻不能回答「前後畫面的同一台車怎麼移動」。
因此專案再使用 DeepSORT(Deep Simple Online and Realtime Tracking)。它是一種跨畫面追蹤方法,會替偵測到的物件保留 ID,也就是識別同一個物件的編號,讓程式能把前後畫面的 car:6 視為同一個追蹤對象,而不是每格都重新編號。最後,場景規則把物件位置、斑馬線區域、車輛方向與移動軌跡放在一起,才形成「可能未禮讓」的提示。
YOLOv8 負責找出物件,DeepSORT 保留跨畫面的身份,規則層則根據連續觀察產生 Fail to yield to pedestrians 事件提示。

影片畫面同時顯示偵測框、物件編號、斑馬線區域和事件提示。
使用者實際怎麼跑一次分析?
這不是只能從命令列呼叫的模型。README 和 controller.py 所描述的桌面流程,把輸入、模型、輸出與進度放在同一個 PyQt5 介面中。一次分析大致會經過:
選取一個或多個 .mp4、.avi 或 .mkv 影片,指定輸出資料夾,再從 yolov8s、yolov8l、yolov8x6 中選擇模型。
接著使用者可以選擇兩種模式:闖紅燈偵測,或車輛不禮讓行人偵測。若影片角度不適合規則判斷,也可以先在校正頁調整旋轉角度,再把校正後的畫面交給後續流程。處理單部或多部影片時,介面會顯示目前影片和全部影片的進度。

載入影片後,可在同一個視窗預覽畫面、選擇模型與偵測方式,並控制播放。
角度校正解決了什麼?
角度校正會將輸入影像轉成符合場景規則假設的方向,方便後續判斷斑馬線區域、道路方向與物件位置。

旋轉校正前的輸入畫面。

旋轉後的影片畫面。
開始處理後,預覽畫面會顯示目前影片的狀態,單部影片與整批影片的進度列也會更新。

介面同時顯示目前影片和整批影片的處理進度。
實際分析結果
下面依序呈現原始畫面、日夜分析結果,以及輸出影片中的偵測影格。

輸出前的原始畫面,可與後續結果對照。
白天與夜間的畫面可以看到不同光線下的偵測框與事件提示。

日間道路畫面中的偵測框與事件提示。

夜間道路畫面中的偵測框與事件提示。
輸出影片中的影格也顯示跨畫面的追蹤結果:同一個車輛或行人會保留 ID,讓人沿著編號觀察物件如何移動。

日間輸出畫面可看到物件編號、偵測框和事件提示。

斑馬線場景中,車輛、行人和斑馬線區域都保留在同一畫面裡。
這些畫面來自桌面程式的實際輸出。可以依照專案說明安裝程式,再選擇影片進行分析。
從影片到事件提示
這個專題把物件偵測、跨畫面追蹤與場景規則接成一個完整流程:先定位行人和車輛,再追蹤移動方向,最後把事件提示寫回影片,供使用者回看確認。桌面介面則把影片選取、角度校正、模型選擇和批次進度整合在一起。