于瑛瑛
(煙臺汽車工程職業學院,機電工程系,山東,煙臺 265500)
車輛在帶給人們出行便利的同時也引發了各類安全問題,傳統的安全技術主要是安全氣囊、安全帶等被動防護裝置,不能從根本上解決問題,隨著信息技術的發展,通過算法以及數學模型可以準確識別目標車輛,并且可以利用傳感器技術測量車輛間距,對可能產生碰撞的危險距離進行設置提前預警。這樣高效實用的防碰撞預警系統可以有效的降低事故概率,確保行車安全,具有極大的實用性。
Android平臺基于Linux內核研發,是針對移動智能設備的開源操作平臺,采用分層架構,包括豐富的組件庫,功能完善且簡單易用,其中核心技術如下。
(1) C/C++:Android底層庫由C/C++實現,可利用C/C++進行原生代碼編寫并將庫文件嵌入到封裝包apk之中。
(2) JNI:在調用C/C++代碼時可利用JNI技術將so文件加載到Android程序,可以說JNI是Java和C/C++互相溝通的機制。
(3) OpenCV:OpenCV是開源的視覺庫,提供了Python、MATLAB等多種語言接口,在各個領域均有所應用且效果良好[1]。
CCD攝像頭屬于光學傳感器,可將三維空間信息轉換為平面信息,對于復雜環境中的環境感知有良好的應用效果。由于車輛行駛速度較高且存在天氣因素影響,綜合考慮反應距離、開發成本以及抗干擾能力,選用易操作易維護價格更加優惠的CCD攝像頭進行圖像采集。
由于受到攝像設備、天氣、解碼轉換、壓縮及解壓過程等因素影響,采集到的初始道路圖像會產生干擾信息。為了避免由于信息模糊或關鍵部分缺失導致車輛識別不準確,需要對初始圖像進行優化,提升特征識別質量。
(1) 設置ROI區域:采集ROI(region of interest)區域圖像后不斷排除無效部分可提升識別準確性,根據車輛防碰撞預警系統的實際需要,可將初始道路圖像中的天空、路標、路燈等無效內容剔除。
(2) 灰度處理:CCD采集的是彩色畫面,處理時由于信息多導致計算效率降低,因此進行灰度處理,將繁雜的彩色信息剔除只留下亮度信息。采用加權平均法對三原色進行賦權,計算灰度值: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項權重較高[2]。

在防碰撞預警過程中,必須先確定目標車輛才能進行進一步的安全距離測量。目前比較常用的檢測方法包括利用特征、利用運動特征以及利用模型。由于目標車輛通常處于動態場景而且伴隨著道路環境的干擾,因此為了排除這些干擾因素準確識別目標車輛,選擇結合Hog特征與Haar特征進行車輛分類器訓練。首先,對車輛圖像的正負樣本進行灰度處理及降噪處理;其次,利用Hog特征與Haar特征分別進行分類器訓練;再次,為了提升車輛識別準確率,將分類器進行級聯形成強分類器;最后,完成目標車輛識別[3]。整體的目標車輛識別算法流程如圖1所示。

圖1 目標車輛識別算法
Hog特征也稱作方向梯度直方圖,提取特征的方法即實現R=G=B,利用γ校正法調整圖像對比度,降低噪聲、環境等客觀因素的影響。先將圖像分割為Cell單元獲取局部特征向量,將單元格組合為block,在塊內進行梯度直方圖歸一化處理獲取Hog特征向量。汽車的外部輪廓大致可看做正方形,可基于此限定像素尺寸。設定block為16×16,window為64×64,cell為4×4,步長在x方向及y方向均設置為8,利用如下公式計算整體Hog特征維度:
提取所有圖像特征之后,采用SVM進行訓練,將是車輛的正樣本標記為1,非車輛的其他類型的負樣本標記為-1。
由于只參考Hog特征可能存在漏檢情況,因此引入級聯檢測方法如圖2所示。利用Haar特征反應圖像的灰度值變化,對于提取到的正樣本和負樣本提取Haar特征并不斷調整權重,最終由多個弱分類器組建為強分類器,通過所有級聯的分類器判定之后才輸出最終結果[4]。

圖2 級聯分類器組成
在識別出前方車輛之后,還需測算其與自身車輛的距離,并根據駕駛員反應以及剎車所需距離進行比較,以此判斷是否需要預警。距離的測算可以采用深度圖中的像素值來表示,最常使用的方法是單目視覺技術,主要包括主動與被動兩種類型,兩者的區別在于測距時光照是都由車輛自身提供。鑒于車輛防碰撞系統的實際需要,采用被動測距方法,測算模型如圖3所示。設l代表三維空間,W代表降維后的二維空間,測距即可看作是利用W={u,v}的數據計算l={x,y,z}中的平面S={(x,y,o)∈W}的數據[5]。

(a)

在駕駛過程中為了避免碰撞需要與前方車輛保持安全距離,即預警系統發出警示的合理閾值,其中包括駕駛員的反應距離以及減速剎車所需距離兩個方面[6]。
(1) 反應距離:反應距離與反應時間和行駛速率有關,設dr為反應距離,tr為反應時間,v為速率,則在車速為常數的假設下,dr=tr×v,dr與v存在比例關系dr∝v。

安全距離的計算其實是針對極端情況下的測算,在實際駕駛過程中不能完全接近安全距離才減速,為了確保人車安全,防碰撞預警系統的預警機制應更加靈活,在復雜的行車環境中預留充足的時間與距離[5]。因此設置了多級預警機制。
(1) 一般預警:距離足夠駕駛員反應并采取措施,提示一般預警。
(2) 重要預警:距離逐步接近,存在碰撞風險,提示重要預警。
(3) 嚴重預警:距離已經達到最小碰撞范圍,很大可能發生碰撞,提示嚴重預警[7]。
車輛防碰撞預警系統的核心功能是根據測算的車輛間距離與安全距離進行比較,在不同的危險范圍發出不同級別的預警提醒駕駛員采取減速剎車措施。在整體結構上包括圖像采集、車輛識別、防碰撞預警3個部分,如圖4所示。將各模塊的算法移植到Android平臺,利用Java代碼通過JNI調用C/C++庫,合成apk安裝包。

圖4 系統整體結構
采用Android Camera 2組件,支持對每一幀圖像的參數實現手動控制,圖片格式更多元,且具備高速連拍功能。利用管道的方式連接App與底層Camera,App發送CaptureRequest,CameraDevices接收后返回到Surface,在ImageReader進行保存,利用JNI調用相關算法,將信息轉換后的int[]數組作為參數傳遞到C/C++層[8]。
在Android系統中,SurfaceView的UI可實現在獨立的線程中繪制任務,可確保主線資源完整,因此在車輛識別模塊,根據識別區域返回對應坐標后選用SurfaceView類用矩形框標記目標車輛,每隔5~20 ms刷新繪制圖像,識別目標車輛為后續測距做準備。
根據SurfaceView標記出跟車距離,結合多級預警機制,與每一級別的安全距離進行比較與計算,達到危險范圍,則出發Android中的MediaPlayer類,利用void start()播放對應的預警音頻,播放完畢之后利用setOnCompletionListener()實現回調,實時監測是否需要預警[9]。
5.1.1 車輛識別效果
為了驗證系統對前方車輛的識別情況,選取UAS數據集中晴天、黃昏、夜間不同天氣狀況下的5 561張道路圖像進行測試與驗證,識別結果如表1所示。

表1 不同天氣狀況下車輛識別結果
由表1可知,整體車輛識別準確率較高,其中黃昏和夜間由于環境因素影響導致圖像亮度不高,在處理過程中部分細節比較模糊,因此識別準確率要比晴天時要低[10]。
5.1.2 防碰撞預警效果
實際場景中駕駛員通常會與前車保持較遠跟車距離,因此系統針對不同的危險距離設置了多級預警機制。為了驗證系統對車輛的防碰撞預警效果,借鑒正常情況下駕駛員反應距離以及剎車距離,基于不同的行駛速度分別設置了多級危險距離劃分。通常在城市中車輛行駛速度一般在50~80 km/h之間,因此選擇50、60、70 km/h作為實驗速度,根據正常剎車情況設置危險距離如表2所示。

表2 多級實驗危險距離劃定
由表2可知,針對不同危險距離設置不同級別預警可以讓系統預警更加靈活,在復雜的實際行車環境中減少不必要的告警。經過測試,系統在3個級別的危險距離內均可以準確播放預警音頻。以50 km/h為例,在車輛間距為45 m時,系統發出一般預警;在車輛間距達到30 m時,系統發出重要預警;車輛間距為15 m時,系統發出驗證預警。當危險距離在臨界值間切換時,由于系統處理耗時需要4 ms左右,因此預警時間會有所延遲,預警距離會出現0.06 m左右的誤差但仍在安全距離內。從整體上來講系統預警效果良好,滿足實際車輛防碰撞預警需求。
為了驗證系統處理效率,將采集到的道路圖像導入系統,記錄經過系統計算到最終在界面上顯示所需時長,共計導入圖像5 700幀,每幀圖像處理平均耗時45.72 ms,最長105.12 ms,最短8.64 ms。由此可見,雖然受各種因素影響個別圖像處理時長偏長,但整體處理效率很高,系統性能良好。
車輛防碰撞預警系統通過CCD攝像頭采集道路圖像,經過圖像優化后識別處目標車輛,利用單目視覺技術測算間距,并根據安全距離制定多級預警機制,經過測試功能完備,性能良好,具備較高實用性。但也存在不足,由于行車環境、駕駛員反應速度、路面狀況、不同車型制動能力等影響因素眾多,因此系統模型還需進一步優化,提升魯棒性。