Skip to content

About

從行車紀錄器影片量測自車速、周圍車輛的距離與時速

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

135 Commits

Folders and files

Repository files navigation

行車紀錄器車速與車距量測

從一般行車紀錄器的影片,量出自己的車速,以及周圍車輛的距離與時速。量不準的情況,系統會直接標示出來,不硬給數字。

政治大學資訊科學系大學部專題,指導教授:彭彥璁老師。題目:以 AI 深度估算模型為基礎的單鏡頭影像行車距離量測方法。

成果展示

多車近距離(10 秒):高速公路上好幾台車開到 6–27 公尺內,每台車都標出距離與時速。

demo_close_traffic.mp4
  • 頂端:自己的車速,由車道虛線量得。
  • 彩色框:大約 32 公尺內的車。框上的數字是「與這台車的距離」和「這台車的時速」。
  • 灰框:距離太遠,量不準,所以不顯示數字。

影像來自 comma2k19 公開資料集(MIT 授權),這台車上裝有原廠雷達,可以拿來對照。這段 10 秒裡,畫面上能和雷達對上的時速標籤共 49 個,誤差都在 10 km/h 以內;自己的車速和車上定位系統平均相差 2.4 km/h。

跟車(10 秒):跟著同一台前車開 10 秒,前車的時速和車上雷達量到的相差約 1 km/h。

demo_following.mp4

選一台車量時速:在任一張畫面上框出一台車,輸入自己的車速,程式算出這台車的距離與時速。

框出正前方的車:8.5 公尺、119 km/h

正前方那台車:程式算出 119 km/h,車上雷達量到 121 km/h。

同一張畫面框五台車,兩台太遠標成白框

  • 彩色框:量得準。框上的數字是「與這台車的距離」和「這台車的時速」。
  • 白框白字:量不準(這兩張都是因為距離太遠),數字只供參考。加上 --hide-unreliable 時,量不準的車不畫出來,也不回傳時速。
  • 自己的車速由使用者輸入(這裡用車上的車速表),所以誤差只來自「兩車距離的變化」這一項。程式在 tools/selected_vehicle_speed.py; 也可以用圖形介面:python tools/selected_vehicle_gui.py,在瀏覽器裡拖時間軸選畫面、填車速、在車上點兩下框車, 也能從選的畫面往前後各追 3 秒,做成標好距離與時速的跟車影片(本車車速逐幀用系統的碼表讀值)。

專題實際處理的台灣案例來自交通事故鑑識案件,影片不公開,所以這裡用公開資料集展示。

做法

  1. 自己的車速:車道虛線的長度和間隔是法規訂的(台灣是 4 公尺線段加 6 公尺間隔,依《道路交通標誌標線號誌設置規則》第 182 條)。程式在畫面上固定的位置看著虛線一段一段經過,算出經過的週期,再換算成車速。這一步不需要知道鏡頭的參數。
  2. 周圍車輛的距離:先用 SHARP(單張影像的 3D 重建模型)從一張畫面重建出路面,得到路面所在的平面。每一張畫面再用 YOLO 找出車輛,以及車輪碰到地面的位置,把這個點投到路面上,就得到距離。比例尺用車道寬校正(取 3.5 公尺;這是設計值不是法定值,《公路路線設計規範》對設計速率 80 km/h 以上的道路訂 3.50–3.75 公尺),前後方向再用「虛線經過畫面不同高度的時間差」校正一次,所以前後距離最後由法定虛線決定。
  3. 周圍車輛的時速:自己的車速,加上兩車距離變化的速度。
  4. 量不準就標示:距離太遠、看不到虛線、正在換車道時,畫面和輸出檔都會註明,不給數字。

準確度

量什麼 怎麼驗證 結果
自己的車速 comma2k19 兩台車、34 段各 1 分鐘的高速公路影片,和車上定位系統比對 平均誤差 2.9 km/h。其中一段是高速公路之間的連接道,虛線間隔和主線不同,這段單獨的誤差是 40 km/h;不算這段時是 2.2 km/h
自己的車速(台灣) 一支國道影片分成 12 段,和人工逐格計算的車速比對 平均誤差 0.7 km/h
自己的車速(台灣) 另一批 8 支影片、28 段,和人工逐格計算的車速比對 平均誤差 1.9 km/h
周圍車輛的距離 comma2k19 三段影片,和車上雷達比對,約 32 公尺內 誤差的中位數 5–7%
周圍車輛的時速 同上 平均誤差 3.5 km/h
32 公尺外的距離 同上 誤差約 20%,所以畫面不顯示數字

怎麼解讀:

  • 距離誤差 7%,代表雷達量到 20 公尺時,我們的結果大約落在 18.6–21.4 公尺。
  • 距離誤差寫成 5–7%,是因為雷達從車頭量起、我們從擋風玻璃後的鏡頭量起,兩者的起點差約 1.5–2.3 公尺。直接比是 7.0%,扣掉起點差是 5.1–5.8%。
  • comma2k19 的第一台車在開發時就用過。完全沒用來調整程式的第二台車,15 段的平均誤差是 4.2 km/h,其中包含上面那段連接道。

每個數字用了哪些資料、怎麼算,見 docs/VALIDATION_STATUS.md。

已知限制

  • 32 公尺外的距離偏差約 20%,只標示,不給數字。
  • 一支影片如果跨過不同種類的道路(例如從市區道路開上高速公路),虛線間隔會變,車速會在交界處算錯。
  • 夜間車燈照到的反光路釘比漆線還亮,會干擾虛線訊號,夜間誤差比白天大。
  • 影片每秒的張數要夠多:每經過一段虛線,至少要拍到約 8 張。以 10 公尺的虛線、時速 100 公里來說,每秒至少要 22 張。
  • 從旁邊擦身而過的車,車輪碰地的位置會沿著車身移動,只能給距離,不能給時速。

完整清單見 docs/FAILURE_BOUNDARIES.md。

早期工作:路口監視器測速

專題一開始以為固定式路口監視器(CCTV)比較好做,先完成了監視器測速:用路面的法定標線當比例尺,用畫面上的時鐘校正時間。後來發現 CCTV 畫面問題太多(畫質模糊、幀率過低、車輛離鏡頭太遠),改做行車紀錄器。程式在 tools/cctv_speed_estimation.py,成果在 data/output/report_final/,保留但不再更新。

成員與分工

  • 指導教授:彭彥璁老師(政治大學資訊科學系)
  • chennnlee:行車紀錄器量測系統(自己的車速、周圍車輛的距離與時速、多車追蹤)、公開資料集與雷達驗證、路口監視器測速
  • Terry(terrytjh):研究架構與文獻整理、單眼深度模型比較、標線幾何測距(以車道線消失點求地平線)、Argoverse 2 等外部驗證、海盛人工真值比對。之後的工作在 terrytjh/Monocular-Depth-Vehicle-Distance
  • 題目與台灣案例:海盛科技

怎麼重跑

  • 只用公開資料集、不需要 3D 重建的完整路徑,以及每項結果的預期數字:REPRODUCE.md
  • 套件:pip install -r requirements.txt,另外需要 ffmpeg
  • 首頁示範影片的產生方式:先用 tools/dashcam_range_speed.py 量測一段 comma2k19 影片,再用 tools/report/render_demo_video.py 畫成中文畫面。後者只畫圖、不重新量測,參數寫在檔案開頭的說明裡。

各工具的用途、輸出資料夾與其他文件的說明,見 docs/REPO_GUIDE.md。

About

從行車紀錄器影片量測自車速、周圍車輛的距離與時速

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages