:從像素位移到真實(shí)車速的標(biāo)定與換算)
簡(jiǎn)介面向智能交通管理與交通事故鑒定的技術(shù)文檔這份 docx 系統(tǒng)梳理了基于視頻圖像的車速檢測(cè)方法。傳統(tǒng)測(cè)速只能測(cè)量碰撞瞬間速度難以反映碰撞前駕駛員制動(dòng)造成的真實(shí)車速該方案通過(guò)監(jiān)控視頻中車輛位移與時(shí)間差的比值配合攝像機(jī)標(biāo)定、圖像坐標(biāo)到實(shí)際路面的三維映射得到更貼近事實(shí)的事前車速。全文從測(cè)速原理出發(fā)依次介紹車速檢測(cè)系統(tǒng)總體構(gòu)架、CCD 攝像機(jī)與視頻采集卡等硬件組成以及視頻采集、圖像預(yù)處理、背景提取、車輛檢測(cè)、目標(biāo)跟蹤、速度計(jì)算等軟件模塊并重點(diǎn)對(duì)比了虛擬線圈、車牌定位、特征匹配、運(yùn)動(dòng)矢量、幀差等常見(jiàn)方法的實(shí)現(xiàn)思路與適用特點(diǎn)。資源包為單文件 docx 文檔壓縮后約 24KB內(nèi)容結(jié)構(gòu)完整、術(shù)語(yǔ)明確適合交通工程、計(jì)算機(jī)視覺(jué)學(xué)習(xí)者和事故分析人員快速建立視頻測(cè)速技術(shù)框架。目前已有 146 人瀏覽學(xué)習(xí)對(duì)入門(mén)智能交通測(cè)速應(yīng)用具有較直接的參考價(jià)值。1. 視頻圖像車速檢測(cè)從像素位移到真實(shí)車速的換算問(wèn)題兩幀視頻放在你面前一輛車在畫(huà)面里移動(dòng)了200像素它的車速是多少第一次做這件事的工程師會(huì)脫口而出200像素乘以幀率再乘一個(gè)固定比例。但這個(gè)比例在畫(huà)面里根本不是常數(shù)——近處一米的標(biāo)線能占幾百像素遠(yuǎn)處一米可能只有幾十像素鏡頭還帶透視和仰角。視頻圖像車速檢測(cè)真正要解決的不是“檢測(cè)”而是把像素位移映射回路面上的米再除以時(shí)間。這篇筆記按“原理框架 → 標(biāo)定換算 → 檢測(cè)跟蹤 → 速度計(jì)算 → 現(xiàn)場(chǎng)避坑 → 精度校驗(yàn)”的順序展開(kāi)適合正在評(píng)估用攝像頭替代雷達(dá)和線圈測(cè)速的安防、交通、園區(qū)巡檢工程師也適合被用戶追問(wèn)“監(jiān)控視頻能不能算車速”的產(chǎn)品和技術(shù)負(fù)責(zé)人??赐昴銜?huì)知道哪條路線能落地、參數(shù)怎么定、誤差從哪里來(lái)以及不依賴?yán)走_(dá)怎么做一次現(xiàn)場(chǎng)驗(yàn)收。2. 先搭好原理框架幀差法、光流法與目標(biāo)跟蹤三條路視頻車速檢測(cè)的方法名字很多但歸納起來(lái)就三條路幀差法、光流法、目標(biāo)跟蹤法。選錯(cuò)路線后面加再多模型都是白費(fèi)力氣所以先把這三條路的適用邊界講清楚。2.1 幀差法只適合施工區(qū)預(yù)警不適合取證級(jí)測(cè)速幀差法把相鄰幀的灰度圖像做差分用 |I(x,y,t) - I(x,y,t-1)| T 判定運(yùn)動(dòng)像素T一般取30到50。把所有運(yùn)動(dòng)像素的重心當(dāng)成目標(biāo)位置重心在圖像里的位移除以幀間隔再乘一個(gè)標(biāo)定系數(shù)就是速度。它的實(shí)時(shí)性極好單幀處理只要幾十微秒普通IPC都能跑所以很多“電子狗”“車速預(yù)警屏”用的就是這類方案。但幀差法有兩個(gè)硬傷。第一它給的是運(yùn)動(dòng)區(qū)域的“平均速度”畫(huà)面里多輛車速度不一致時(shí)運(yùn)動(dòng)像素全都黏在一起分不出單車。第二車輛顏色與路面灰度接近時(shí)差分不到目標(biāo)夜間大燈一照又是一片高亮的過(guò)曝區(qū)速度被光斑膨脹帶著跑。幀差法還有一個(gè)工程化變體叫“虛擬線圈”在畫(huà)面上畫(huà)兩條垂直于車道的線記錄車頭前沿壓過(guò)第一根線和第二根線的幀號(hào)用兩線的實(shí)際距離除以時(shí)間差算出速度。這個(gè)做法實(shí)現(xiàn)成本極低施工區(qū)預(yù)警足夠。我一般只在“提示來(lái)車速度并閃光提醒”的場(chǎng)合用它做取證級(jí)測(cè)速它扛不住。2.2 光流法像素級(jí)運(yùn)動(dòng)場(chǎng)算力需求和遮擋問(wèn)題并存光流法計(jì)算圖像中每個(gè)像素或特征點(diǎn)的運(yùn)動(dòng)向量形成運(yùn)動(dòng)場(chǎng)。把車輛區(qū)域內(nèi)的光流向量的長(zhǎng)度做平均再投影到車道方向就是車速。常用的是稀疏光流Lucas-Kanade只跟蹤角點(diǎn)速度尚可密集光流精度高但一塊1080P畫(huà)面跑起來(lái)GPU占用經(jīng)常直接吃滿。我??吹降墓饬鲄?shù)是 maxCorners200、qualityLevel0.01、minDistance5、winSize(21,21)。這套參數(shù)在桌面演示環(huán)境沒(méi)大問(wèn)題但視頻測(cè)速場(chǎng)景里車體往往是同色系大面積平面角點(diǎn)本來(lái)就少車輛幀間位移大時(shí)光流迭代很容易發(fā)散。加上夜間路燈頻閃破壞“亮度恒定”假設(shè)光流矢量里混進(jìn)大量噪聲速度曲線會(huì)穩(wěn)定一段時(shí)間后突然亂跳。這種“有規(guī)律的失靈”在交付現(xiàn)場(chǎng)最難解釋所以我只把它當(dāng)輔助驗(yàn)證手段用光流和目標(biāo)跟蹤法交叉核對(duì)不單獨(dú)作為測(cè)速主通道。2.3 目標(biāo)跟蹤法目前工程落地的主流也是后續(xù)幾章的焦點(diǎn)目標(biāo)跟蹤法的鏈路是先用檢測(cè)模型框出車輛再用跟蹤算法給每輛車分配穩(wěn)定ID記錄檢測(cè)框底邊中點(diǎn)在畫(huà)面中的坐標(biāo)序列經(jīng)過(guò)透視變換映射到路面世界坐標(biāo)相鄰兩幀的世界坐標(biāo)距離除以時(shí)間差就是速度。寫(xiě)成公式就是 v ||W(t) - W(t-1)|| / dtW是路面坐標(biāo)dt是兩幀時(shí)間差。它有三個(gè)不可替代的優(yōu)勢(shì)能區(qū)分每一輛車雙向多車道同時(shí)輸出單車速度對(duì)光照有一定魯棒性白天夜間不至于完全失效能直接給出軌跡后續(xù)擴(kuò)展到逆行、停車、車道占用都順手。代價(jià)是需要GPU或性能好一點(diǎn)的NPU來(lái)跑檢測(cè)模型系統(tǒng)復(fù)雜度明顯高于前兩種。所以結(jié)論很直接要做“基于視頻圖像的車速檢測(cè)方法分析”并真正落地選“檢測(cè) 跟蹤 透視換算”是風(fēng)險(xiǎn)最低的路線。下面三章按這條主線往下走。3. 相機(jī)標(biāo)定與透視變換把像素距離換算成米的唯一正路方法分析里最容易被新手跳過(guò)的恰恰是最要命的標(biāo)定。沒(méi)有標(biāo)定檢測(cè)模型再準(zhǔn)速度數(shù)字也是錯(cuò)的標(biāo)定錯(cuò)一點(diǎn)后面全部白做。3.1 單應(yīng)性矩陣近大遠(yuǎn)小是怎么被糾正的圖像平面上的像素點(diǎn) (u,v) 和路面上的真實(shí)世界點(diǎn) (X,Y,0) 之間在相機(jī)固定、路面近似平面的前提下滿足一個(gè)3x3矩陣關(guān)系也就是單應(yīng)性矩陣 H。它把像素坐標(biāo)直接映射到路面坐標(biāo)這也是“不能直接按像素比例算速度”的數(shù)學(xué)依據(jù)比例系數(shù) k 不是常數(shù)它隨深度變化畫(huà)面下方和上方的 k 能差出好幾倍。這里有兩個(gè)隱藏前提。一是路面要能近似看作平面顛簸的施工路段平面假設(shè)失效速度誤差會(huì)變大二是鏡頭畸變要先校正否則畫(huà)面邊緣的像素位置本身就不準(zhǔn)。常見(jiàn)做法是先拍一個(gè)棋盤(pán)格求出畸變系數(shù)在流程里先對(duì)每一幀做去畸變?cè)偎偷綔y(cè)速鏈路。視場(chǎng)角比較小的卡口鏡頭畸變影響沒(méi)那么大四點(diǎn)標(biāo)定后也可以先直接跑發(fā)現(xiàn)邊緣誤差大再回來(lái)補(bǔ)畸變校正。3.2 四點(diǎn)標(biāo)定的取點(diǎn)步驟與參數(shù)表最常見(jiàn)的落地做法是車道四點(diǎn)標(biāo)定在車道內(nèi)選四個(gè)點(diǎn)量出路面上的真實(shí)世界坐標(biāo)從畫(huà)面里讀出對(duì)應(yīng)的像素坐標(biāo)四對(duì)對(duì)應(yīng)點(diǎn)求 H 矩陣。具體操作是選一條直線車道畫(huà)面下方取兩個(gè)點(diǎn) A、B相隔約5米再向遠(yuǎn)處取兩個(gè)點(diǎn) C、D也相隔5米并且 A-C、B-D 在路面方向平行。真實(shí)坐標(biāo)可以自定義原點(diǎn)例如 A(0,0)B(5,0)C(0,20)D(5,20)單位米。步驟操作注意點(diǎn)1暫停視頻確定目標(biāo)車道優(yōu)先選直線段避開(kāi)彎道和坡道2在路面標(biāo)記 A/B/C/D用卷尺量真實(shí)坐標(biāo)記錄順序3在畫(huà)面中點(diǎn)出四個(gè)像素坐標(biāo)順序必須與真實(shí)點(diǎn)順序一致4調(diào)用 cv2.getPerspectiveTransform輸入兩組 float32 坐標(biāo)數(shù)組5驗(yàn)證 H把圖像坐標(biāo)投影回世界投影結(jié)果應(yīng)落回原真實(shí)坐標(biāo)附近提示標(biāo)定點(diǎn)不要全擠在畫(huà)面底部測(cè)速區(qū)域有多遠(yuǎn)標(biāo)定點(diǎn)就要覆蓋多遠(yuǎn)。下面是四點(diǎn)標(biāo)定加透視映射的核心代碼可以直接放到測(cè)速流程里。import cv2 import numpy as np # 圖像中的四個(gè)點(diǎn)順序與下方真實(shí)點(diǎn)一一對(duì)應(yīng) img_pts np.float32([ [120, 860], # A畫(huà)面下方左側(cè)車道左邊緣 [560, 860], # B畫(huà)面下方右側(cè)車道右邊緣 [300, 420], # C畫(huà)面上方左側(cè)遠(yuǎn)處車道左邊緣 [680, 420] # D畫(huà)面上方右側(cè)遠(yuǎn)處車道右邊緣 ]) # 路面上對(duì)應(yīng)的四個(gè)真實(shí)坐標(biāo)單位統(tǒng)一為米 world_pts np.float32([ [0.0, 0.0], # A原點(diǎn) [5.0, 0.0], # B橫向5米基本覆蓋一個(gè)車道寬度 [0.0, 20.0], # C縱向20米 [5.0, 20.0] # D縱向20米橫向5米 ]) # 求單應(yīng)性矩陣把像素坐標(biāo)映射到路面坐標(biāo) H cv2.getPerspectiveTransform(img_pts, world_pts) def pixel_to_world(u, v): # 齊次坐標(biāo)轉(zhuǎn)換 vec np.linalg.solve(H, np.array([u, v, 1.0])) vec vec / vec[2] return vec[0], vec[1]這段代碼里getPerspectiveTransform輸出一個(gè)3x3矩陣 H。pixel_to_world把像素坐標(biāo)寫(xiě)成齊次向量左乘 H 的逆用np.linalg.solve而不是直接inv(H)點(diǎn)乘數(shù)值會(huì)更穩(wěn)定歸一化后取前兩位得到路面 X、Y。世界坐標(biāo)單位統(tǒng)一用米算出來(lái)的速度天然是米/秒乘以3.6就是km/h。四個(gè)點(diǎn)的順序如果有一組反了H 算出來(lái)是錯(cuò)亂映射先檢查坐標(biāo)順序再懷疑代碼。3.3 標(biāo)定的誤差傳播特性透視變換在畫(huà)面不同位置的“放大率”不同這是標(biāo)定誤差傳播的根源。近處一像素投影到路面可能只有幾毫米遠(yuǎn)處一像素可能對(duì)應(yīng)幾十厘米。也就是說(shuō)取標(biāo)定點(diǎn)時(shí)哪怕偏一兩個(gè)像素遠(yuǎn)處測(cè)速區(qū)域的誤差會(huì)被放大好幾倍。因此標(biāo)定有一個(gè)原則測(cè)速越遠(yuǎn)的區(qū)域標(biāo)定點(diǎn)越要靠近那個(gè)區(qū)域?qū)幙煽s短測(cè)速區(qū)間也要保證每個(gè)點(diǎn)的像素坐標(biāo)手工點(diǎn)得準(zhǔn)。我一般會(huì)在標(biāo)定后做一個(gè)網(wǎng)格檢查在路面坐標(biāo)里每隔5米生成一條線投影回畫(huà)面觀察網(wǎng)格是否均勻分布在車道上不均勻就重新取點(diǎn)。這個(gè)動(dòng)作十分鐘內(nèi)能完成卻能省掉后面“測(cè)速為什么整體偏快”的半天排查時(shí)間。透視變換的正確性是速度數(shù)字的絕對(duì)基準(zhǔn)也是整個(gè)方案里最不該當(dāng)“黑匣子”帶過(guò)的環(huán)節(jié)。4. 用檢測(cè)跟蹤實(shí)現(xiàn)單車測(cè)速最小可復(fù)現(xiàn)流程拆解方法分析落到工程常見(jiàn)做法是“檢測(cè)模型給目標(biāo)框、跟蹤模型給穩(wěn)定ID、單應(yīng)性給路面坐標(biāo)”三段式。下面按這個(gè)順序拆出可復(fù)現(xiàn)的流程和關(guān)鍵參數(shù)。4.1 車輛檢測(cè)環(huán)節(jié)模型選型與兩個(gè)關(guān)鍵參數(shù)檢測(cè)部分用YOLO系列是主流。項(xiàng)目中選 YOLOv5s 或更輕的 YOLOv8n 都能做重點(diǎn)看算力一張1080P畫(huà)面YOLOv5s 在 GTX 1660 上大概3到5毫秒一幀足夠跑實(shí)時(shí)。類別只保留 car、truck、bus其余全部過(guò)濾避免行人、自行車干擾測(cè)速區(qū)域。兩個(gè)直接決定測(cè)速質(zhì)量的關(guān)鍵參數(shù)是置信度閾值和NMS閾值。置信度設(shè)太高夜間小目標(biāo)和弱光車輛會(huì)被漏檢設(shè)太低一個(gè)檢測(cè)框套著另一個(gè)跟蹤時(shí)ID亂跳。我常用的起點(diǎn)是 conf0.35、iou0.45夜間場(chǎng)景把 conf 降到0.25同時(shí)把跟蹤器的容忍度調(diào)大。還有一個(gè)容易被忽略的細(xì)節(jié)測(cè)速用的特征點(diǎn)要取檢測(cè)框的底邊中點(diǎn)因?yàn)榈走呝N近地面透視變換映射的正是路面平面。取框中心的話車身高度的投影誤差會(huì)整體偏移速度會(huì)帶系統(tǒng)偏差。4.2 DeepSORT ID穩(wěn)定測(cè)速連續(xù)性的關(guān)鍵檢測(cè)是每幀獨(dú)立的如果不做跟蹤同一輛車在下一幀被重新檢測(cè)出來(lái)時(shí)你無(wú)法判斷它與前一幀的哪輛車對(duì)應(yīng)速度就無(wú)從談起。DeepSORT 的思路是先用卡爾曼濾波預(yù)測(cè)每個(gè)ID的位置再用匈牙利算法把新檢測(cè)框和已有ID做匹配。這里有兩個(gè)必調(diào)參數(shù)值得專門(mén)說(shuō)明。第一個(gè)是 max_ageID丟失后保留的幀數(shù)。交通場(chǎng)景建議設(shè)為 fps 的一半到一倍25fps 視頻就設(shè)15到25。設(shè)太大會(huì)出現(xiàn)車頭車尾對(duì)調(diào)后誤繼承ID太小則車輛被短暫遮擋后ID直接釋放速度序列從頭再來(lái)。第二個(gè)是 max_cosine_distance控制外觀特征的重匹配寬松度車輛同色率很高0.2 是常見(jiàn)起點(diǎn)調(diào)太小會(huì)把同一輛車不同角度誤判成兩個(gè)ID。調(diào)試跟蹤器有個(gè)土辦法把每個(gè)ID的中心點(diǎn)軌跡畫(huà)在輸出視頻上如果軌跡出現(xiàn)“斷裂后重新續(xù)接”或“兩個(gè)軌跡交叉后目標(biāo)互換”說(shuō)明跟蹤參數(shù)不合適。先調(diào) max_age再調(diào)特征距離。ID一旦切換速度序列必須重新累積這是測(cè)速不準(zhǔn)的最大來(lái)源之一。4.3 速度計(jì)算與濾波一段能直接跑的核心代碼把前面幾步串起來(lái)下面是這個(gè)流程里最核心的速度計(jì)算代碼。它接收某個(gè)跟蹤ID的底邊中點(diǎn)像素坐標(biāo)換成世界坐標(biāo)再通過(guò)幀間位移除以時(shí)間差得到速度。import numpy as np # 記錄每個(gè)track_id最近一次的世界坐標(biāo)、時(shí)間戳和濾波后的速度 track_buffer {} def estimate_speed(track_id, u, v, timestamp, alpha0.5): 輸入跟蹤ID、底邊中點(diǎn)像素坐標(biāo)(u,v)、當(dāng)前時(shí)間戳(秒) 輸出濾波后的車速(km/h)首次出現(xiàn)的ID返回None wx, wy pixel_to_world(u, v) # 上一步的透視變換接口 if track_id in track_buffer: pre_wx, pre_wy, pre_t, _ track_buffer[track_id] dt timestamp - pre_t if dt 0: return None # 世界坐標(biāo)位移單位米 dist np.hypot(wx - pre_wx, wy - pre_wy) speed_ms dist / dt # 米/秒 speed_kmh speed_ms * 3.6 # 轉(zhuǎn)成km/h # 一階低通濾波抑制檢測(cè)框抖動(dòng)帶來(lái)的毛刺 filtered alpha * speed_kmh (1 - alpha) * track_buffer[track_id][3] track_buffer[track_id] [wx, wy, timestamp, filtered] return filtered track_buffer[track_id] [wx, wy, timestamp, None] return None邏輯說(shuō)明先把當(dāng)前幀底邊中點(diǎn)坐標(biāo)通過(guò)pixel_to_world投影到路面坐標(biāo)再拿當(dāng)前坐標(biāo)、時(shí)間戳與該ID上一次出現(xiàn)的記錄做差得到幀間位移和時(shí)間差速度單位從米/秒換算成km/h最后做一階低通濾波。這里alpha0.5表示當(dāng)前速度占一半、歷史速度占一半能有效抹平檢測(cè)框抖動(dòng)帶來(lái)的測(cè)量噪聲。參數(shù)使用上有三個(gè)值得注意的點(diǎn)。第一時(shí)間戳不要用“幀序號(hào)除以fps”IPC的幀間隔并不嚴(yán)格均勻卡頓時(shí)會(huì)突然跳幀推薦用cap.get(cv2.CAP_PROP_POS_MSEC)或系統(tǒng)時(shí)間戳否則會(huì)在跳幀處算出一個(gè)巨大的假速度。第二速度序列里偶爾出現(xiàn)的極端值比如瞬時(shí)位移跳到十幾米要先做合理性過(guò)濾只保留0到180km/h范圍內(nèi)的速度再送進(jìn)濾波器不然一個(gè)臟數(shù)據(jù)會(huì)讓之后好幾幀都偏高。第三測(cè)速區(qū)域只取標(biāo)定點(diǎn)覆蓋的路面范圍區(qū)域外坐標(biāo)是外推結(jié)果誤差隨距離快速增長(zhǎng)別貪遠(yuǎn)。這些每一條都是現(xiàn)場(chǎng)攢出來(lái)的血淚經(jīng)驗(yàn)。5. 視頻車速檢測(cè)避坑5個(gè)讓精度翻車的真實(shí)問(wèn)題流程全對(duì)不代表現(xiàn)場(chǎng)能過(guò)。下面五個(gè)問(wèn)題是實(shí)際項(xiàng)目里出現(xiàn)頻率最高的每個(gè)都按“現(xiàn)象、原因、解決”拆開(kāi)講。5.1 標(biāo)定誤差測(cè)速整體偏快或偏慢的隱形黑洞現(xiàn)象系統(tǒng)輸出的速度與雷達(dá)對(duì)比整體偏高或偏低固定比例。雷達(dá)顯示60系統(tǒng)顯示66雷達(dá)顯示85系統(tǒng)顯示94比例始終不變。原因標(biāo)定點(diǎn)像素坐標(biāo)有系統(tǒng)性偏差比如四點(diǎn)都向外偏了5個(gè)像素H矩陣產(chǎn)生整體縮放誤差所有速度都按比例放大。另一個(gè)常見(jiàn)原因是路面有橫坡取世界坐標(biāo)時(shí)沒(méi)有把高度歸零平面假設(shè)直接失效。解決回到現(xiàn)場(chǎng)重新取點(diǎn)并用3.3的網(wǎng)格法驗(yàn)證。如果只有一個(gè)機(jī)位的畫(huà)面優(yōu)先檢查遠(yuǎn)端的兩個(gè)點(diǎn)是否選在車道遠(yuǎn)端遠(yuǎn)點(diǎn)誤差對(duì)H的影響遠(yuǎn)大于近點(diǎn)。標(biāo)定一次十分鐘不標(biāo)定現(xiàn)場(chǎng)驗(yàn)收時(shí)能讓你排查三天。5.2 夜間逆光檢測(cè)模型集體翻車的時(shí)段現(xiàn)象白天測(cè)速誤差在±3km/h以內(nèi)天一黑進(jìn)隧道或路燈切換檢測(cè)框忽大忽小速度抖動(dòng)到?jīng)]法看夜間完全不敢輸出。原因大燈在畫(huà)面上形成高光區(qū)域檢測(cè)模型把高光誤識(shí)別成車路燈頻閃破壞幀間亮度一致性跟蹤的外觀特征也變了。YOLO一到夜間召回率下降10到20個(gè)百分點(diǎn)論文里不顯眼現(xiàn)場(chǎng)一測(cè)就露餡。解決分三個(gè)層次處理。第一置信度閾值降到0.2到0.25盡量抓住弱特征車輛。第二畫(huà)面做局部直方圖均衡后再進(jìn)檢測(cè)器但要多占算力。第三實(shí)在不行的白天啟用測(cè)速、夜間降級(jí)為預(yù)警模式。老實(shí)告訴用戶“夜間視頻測(cè)速只能輔助”比硬撐一個(gè)虛標(biāo)精度要體面得多。5.3 車輛遮擋導(dǎo)致ID切換速度從120瞬間變0現(xiàn)象大貨車慢速經(jīng)過(guò)后方小車被完全遮擋后跟蹤ID丟失小車重新出現(xiàn)時(shí)已經(jīng)有了新ID速度輸出瞬時(shí)跳變從120直接歸零再重新累加。原因DeepSORT的 max_age 設(shè)得太短遮擋幀數(shù)超過(guò) max_age 后ID被釋放等遮擋結(jié)束新檢測(cè)框與舊ID的外觀特征距離又太大匹配不上只能新建ID。解決先把遮擋平均時(shí)長(zhǎng)統(tǒng)計(jì)出來(lái)把 max_age 提高到能覆蓋這個(gè)時(shí)長(zhǎng)。25fps視頻若遮擋持續(xù)2秒max_age就設(shè)50。同時(shí)在速度輸出前加一條規(guī)則相鄰幀速度突變超過(guò)±40km/h時(shí)只有連續(xù)保持3幀以上才算有效單幀突變直接丟棄。這條規(guī)則能擋住大部分ID切換造成的臟數(shù)據(jù)。5.4 立桿風(fēng)振與幀率抖動(dòng)速度曲線周期性鋸齒現(xiàn)象輸出速度在真實(shí)值附近周期性抖動(dòng)抖動(dòng)周期和畫(huà)面晃動(dòng)周期一致或者視頻里每播放一小段就出現(xiàn)一個(gè)規(guī)律性尖峰。原因攝像機(jī)裝在立桿或門(mén)架上風(fēng)大時(shí)畫(huà)面有亞像素級(jí)晃動(dòng)IPC在弱網(wǎng)或碼率波動(dòng)下幀間隔不均勻按固定fps當(dāng)時(shí)間間隔算就會(huì)在跳幀處產(chǎn)生假速度。解決測(cè)速前先做全局配準(zhǔn)用畫(huà)面里的靜止物體估計(jì)全局偏移并消除時(shí)間計(jì)算一律用時(shí)間戳不用固定fps。現(xiàn)場(chǎng)確認(rèn)是機(jī)械風(fēng)振的話給立桿加抱箍阻尼是最便宜的方案比任何軟件濾波都有效。5.5 跟車和大車車尾測(cè)速區(qū)域外的車輛算不準(zhǔn)現(xiàn)象小車緊貼大貨車行駛系統(tǒng)輸出的小車速度一直和大貨車相同偶爾還出現(xiàn)負(fù)值一看就是被大車遮擋或檢測(cè)框消失導(dǎo)致。原因小車被大車完全遮擋檢測(cè)框被NMS抑制或者小車位于畫(huà)面遠(yuǎn)端超出標(biāo)定區(qū)域透視外推誤差被放大幀間世界坐標(biāo)距離失真。解決在畫(huà)面里畫(huà)虛擬測(cè)速區(qū)只對(duì)底邊中點(diǎn)落在測(cè)速區(qū)內(nèi)的車輛計(jì)算速度。跟車狀態(tài)下跟蹤器丟失就暫停輸出等目標(biāo)重新出現(xiàn)再恢復(fù)。測(cè)速產(chǎn)品的底線原則是寧可丟速度也不能給錯(cuò)誤速度尤其不能給一個(gè)明顯偏快的值去誤導(dǎo)交管決策。6. 用已知車長(zhǎng)反推速度現(xiàn)場(chǎng)校驗(yàn)標(biāo)定與測(cè)速誤差的實(shí)用技巧最后講一個(gè)不依賴?yán)走_(dá)、只靠一把卷尺就能做的現(xiàn)場(chǎng)精度校驗(yàn)技巧。它同時(shí)檢驗(yàn)標(biāo)定和測(cè)速兩條鏈路適合項(xiàng)目驗(yàn)收和日常巡檢。操作上先在標(biāo)定過(guò)的路面取兩個(gè)參考線間距取20米用卷尺量準(zhǔn)。等一輛車長(zhǎng)已知的轎車比如4.5米以穩(wěn)定速度通過(guò)記錄車頭到達(dá)第一根參考線的幀號(hào)和車頭到達(dá)第二根參考線的幀號(hào)幀數(shù)記為N。真實(shí)速度為 v_ref L / (N / fps) * 3.6。把 v_ref 和系統(tǒng)輸出速度做對(duì)比偏差在±5%以內(nèi)說(shuō)明系統(tǒng)正常超過(guò)±10%說(shuō)明標(biāo)定或跟蹤有問(wèn)題回到第5章逐條排查。這里有一個(gè)細(xì)節(jié)要遵守用“車頭到達(dá)參考線”而不是“整個(gè)車身進(jìn)入”。車頭特征比車身邊緣更穩(wěn)定判斷方式更一致。如果現(xiàn)場(chǎng)沒(méi)有標(biāo)樁也可以用車道分道線做參考白色實(shí)線的單段長(zhǎng)度是6米、間距9米一組周期15米等于天然標(biāo)尺不需要額外授權(quán)。我自己的習(xí)慣是每次項(xiàng)目驗(yàn)收前一定用這個(gè)方法做一次全鏈路校驗(yàn)同時(shí)把系統(tǒng)時(shí)間與視頻時(shí)間源對(duì)齊。有一回現(xiàn)場(chǎng)標(biāo)定只偏了三個(gè)像素測(cè)速區(qū)間遠(yuǎn)端的誤差已經(jīng)到了8km/h靠車長(zhǎng)反推才發(fā)現(xiàn)于是重新標(biāo)定解決。從那以后我把這條校驗(yàn)寫(xiě)進(jìn)了項(xiàng)目SOP每次交付都跑一遍。視頻車速檢測(cè)的本質(zhì)不是模型選得有多先進(jìn)而是每個(gè)誤差源頭都被控制住——標(biāo)定、跟蹤、時(shí)間戳、濾波一個(gè)都不能少。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取