scripts-old-test/ 是目前主要影片推理流程,負責整合 YOLO actor tracking、RTDETR litter detection、litter 軌跡確認、丟擲者反追蹤、STGCN 動作辨識、車牌 OCR、影片輸出與耗時摘要。
conda run -n rtdetr python scripts-old-test/main.py TThrow.mp4 --batch 1
conda run -n rtdetr python scripts-old-test/main.py TThrow.mp4 --batch 2影片檔預設從 resources/ 讀取,輸出到 output/{影片名}_annotated.mp4。
--batch 1 使用一般單幀模式:
- YOLO actor model:
modules_weight/best-yolo-seg_v3.pt - RTDETR litter model:
modules_weight/best-rtdetr-seg.pt
--batch 2 使用 batch-2 模式:
- YOLO actor model:
modules_weight/batch/best-yolo-seg_v3.pt - RTDETR litter model:
modules_weight/batch/best-rtdetr-seg.pt
若同位置存在 TensorRT engine,main.py 會優先載入:
- batch 1:
*.engine - batch 2:
*_b2.engine
可用 --no-engine 強制使用 .pt。也可用 --bbox-model / --trash-model 手動覆蓋預設路徑。
--batch {1,2}: 選擇單幀或 batch-2 推理。--bbox-conf: YOLO actor 信心門檻,預設0.45。--trash-conf: RTDETR litter 信心門檻,預設0.4。--yolo-seg-frame-skip: 每 N 幀跑一次 YOLO actor tracking,其餘幀沿用快取。--disable-action: 關閉 STGCN 動作辨識。--action-threshold: STGCN 判定littering的分數門檻,預設0.5。--disable-plate: 關閉車牌偵測與 OCR。--skip-plate-preload: 不在影片開始前預載車牌模型。--disable-speed-filter: 關閉車輛速度相關過濾。
main.py
- 解析 CLI 參數。
- 依
--batch自動選擇 batch 1 或 batch 2 model path。 - 優先嘗試 TensorRT engine,失敗或不存在時回退
.pt。 - 預載並 warmup YOLO、RTDETR、STGCN、車牌模型。
- 讀取影片、建立前景遮罩、呼叫
detect()或detect_batch()。 - 寫入暫存 AVI,最後用 ffmpeg 壓成 MP4。
- 在暫存檔清理後輸出分段耗時摘要。
detect.py
- 管理單幀與批次偵測流程。
- 從 YOLO tracking 解析
person / scooter / vehicle。 - 建立 person-to-vehicle 關聯。
- 執行 RTDETR litter detection。
- 對 litter 做 motion filter 與 holding filter。
- 呼叫
GlobalLitterTracker更新 pending/confirmed 狀態。 - 渲染 actor、violator、confirmed litter、STGCN 分數與車牌。
litterTracker.py
- 維護 active litter 軌跡、missed frame、shape reference 與
pending / confirmed狀態。 - 使用物理軌跡與向下位移確認 litter。
- 以 pseudo-ground homography 估計最可能 thrower。
- confirmed 後標記 person / vehicle / scooter 違規者,並用 TTL 維持畫面紅框。
smallFunction.py
- 提供 motion check、IoU、polygon overlap、holding 判斷與
validate_trajectory()。 litter_holding()是 polygon-aware gate,負責判斷 litter 是否仍貼在人車上。
action.py
- 封裝 YOLO pose + STGCN++。
- 累積每個 person track 的骨架序列。
- 當動作為
littering且分數達action_threshold時,回傳 alert。
licensePlate.py
- 只對已鎖定違規車輛派工。
- 背景 thread 執行車牌 YOLO 與 PaddleOCR。
- OCR 結果寫回
vehicle_history,供畫面顯示。
timeUtils.py
- 提供
PipelineProfiler與profile_block()。 - 支援中文欄位寬度對齊。
- 最後輸出模型載入、影片處理、影像寫入與瓶頸 Top 3。
export_tensorrt.py
- 匯出 YOLO actor 與 RTDETR litter 的 TensorRT engine。
- 預設支援 batch 2,輸出檔名會是
*_b2.engine。
main.py讀取 frame,並用 MOG2 背景減除器產生前景遮罩。detect.py執行 YOLO actor tracking,或依--yolo-seg-frame-skip沿用 actor 快取。- 解析 actor bbox、track id、class name 與 segmentation polygon。
- 建立 person 與 vehicle/scooter 的 IoU 對應。
- 選擇性執行 STGCN 動作辨識。
- RTDETR 對全圖偵測 litter。
- litter 候選先通過 motion filter 與 holding filter。
GlobalLitterTracker更新 litter 軌跡與 confirmed 狀態。- confirmed 後反推 thrower,標記 person / vehicle / scooter 違規者。
- 車牌流程只對違規車輛派工。
- 渲染紅框、confirmed litter、STGCN 分數與車牌。
RTDETR 只負責提出 litter bbox 候選,不能直接當 confirmed。候選進 tracker 前會先被 detect.py 過濾:
- 只接受 class name 為
litter的結果。 - 過濾極端長寬比與過小 bbox,避免明顯雜訊進入 tracker。
- 使用前景遮罩檢查 litter bbox 內的 moving pixel ratio。
- 對較大的 litter bbox 再檢查核心區域 motion,避免旁邊人車移動誤觸發舊垃圾。
- 從既有 tracker 找最近上一幀 litter center。
- 若是新出現 litter,先放入 tracker 建立 pending history anchor。
- 若已有上一幀中心,呼叫
litter_holding()判斷是否仍被人、車或機車持有。
litter_holding() 會用 actor bbox、segmentation polygon、litter 位移、車輛位移與相對速度判斷是否仍是 holding:
- litter anchor 在 actor polygon 內,通常視為仍被持有。
- litter 貼近 vehicle/scooter mask 底部或側邊時,若沒有明確 release motion,視為 holding。
- vehicle release 需要向下位移、水平位移、相對車體分離或明確絕對位移。
- 靜止 litter 加上車輛仍在移動時,不視為 holding,避免地上垃圾被移動車輛黏住。
- 通過 holding gate 後,litter 才會交給 tracker。
GlobalLitterTracker.update() 會把通過前處理的 litter 串成軌跡:
- 以中心距離與尺寸一致性配對既有 active litter。
- 新 litter 建立
pending狀態,記錄 bbox、history、shape 與出生幀 thrower。 - pending 更新時累積中心點 history,並重新評估最可能 thrower。
- confirmed 需要足夠觀測幀數與向下位移。
- confirmed 可由兩條路成立:
validate_trajectory()通過:軌跡平滑、總位移足夠、Y 軸往下。- motion route 通過:位移明顯、Y 軸往下、且能關聯到 thrower。
- confirmed 後才會在畫面畫出紫色
Litter {id} (confirmed)。
confirmed 後會進入違規者後處理:
- tracker 用 pseudo-ground homography 估計 litter 與 actor 的地面距離。
- 選出最可能 thrower,寫入 violator TTL cache。
- 若 thrower 是 person,且曾與 vehicle/scooter 有 IoU 關聯,會同步標記該車輛。
- 違規者用紅框顯示,TTL 期間可容忍短暫 miss。
- 若 tracking ID 短暫切換,會以同類別近距離 rebind 延續違規標記。
- 車牌辨識只對已鎖定違規車輛執行,避免每幀掃描所有車輛。