diff --git a/README.md b/README.md index c31f3f3..227a3ee 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV | `speed_threshold` | `0` | 時速 ≤ 此值視為停止 | | `min_confidence` | `0.5` | OCR 信心低於此值視為雜訊 | | `smooth_window` | `5` | 中位數濾波視窗(取樣點數) | -| `depart_seconds` | `8.0` | 起步門檻(秒):兩段停車間「持續行駛」需超過此秒數才算真正起步而保留;否則(起步 N 秒內又停)視為仍在等待,連同短暫蠕動一起剪掉(處理車陣走走停停) | +| `depart_seconds` | `8.0` | 起步門檻(秒):兩段停車間「持續行駛」需達到(滿)此秒數才算起步成功並保留(含這 8 秒);不足者(起步 N 秒內又停)視為仍在等待,連同短暫蠕動一起剪掉(處理車陣走走停停) | | `cut_before_stop` | `2.0` | 進入紅燈端(速度到 0)移除起點再往前幾秒,連減速進站一起砍 | | `keep_after_stop` | `2.0` | 綠燈起步端(速度從 0 開始跑)移除終點提早幾秒,多留卡達起步畫面 | | `min_keep` | `0.8` | 保留片段短於此秒數即丟棄 | diff --git a/auto_remove_redlight.py b/auto_remove_redlight.py index 914ed11..cdce1c8 100644 --- a/auto_remove_redlight.py +++ b/auto_remove_redlight.py @@ -103,9 +103,9 @@ MAX_SPEED = 300 # 合理時速上限,超過視為誤判(雜 SMOOTH_WINDOW = 7 # 中位數濾波視窗(取樣點數,奇數)。7 = 看前後各 3 秒。 # 要夠大才能蓋過「行駛中連續讀不到」的空白(被當0), # 避免把高速行駛誤判成停車(視窗 7 可容忍最多 3 連續空白)。 -DEPART_SECONDS = 8.0 # 起步門檻(秒): 兩段停車中間「持續行駛」需超過此秒數, - # 才算真正起步而保留;否則(起步 N 秒內又停)視為仍在等待, - # 連同那段短暫蠕動一起剪掉(處理車陣走走停停)。 +DEPART_SECONDS = 8.0 # 起步門檻(秒): 兩段停車中間「持續行駛」需『達到(滿)』此秒數, + # 才算真正起步成功並保留(含這 8 秒);不足者(起步 N 秒內又停) + # 視為仍在等待,連同那段短暫蠕動一起剪掉(處理車陣走走停停)。 # --- 剪輯 / 輸出參數 ---------------------------------------- # 紅燈移除段的頭尾「不對稱」微調: @@ -357,13 +357,13 @@ def find_keep_intervals(samples: List[Sample], duration: float, interval: float else: i += 1 - # 2) 合併「中間行駛不超過 DEPART_SECONDS 秒」的相鄰停止段: - # 起步後 N 秒內又停 → 視為仍在等待(車陣走走停停),連那段短暫蠕動一起算停止。 - # 只有行駛「超過」DEPART_SECONDS 才算真正起步,該行駛段才會被保留。 + # 2) 合併「中間行駛不足 DEPART_SECONDS 秒」的相鄰停止段: + # 起步後不到門檻又停 → 視為仍在等待(車陣走走停停),連那段短暫蠕動一起算停止。 + # 行駛「達到(滿)」DEPART_SECONDS 即算起步成功,該行駛段(含這 8 秒)會被保留。 merged_runs: List[List[float]] = [] for run in raw_runs: - if merged_runs and (run[0] - merged_runs[-1][1]) <= DEPART_SECONDS: - merged_runs[-1][1] = run[1] # 行駛 <= 門檻 → 併入前一段停止 + if merged_runs and (run[0] - merged_runs[-1][1]) < DEPART_SECONDS: + merged_runs[-1][1] = run[1] # 行駛 < 門檻 → 併入前一段停止 else: merged_runs.append(list(run))