于瑛瑛
(煙臺汽車工程職業(yè)學院,機電工程系,山東,煙臺 265500)
車輛在帶給人們出行便利的同時也引發(fā)了各類安全問題,傳統(tǒng)的安全技術(shù)主要是安全氣囊、安全帶等被動防護裝置,不能從根本上解決問題,隨著信息技術(shù)的發(fā)展,通過算法以及數(shù)學模型可以準確識別目標車輛,并且可以利用傳感器技術(shù)測量車輛間距,對可能產(chǎn)生碰撞的危險距離進行設(shè)置提前預警。這樣高效實用的防碰撞預警系統(tǒng)可以有效的降低事故概率,確保行車安全,具有極大的實用性。
Android平臺基于Linux內(nèi)核研發(fā),是針對移動智能設(shè)備的開源操作平臺,采用分層架構(gòu),包括豐富的組件庫,功能完善且簡單易用,其中核心技術(shù)如下。
(1) C/C++:Android底層庫由C/C++實現(xiàn),可利用C/C++進行原生代碼編寫并將庫文件嵌入到封裝包apk之中。
(2) JNI:在調(diào)用C/C++代碼時可利用JNI技術(shù)將so文件加載到Android程序,可以說JNI是Java和C/C++互相溝通的機制。
(3) OpenCV:OpenCV是開源的視覺庫,提供了Python、MATLAB等多種語言接口,在各個領(lǐng)域均有所應(yīng)用且效果良好[1]。
CCD攝像頭屬于光學傳感器,可將三維空間信息轉(zhuǎn)換為平面信息,對于復雜環(huán)境中的環(huán)境感知有良好的應(yīng)用效果。由于車輛行駛速度較高且存在天氣因素影響,綜合考慮反應(yīng)距離、開發(fā)成本以及抗干擾能力,選用易操作易維護價格更加優(yōu)惠的CCD攝像頭進行圖像采集。
由于受到攝像設(shè)備、天氣、解碼轉(zhuǎn)換、壓縮及解壓過程等因素影響,采集到的初始道路圖像會產(chǎn)生干擾信息。為了避免由于信息模糊或關(guān)鍵部分缺失導致車輛識別不準確,需要對初始圖像進行優(yōu)化,提升特征識別質(zhì)量。
(1) 設(shè)置ROI區(qū)域:采集ROI(region of interest)區(qū)域圖像后不斷排除無效部分可提升識別準確性,根據(jù)車輛防碰撞預警系統(tǒng)的實際需要,可將初始道路圖像中的天空、路標、路燈等無效內(nèi)容剔除。
(2) 灰度處理:CCD采集的是彩色畫面,處理時由于信息多導致計算效率降低,因此進行灰度處理,將繁雜的彩色信息剔除只留下亮度信息。采用加權(quán)平均法對三原色進行賦權(quán),計算灰度值:Gray(x,y)=0.213R(x,y)+0.715G(x,y)+0.072B(x,y),其中,Gray(x,y)代表在點(x,y)處的灰度值,R、G、B分別是RGB顏色分量,由于人的眼睛的視覺細胞會綠色受體接收更為敏感,因此G項權(quán)重較高[2]。
在防碰撞預警過程中,必須先確定目標車輛才能進行進一步的安全距離測量。目前比較常用的檢測方法包括利用特征、利用運動特征以及利用模型。由于目標車輛通常處于動態(tài)場景而且伴隨著道路環(huán)境的干擾,因此為了排除這些干擾因素準確識別目標車輛,選擇結(jié)合Hog特征與Haar特征進行車輛分類器訓練。首先,對車輛圖像的正負樣本進行灰度處理及降噪處理;其次,利用Hog特征與Haar特征分別進行分類器訓練;再次,為了提升車輛識別準確率,將分類器進行級聯(lián)形成強分類器;最后,完成目標車輛識別[3]。整體的目標車輛識別算法流程如圖1所示。
圖1 目標車輛識別算法
Hog特征也稱作方向梯度直方圖,提取特征的方法即實現(xiàn)R=G=B,利用γ校正法調(diào)整圖像對比度,降低噪聲、環(huán)境等客觀因素的影響。先將圖像分割為Cell單元獲取局部特征向量,將單元格組合為block,在塊內(nèi)進行梯度直方圖歸一化處理獲取Hog特征向量。汽車的外部輪廓大致可看做正方形,可基于此限定像素尺寸。設(shè)定block為16×16,window為64×64,cell為4×4,步長在x方向及y方向均設(shè)置為8,利用如下公式計算整體Hog特征維度:
提取所有圖像特征之后,采用SVM進行訓練,將是車輛的正樣本標記為1,非車輛的其他類型的負樣本標記為-1。
由于只參考Hog特征可能存在漏檢情況,因此引入級聯(lián)檢測方法如圖2所示。利用Haar特征反應(yīng)圖像的灰度值變化,對于提取到的正樣本和負樣本提取Haar特征并不斷調(diào)整權(quán)重,最終由多個弱分類器組建為強分類器,通過所有級聯(lián)的分類器判定之后才輸出最終結(jié)果[4]。
圖2 級聯(lián)分類器組成
在識別出前方車輛之后,還需測算其與自身車輛的距離,并根據(jù)駕駛員反應(yīng)以及剎車所需距離進行比較,以此判斷是否需要預警。距離的測算可以采用深度圖中的像素值來表示,最常使用的方法是單目視覺技術(shù),主要包括主動與被動兩種類型,兩者的區(qū)別在于測距時光照是都由車輛自身提供。鑒于車輛防碰撞系統(tǒng)的實際需要,采用被動測距方法,測算模型如圖3所示。設(shè)l代表三維空間,W代表降維后的二維空間,測距即可看作是利用W={u,v}的數(shù)據(jù)計算l={x,y,z}中的平面S={(x,y,o)∈W}的數(shù)據(jù)[5]。
(a)
在駕駛過程中為了避免碰撞需要與前方車輛保持安全距離,即預警系統(tǒng)發(fā)出警示的合理閾值,其中包括駕駛員的反應(yīng)距離以及減速剎車所需距離兩個方面[6]。
(1) 反應(yīng)距離:反應(yīng)距離與反應(yīng)時間和行駛速率有關(guān),設(shè)dr為反應(yīng)距離,tr為反應(yīng)時間,v為速率,則在車速為常數(shù)的假設(shè)下,dr=tr×v,dr與v存在比例關(guān)系dr∝v。
安全距離的計算其實是針對極端情況下的測算,在實際駕駛過程中不能完全接近安全距離才減速,為了確保人車安全,防碰撞預警系統(tǒng)的預警機制應(yīng)更加靈活,在復雜的行車環(huán)境中預留充足的時間與距離[5]。因此設(shè)置了多級預警機制。
(1) 一般預警:距離足夠駕駛員反應(yīng)并采取措施,提示一般預警。
(2) 重要預警:距離逐步接近,存在碰撞風險,提示重要預警。
(3) 嚴重預警:距離已經(jīng)達到最小碰撞范圍,很大可能發(fā)生碰撞,提示嚴重預警[7]。
車輛防碰撞預警系統(tǒng)的核心功能是根據(jù)測算的車輛間距離與安全距離進行比較,在不同的危險范圍發(fā)出不同級別的預警提醒駕駛員采取減速剎車措施。在整體結(jié)構(gòu)上包括圖像采集、車輛識別、防碰撞預警3個部分,如圖4所示。將各模塊的算法移植到Android平臺,利用Java代碼通過JNI調(diào)用C/C++庫,合成apk安裝包。
圖4 系統(tǒng)整體結(jié)構(gòu)
采用Android Camera 2組件,支持對每一幀圖像的參數(shù)實現(xiàn)手動控制,圖片格式更多元,且具備高速連拍功能。利用管道的方式連接App與底層Camera,App發(fā)送CaptureRequest,CameraDevices接收后返回到Surface,在ImageReader進行保存,利用JNI調(diào)用相關(guān)算法,將信息轉(zhuǎn)換后的int[]數(shù)組作為參數(shù)傳遞到C/C++層[8]。
在Android系統(tǒng)中,SurfaceView的UI可實現(xiàn)在獨立的線程中繪制任務(wù),可確保主線資源完整,因此在車輛識別模塊,根據(jù)識別區(qū)域返回對應(yīng)坐標后選用SurfaceView類用矩形框標記目標車輛,每隔5~20 ms刷新繪制圖像,識別目標車輛為后續(xù)測距做準備。
根據(jù)SurfaceView標記出跟車距離,結(jié)合多級預警機制,與每一級別的安全距離進行比較與計算,達到危險范圍,則出發(fā)Android中的MediaPlayer類,利用void start()播放對應(yīng)的預警音頻,播放完畢之后利用setOnCompletionListener()實現(xiàn)回調(diào),實時監(jiān)測是否需要預警[9]。
5.1.1 車輛識別效果
為了驗證系統(tǒng)對前方車輛的識別情況,選取UAS數(shù)據(jù)集中晴天、黃昏、夜間不同天氣狀況下的5 561張道路圖像進行測試與驗證,識別結(jié)果如表1所示。
表1 不同天氣狀況下車輛識別結(jié)果
由表1可知,整體車輛識別準確率較高,其中黃昏和夜間由于環(huán)境因素影響導致圖像亮度不高,在處理過程中部分細節(jié)比較模糊,因此識別準確率要比晴天時要低[10]。
5.1.2 防碰撞預警效果
實際場景中駕駛員通常會與前車保持較遠跟車距離,因此系統(tǒng)針對不同的危險距離設(shè)置了多級預警機制。為了驗證系統(tǒng)對車輛的防碰撞預警效果,借鑒正常情況下駕駛員反應(yīng)距離以及剎車距離,基于不同的行駛速度分別設(shè)置了多級危險距離劃分。通常在城市中車輛行駛速度一般在50~80 km/h之間,因此選擇50、60、70 km/h作為實驗速度,根據(jù)正常剎車情況設(shè)置危險距離如表2所示。
表2 多級實驗危險距離劃定
由表2可知,針對不同危險距離設(shè)置不同級別預警可以讓系統(tǒng)預警更加靈活,在復雜的實際行車環(huán)境中減少不必要的告警。經(jīng)過測試,系統(tǒng)在3個級別的危險距離內(nèi)均可以準確播放預警音頻。以50 km/h為例,在車輛間距為45 m時,系統(tǒng)發(fā)出一般預警;在車輛間距達到30 m時,系統(tǒng)發(fā)出重要預警;車輛間距為15 m時,系統(tǒng)發(fā)出驗證預警。當危險距離在臨界值間切換時,由于系統(tǒng)處理耗時需要4 ms左右,因此預警時間會有所延遲,預警距離會出現(xiàn)0.06 m左右的誤差但仍在安全距離內(nèi)。從整體上來講系統(tǒng)預警效果良好,滿足實際車輛防碰撞預警需求。
為了驗證系統(tǒng)處理效率,將采集到的道路圖像導入系統(tǒng),記錄經(jīng)過系統(tǒng)計算到最終在界面上顯示所需時長,共計導入圖像5 700幀,每幀圖像處理平均耗時45.72 ms,最長105.12 ms,最短8.64 ms。由此可見,雖然受各種因素影響個別圖像處理時長偏長,但整體處理效率很高,系統(tǒng)性能良好。
車輛防碰撞預警系統(tǒng)通過CCD攝像頭采集道路圖像,經(jīng)過圖像優(yōu)化后識別處目標車輛,利用單目視覺技術(shù)測算間距,并根據(jù)安全距離制定多級預警機制,經(jīng)過測試功能完備,性能良好,具備較高實用性。但也存在不足,由于行車環(huán)境、駕駛員反應(yīng)速度、路面狀況、不同車型制動能力等影響因素眾多,因此系統(tǒng)模型還需進一步優(yōu)化,提升魯棒性。