劉 海, 譚中慧
(中遠海運科技股份有限公司,上海 200135)
隨著城市車輛保有量的不斷增加,路邊車輛亂停放現(xiàn)象日益嚴重。近年來為消除該交通陋習,我國出臺了一系列新的交通管理法規(guī),支撐了智能交通和電子警察行業(yè)的快速發(fā)展,特別是違法停車自動抓拍系統(tǒng)得以大面積推廣。
目前,違法停車自動抓拍系統(tǒng)在國內沿海發(fā)達城市和內地部分省會城市推廣度較高,二、三線城市仍有較大缺口。違停自動抓拍系統(tǒng)推廣主要受到以下幾方面因素的制約:
(1) 城市交通較為復雜,人、機動車及非機動車混行,自動抓拍難度較大;
(2) 傳統(tǒng)的自動抓拍算法一般采用基于灰度和紋理特性的前景、背景比對等傳統(tǒng)檢測手段,對車輛的整體認識不夠,且極易受光線和天氣因素影響,漏拍和錯拍問題較多,抓拍率和有效率難以滿足應用需要;
(3) 傳統(tǒng)方式兼顧面小,有的甚至采用局部小預置位輪巡方式,只能一機單用,不能滿足治安及刑偵視頻監(jiān)控復用需求。
為解決傳統(tǒng)抓拍算法的局限和不足,在傳統(tǒng)前景、背景比對算法的基礎上,引入基于機器學習和OpenCV的檢測抓拍算法,建立一種以傳統(tǒng)檢測算法為輔,機器學習檢測算法為主的檢測抓拍算法模型,既能很好解決復雜交通路況下目標的鎖定抓拍問題,也能解決單一機器學習算法對遠端目標的弱視缺陷。同時,通過正、負樣本訓練得到的多級分類器,受光線、背景和目標運動狀態(tài)的影響小,有效提高抓拍數(shù)量和效率。此外,基于機器學習的抓拍算法支持多角度及多方向預置位輪巡抓拍,能夠滿足監(jiān)督及抓拍共用的需求。
基于前景、背景比對的抓拍方式需將彩色視頻圖像灰度化,再進行背景圖像提取、背景圖片自動更新、視頻序列二值化和目標判定等步驟完成抓拍。
采用局部背景提取和自動更新算法獲取目標區(qū)域背景圖像。設視頻圖像分辨率為M×N,違法停車抓拍區(qū)域分別為R1、R2、…、Rn,分別計算每個區(qū)域內單位像素的時間波動曲線σi(t)(見圖1),當σi(t)<某一特定常數(shù)σ時,表示該像素灰度值穩(wěn)定,可提取或更新當前背景。背景提取和更新的公式為
σi(t)=|yi(t)-yi(t-1)|
(1)
(2)
式(1)和式(2)中:yi(t)和yi(t-1)分別為某像素相鄰兩時刻的灰度值;Bn(t)和Bn(t-1)分別為某一抓拍區(qū)域n相鄰時刻的背景圖像;yn(t)為抓拍區(qū)域n當前時刻的灰度圖像。
a) 違法停車抓拍區(qū)域
b) 單位像素灰度值時間特性
前景圖像與背景圖像相減后得到模型,并按照某一特定閾值d對幀差結果進行歸一化,獲取目標像素的二值數(shù)據,設前景圖像像素點i的灰度值為Yi,背景圖像對應位置像素點的灰度值為Bi,則圖像二值化函數(shù)f(i)為
(3)
視頻圖像二值化結果見圖2。
將二值化結果按照M×N大小為單位分成若干小塊,并以每小塊為單位,統(tǒng)計小塊內二值化為1的點數(shù),以判定小塊內是否有目標。小塊內出現(xiàn)目標,小塊計數(shù)器加1;沒有目標,小塊計數(shù)器減1。一段時間內小塊計數(shù)器累加超過某一閾值,則表明該方格內有目標滯留。設第n小塊計數(shù)器為C(n),則其函數(shù)關系為
(4)
a) 實時視頻圖像
b) 視頻圖像二值化
a) 目標分塊累加計數(shù)
b) 目標提取
基于前景、背景圖像和二值化的傳統(tǒng)抓拍手段在背景圖像提取、實時更新等關鍵環(huán)節(jié)仍存在較多的技術瓶頸,在城市復雜交通流條件下很難達到實用要求。同時,城市道路人車混行,任何移動目標都可能對目標二值化處理及目標分割造成影響,嚴重制約檢測效果。因此,傳統(tǒng)違法停車檢測算法不適合多方向及大流量城市交通違法停車的抓拍。
為解決傳統(tǒng)算法的缺陷,在傳統(tǒng)目標檢測的基礎上引入機器學習算法對車輛目標進行檢測,基本思想是通過機器學習的方式,模仿人類大腦認知事物的過程,通過海量的正、負目標樣本,并通過選擇適當?shù)奶卣鲄?shù),建立機器學習訓練模型,訓練出具有明顯特征的多級分類器,并將該分類器運用到實際檢測中,通過計算實時視頻圖像的特征參數(shù),與串聯(lián)的各級分類器進行比對搜索,進而進行目標識別。該過程能以整體為單位對目標進行識別,不需進行背景圖像提取及自動更新,也無需視頻圖像二值化和目標分割,能很好的解決傳統(tǒng)圖像處理技術瓶頸。
Haar特征可反映圖像的灰度變化和像素分模塊的求差值,分為邊緣特征、線性特征、中心和對角線特征等,組合成特征模板見圖4。
車輛目標相對于道路交通中其他目標具有清晰的輪廓、線條和對稱性,因此,選用Haar特性進行分類器訓練。
a) 邊緣特征
b) 線性特征
c) 中心對角特征
采用Adaboost算法進行分類器訓練,Adaboost是一種迭代算法,該算法的核心思想是針對同一個訓練集中不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。該算法本身是通過改變數(shù)據分布來實現(xiàn)的,根據每次訓練集中每個樣本的分類是否正確及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新數(shù)據集送給下層分類器進行訓練,再將每次訓練得到的分類器進行融合,作為最后的決策分類器。
OpenCV是Intel資助的開源計算機視覺庫。它由一系列C函數(shù)和少量C++類構成,實現(xiàn)了視頻圖像處理和計算機視覺方面的很多通用算法。OpenCV包含300多個C/C++函數(shù)的跨平臺的中、高層API,不依賴于其他外部庫,可獨立于操作系統(tǒng)、硬件和圖形管理器。
分類器訓練及調用分為樣本收集:預處理、樣本數(shù)據生成、分類器訓練及檢測抓拍等關鍵幾步。OpenCV集成了用于Haar特征提取和Adaboost算法的全套系統(tǒng)函數(shù)及解決方案,提供用于支撐樣本數(shù)據的生成、分類器訓練和機器視覺目標檢測的所有接口。
Adaboost訓練算法需輸入大量的正、負樣本圖片,車輛檢測中正樣本為各種車輛局部或整體圖片,負樣本為除車輛以外的其他圖片。
由于車輛頭部和尾部都由擋風玻璃及車燈等具有明顯特征的結構組成,Haar特征明顯,故選取車頭和車尾圖片作為正樣本。分別調用OpenCV中cvLoadImage、cvResize和cvSaveImage函數(shù),將正樣本圖片尺寸全部歸一化為25×25像素大小。
負樣本的選取多以路、路標、行人、非機動車、行道樹及交通設施等交通相關目標為主,尺寸不等。樣本集S計算公式為
S=P∪N
(5)
式(5)中:P為正樣本集;N為負樣本集。P和N的計算公式為
P=?(p1,p2,…,pn),pi.size=25×25
(6)
N=?(n1,n2,…,nm),ni.size=x×y
(7)
式(6)和式(7)中:pi為正樣本圖片;ni為負樣本圖片。25×25表示固定圖像分辨率,x×y表示任意圖像分辨率。樣本庫中部分訓練樣本見圖5。
訓練器不能直接處理采集的正、負樣本數(shù)據,需根據圖片先行生成樣本數(shù)據。
負樣本相對簡單,只需要先建立負樣本文件夾(Neg),將負樣本全部存放其中,并創(chuàng)建Neg.dat描述文件,將負樣本圖片名稱分別填入Neg.dat的每一行中(見圖6a)。
正樣本放置于文件夾Pos中,建立正本描述文件Pos.dat見圖6b),調用OpenCV中的createsamples方法即可生成正樣本數(shù)據Pos.vec。
準備好正、負樣本和各樣本數(shù)據后,調用OpenCV提供的分類器訓練方法haartraining,輸入正、負樣本數(shù)據路徑、數(shù)量及尺寸,規(guī)定分類器層數(shù)等要求,進行分類器訓練。訓練過程以命令形式啟動,其命令格式見圖7。
a) 正樣本
b) 負樣本
a) 負樣本描述文件
b) 正樣本描述文件
圖7 分類器訓練過程啟動命令
圖7中,“opencv_haartraining.exe”為OpenCV訓練函數(shù);“-data data”為訓練完后的生成文件,最終生成data.xml分類器文件;“pos.vec”和“neg.dat”分別表示正、負樣本描述文件;270和125分別表示正、負樣本圖片數(shù)量;22表示分類器最大級聯(lián)層數(shù);“-w 25”和“-h 25”表示正樣本大小尺寸;“minHitRate”為命中率,表示正樣本通過能力,該數(shù)值越逼近1越好;“minHitRate”為“虛警率”,表示負樣本通過率,越逼近0越好;“-mode ALL”表示級聯(lián)器支持類型,默認即可;“-mem 1000”聲明訓練過程需申請1 000 MB內存空間。分類器訓練過程時間由樣本集的圖片數(shù)量決定,訓練完成后,生成.xml文件即為最終的分類器。
OpenCV提供了基于xml分類器的機器學習檢測方法全套接口函數(shù),將xml分類器及目標尺寸等參數(shù)一同輸入cvHaarDetectObjects函數(shù),即可實現(xiàn)對車輛目標的檢測。根據函數(shù)輸出的目標車輛數(shù)量及位置等信息,結合時間及空間特性,可實現(xiàn)違法停車檢測及抓拍。
OpenCV機器學習過程為
F(&n,&rect)=f(img,xml,*s,w,h)
(8)
式(8)中:&n為檢測輸出目標個數(shù);&rect為目標位置,以矩形坐標形式輸出;輸入參數(shù)中img為圖像數(shù)據;xml為分類器;*s為一片預分配的內存區(qū)域,用于存儲檢測出的目標信息;w和h分別為檢測結果中目標的最小寬度和高度尺寸。
對檢測出的目標車輛在時間序列上進行時間、空間關系計算和跟蹤,判斷目標是否具有時間連續(xù)性和空間不變性,以實現(xiàn)停車檢測。停車檢測算法公式為
(9)
基于OpenCV和機器學習的停車檢測算法對傳統(tǒng)算法的改進主要體現(xiàn)在算法思想、算法實現(xiàn)難易層度、算法抗干擾性和代碼的執(zhí)行效率等方面(見表1)。
表1 OpenCV及機器學習算法對傳統(tǒng)算法的改進
傳統(tǒng)檢測算法主要分析視頻圖像的灰度變化和紋理差異,具體細分到每一個像素點的灰度特性,為微觀圖像處理算法,缺乏對檢測目標的整體認識,是一個存在非辨別性的檢測。OpenCV和機器學習的停車檢測算法則以目標整體為檢測對象,針對目標整體的線性特征、以角特征和邊緣特征為研究對象,通過計算圖像內物體的特征值,并與分類器做比對,進而區(qū)分目標種類,實現(xiàn)可見、可辨的算法效果。
在算法實現(xiàn)過程中,傳統(tǒng)算法需要實現(xiàn)背景圖像提取及自動更新等關鍵算法,目前對于復雜交通流仍存在技術瓶頸。機器學習算法可繞開以上技術瓶頸,只需建立合適的機器學習框架機制,采集適當數(shù)量的正、負樣本,即可訓練準確的分類器,實現(xiàn)精準檢測。
基于OpenCV和機器學習的停車檢測算法能在大流量交通環(huán)境下正確識別目標,可有效解決車輛排隊及粘連等問題,同時能有效排除非機動車及行人等對目標檢測的影響?;贠penCV的視頻圖像處理算法采用了成熟的開源接口函數(shù),不僅加速了代碼開發(fā)速度,同時受益于OpenCV的高效性,能最大程度提高算法的執(zhí)行效率。
以Visual C++ studio為開發(fā)環(huán)境,采用MFC程序開發(fā)框架,分別用720×576標清視頻和1920×1080高清視頻對算法進行了測試,測試效果見圖8。
a) 標清視頻檢測效果
b) 高清視頻檢測效果
在上海市浦東新區(qū)沈家弄路近民生路口進行幾種算法違法停車自動抓拍比對測試,測試環(huán)境相同,測試時長8小時,測試數(shù)據見表2。
表2 違停抓拍測試數(shù)據
由測試對比可知,基于OpenCV和機器學習的違法停車檢測算法具有較好的抓拍效果和響應速度,算法不受預置位限制,可實現(xiàn)多方位檢測,復雜路況下仍能實現(xiàn)有效的目標分割。
對基于OpenCV和機器學習的車輛目標檢測和抓拍算法進行研究,用機器學習的方式模擬人工智能,做到目標整體特征計算。實現(xiàn)多級分類快速識別,從根本上區(qū)別于傳統(tǒng)前景、背景比對的檢測方式,較傳統(tǒng)方式具有更好的車輛感知能力和辨別能力,具有更好的抗干擾性能。