改用兩段判定取代中位數平滑: 精準實作穩定起步規則
依使用者定義: 穩定起步 = 一段移動連續 >=DEPART_SECONDS(8)秒、且其中沒有 >=STOP_SECONDS(4)秒的 GPS=0。作法: - smooth_speeds 改為只做『讀不到當0 + 物理過濾』,不再做中位數(避免視窗糊掉邊界) - find_keep_intervals 兩段: Pass A 短停(<4s)併入移動; Pass B 短移動(<8s)併入停止 - 移除 depart_min_speed(速度門檻)與中位數,改用零模式判定,更乾淨且邊界精準 - MIN_CONFIDENCE 0.7->0.5(門檻太高會濾掉真實 creep 讀數如 12@0.55) 實測 02: #11(原#9)精準剪到 19:15(符合使用者), #3 保留真起步, #4 排隊龜速全剪。 本次重構由 Claude Opus 4.8 (1M context) 協助處理。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -85,11 +85,9 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
| `progress_every` | `60` | 進度回報間隔(秒),純顯示用,不影響效能 |
|
||||
| `stop_seconds` | `4.0` | 連續停車超過幾秒判定為紅燈 |
|
||||
| `speed_threshold` | `0` | 時速 ≤ 此值視為停止 |
|
||||
| `min_confidence` | `0.7` | OCR 信心低於此值視為「讀不到」(交給平滑用前後判斷)|
|
||||
| `min_confidence` | `0.5` | OCR 信心低於此值視為「讀不到」(當 0);誤讀改由物理過濾與短移動判定處理 |
|
||||
| `max_accel_kmh` | `25` | 物理合理加速上限(km/h 每秒):機車不可能一秒從 4 衝到 70,超過此加速度的讀數視為高信心誤讀丟棄(只擋暴增,煞車減速不受限)|
|
||||
| `smooth_window` | `5` | 中位數濾波視窗(取樣點數) |
|
||||
| `depart_seconds` | `8.0` | 起步門檻(秒):兩段停車間「持續行駛」需達到(滿)此秒數才算起步成功並保留(含這 8 秒);不足者(起步 N 秒內又停)視為仍在等待,連同短暫蠕動一起剪掉(處理車陣走走停停) |
|
||||
| `depart_min_speed` | `15` | 真起步速度門檻(km/h):一段移動要「加速到」此速度才算真起步/行駛而保留(連同前面龜速起點一起留);若整段最高速都低於此(只是排隊龜速、從未真正騎走),整段改判停止剪掉 |
|
||||
| `depart_seconds` | `8.0` | 起步門檻(秒):一段移動要持續達到(滿)此秒數、且其中沒有 ≥`stop_seconds` 的 GPS=0,才算「穩定起步」而保留;不足者(短暫蠕動/排隊龜速/誤讀)併入停止一起剪掉 |
|
||||
| `cut_before_stop` | `2.0` | 進入紅燈端(速度到 0)移除起點再往前幾秒,連減速進站一起砍 |
|
||||
| `keep_after_stop` | `2.0` | 綠燈起步端(速度從 0 開始跑)移除終點提早幾秒,多留卡達起步畫面 |
|
||||
| `min_keep` | `0.8` | 保留片段短於此秒數即丟棄 |
|
||||
@@ -141,7 +139,7 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
1. 用 OpenCV 每隔 N 秒抽一幀
|
||||
2. 裁切出畫面上時速表的固定像素區域(ROI)
|
||||
3. 用 EasyOCR 只辨識數字,讀出當下時速
|
||||
4. 對逐秒時速做平滑濾波(**只對可信讀數取中位數、空白跳過;整個視窗都讀不到才當 0**),停車段的空白被周圍的 0 判成停、行駛段的空白被周圍車速判成動,避免誤剪慢速起步
|
||||
4. 整理每秒速度(**讀不到當 0** + **物理過濾**剔除不可能的暴增誤讀),再用兩段判定:**Pass A** 把 <`stop_seconds` 的停止併入移動(OCR 瞬斷不算紅燈)、**Pass B** 把 <`depart_seconds` 的移動併入停止(沒撐滿就不算穩定起步),不做中位數平滑以免糊掉邊界
|
||||
5. 時速持續為 0 超過門檻 → 判定為等紅燈,標記移除(走走停停會合併、結尾停車砍到底)
|
||||
6. 用 FFmpeg 切割保留片段並拼接(可選淡出淡入轉場 + 音量處理),輸出去紅燈影片
|
||||
7. 另輸出 `*_cut_log.txt` 剪輯紀錄,記下哪些片段被剪、原因
|
||||
|
||||
Reference in New Issue
Block a user