讓「不禮讓行人」變成可回看的事件:YOLOv8 × DeepSORT

從交通影片中的物件偵測、跨畫面追蹤到場景規則,說明大學畢業專題如何產生可回看的事件提示。

3 分鐘閱讀
讓「不禮讓行人」變成可回看的事件: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,讓人沿著編號觀察物件如何移動。

交通違規偵測的日間影片影格

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

交通違規偵測的斑馬線影片影格

斑馬線場景中,車輛、行人和斑馬線區域都保留在同一畫面裡。

這些畫面來自桌面程式的實際輸出。可以依照專案說明安裝程式,再選擇影片進行分析。

從影片到事件提示

這個專題把物件偵測、跨畫面追蹤與場景規則接成一個完整流程:先定位行人和車輛,再追蹤移動方向,最後把事件提示寫回影片,供使用者回看確認。桌面介面則把影片選取、角度校正、模型選擇和批次進度整合在一起。