羅明睿, 張翠平, 李亞欣, 李媛媛
(北京信息科技大學 計算機學院, 北京 100192)
隨著交通智能化和人工智能技術水平提升,越來越多的傳統車企和互聯網企業參與到自動駕駛技術的研發。 近幾年自動駕駛技術愈來愈熱,越來越多的消費者也更青睞于購買和使用具有輔助駕駛(自動駕駛)的車輛,從而減少駕駛員駕駛時的體力損耗,降低因疲勞駕駛帶來的風險。 與此同時,因自動駕駛技術的普及而產生的交通事故也越來越多。
2022 年6 月16 日,美國聯邦政府公布了兩份對于自動駕駛技術的報告,報告中首次公布了涉及自動駕駛汽車(AV) 和配備先進駕駛輔助系統(ADAS) 的汽車在碰撞和死亡事故方面的相關統計。 其中,加州51 起自動駕駛事故中有45 起事故是因為自動駕駛狀態中追尾或者撞到其他障礙物造成的。 因此,在自動駕駛領域,如何對周圍環境進行感知,對前方目標進行測距是非常重要的技術難題。目前,在自動駕駛領域比較有名的兩大車企——特斯拉和蔚來所研發的自動駕駛平臺中,特斯拉的NOA 和蔚來的NOP 均不能做到對人、動物、交通燈、墻、路障等非車輛目標做出反應,遇到這些情況會交予人為處理。
當前,針對自動駕駛和輔助駕駛障礙系統國內外已有一些研究,其主要對于避障算法和圖像識別方向展開的研究。 如:胡正云等[1]針對車道線圖像識別的實時性和適應性等問題,提出了一種基于遺傳算法,并且結合車道線圖像閾值的分割優化算法來解決此問題。 牛洪超等人[2]對M-YOLO 圖像識別進行改進,使得M-YOLO 更符合自動駕駛中圖像識別的要求。 Chen[3]等人對多種公共自動駕駛數據集的性能進行了全面調查,目前應用到實際中的障礙物預警系統,這種方式雖然能夠迅速的對前方障礙物進行檢測,但無法第一時間對障礙物類別進行識別,無法對目標障礙物是否在橫向移動進行監控,從而導致無法為駕駛員提出有效的避障建議。本文基于YOLOv5 圖像識別算法和基于OpenCV 的自動跟隨系統進行設計,從而設計出應用于車載電腦的駕駛輔助預警系統。
本系統的目標使用者是L3 級別以下的自動駕駛車輛和駕駛人員,主要功能是利用攝像頭對前方路面進行實時監控,檢測到前方有障礙物后第一時間提醒駕駛員并給出避障建議。 該系統需要對不同類型的障礙物,如動物、路障、塑料袋、行人、非行駛狀態的車輛進行有效的識別,因此對系統設計有以下需求:
(1)能夠通過圖像識別對前方是否有障礙物進行有效識別;
(2)針對不同的障礙物能夠進行快速分類,如:貓、狗等屬于動物分類,車用警示標志牌、路障等屬于需要躲避障礙物,塑料袋、雜草屬于無需躲避障礙物等;
(3)對前方移動車輛進行有效監控,判斷前方車輛是否處于正常行駛的狀態,并對前方車輛緊急停車(減速)進行判斷;
(4)能夠判斷所檢測物體的運動狀態;
(5)針對不同類型的障礙物給出合理的相關避障措施;
(6)在給出避障措施后發出警報,并給出語音播報障礙物的種類和避障建議。
如圖1 所示,系統主要由前端UI 界面、圖像識別和避障處理3 部分構成。

圖1 系統框架圖Fig.1 System framework
前端UI 界面負責人機交互,主要完成攝像頭的操作、視頻流的讀取、顯示識別結果、避障建議以及語音播報和報警4 部分內容。 物體識別包括目標追隨、圖像識別兩個主要部分。 首先需要對于前方待識別物體進行選擇、追蹤,選定單個或多個目標之后,通過圖像識別對其進行識別并返回識別的可能結果及相關物體屬性。 數據處理部分是基于不同的障礙物類型給出不同的避障建議,最后在UI 界面上返回識別結果及避障建議并發出警報和語音提醒。
系統采用Qt Designer[4]進行界面設計(如圖2所示),主要模塊包括打開攝像頭、讀取視頻流、識別結果顯示、避障建議以及語音播報和報警4 個部分。
攝像頭操作主要是利用QLabel 組件和OpenCV實現對車載行車記錄儀的連接和斷開。 當用戶點擊開始之后連接車載行車記錄儀,調用OpenCV 中的圖像獲取功能,使用VideoCapture()函數去獲取行車記錄儀的圖像數據。
將視頻流看做N多個幀的圖片,讀取部分運用OpenCV 中VideoCapture()函數創建多個圖像獲取對象,用以讀取視頻文件內容。 之后,使用IsOpened函數判斷該視頻文件是否被正確打開。 IsOpened()函數將返回一個boo 量,用于判斷視頻流是否可以使用。 寫入部分使用get() 函數得到視頻的長和寬,并用初始化視頻捕獲對象并且把視頻流讀入內存。
通過圖像識別模塊識別出不同的物體后,根據處理結果會產生不同的建議。 此時,系統均采用QTextEdit 組件來顯示參數名稱、輸出結果和避障措施。
語音報播模塊由一個音量調節器、預警靜音開關(取消報警)和聲音播放器構成。 其中,音量調節器使用setVolume()方法和Qslider 組件完成;預警靜音開關使用setVolume()方法和QRadiobutton 組件完成;聲音播放器使用QmediaPlayer 模塊實現。由于QmediaPlayer 是對本地計算機底層播放框架封裝,所以語音提示播放和預警聲音均是接入錄好的MP3 音源。
3.2.1 目標追隨
目標追隨系統選用KCF 算法,借鑒柳天宇等人[5]基于KCF 算法的空中目標追蹤模擬中提出的目標追蹤思路。 KCF 算法實現目標跟蹤的基本流程為:讀入視頻序列,由YOLOv5 檢測出的目標作為真實目標,在當前幀采樣,用目標和背景信息訓練分類器,得到相關濾波器;下一幀圖像與相關濾波器做卷積,響應最大的區域作為預測目標,目標更新迭代,并進行跟蹤;下一幀循環上述過程。
訓練樣本的生成都是基于循環矩陣形式來構建的。 其中基樣本x為正樣本,其他全部都是負樣本。由于循環矩陣的性質,樣本集可以很方便的利用快速傅里葉變換和傅里葉對角化的性質來進行計算。由任意基樣本x生成的循環矩陣具有以下特性:
其中,是x的離散傅里葉變換,F是離散傅里葉常量矩陣,是FH的厄米特轉置。
循環矩陣既簡化了計算,降低了運算時間,又解決了跟蹤器訓練時樣本不足的問題。
嶺回歸的方法是KCF 算法中用來訓練跟蹤器,如式(2)所示。
解得ω形式為
之后,需要利用核函數將非線性在映射后滿足線性要求,以此達到非線性到線性的轉換,從而使得跟蹤準確度提升。 此時,ω可表達為式(4):
可解出:
最終可得訓練樣本的相關矩陣,如式(6)所示。
3.2.2 訓練數據集
本項目采用伯克利大學2020 年發布的開放式駕駛視頻數據集BDD100K[6](本數據集目前在Github 上為開源項目), 本數據集中有近10 萬個視頻圖片資源,圖片數量分布如圖3 所示。 該數據集發布的目的是方便評估自動駕駛圖像識別算法的發展,目前也是自動駕駛領域使用最為廣泛的數據集。由于硬件配置所限,本項目只訓練了數據集中的部分圖片,并根據系統的實際應用,添加了對于Animal 類別的圖片進行訓練。 訓練圖片的具體類別和數量見表1。

表1 系統訓練的內容數量和種類Tab.1 Quantity and type for system training

圖3 OpenCV 的坐標系示意圖Fig.3 Schematic diagram of OpenCV coordinate system
由于BDD100K 均使用Json 格式的文件存儲,無法直接將BDD100k 格式轉換成適用于YOLO 格式,所以在訓練數據集的過程中,先將BDD100k 的數據集標簽轉換為coco 格式,之后再將COCO 格式轉換為本項目可以訓練的YOLO 格式。
3.3.1 判斷物體運動狀態
判斷物體的狀態分為判斷物體橫向移動和物體是否停止或者減速。 首先對物體進行橫向位移的檢測,利用OpenCV 中的cv2.findContours 對目標輪廓進行檢測[7],并對矩形的長、寬、高、面積、周長測算并讀出矩陣4 個頂點的坐標,如圖4 所示。

圖4 OpenCV 測距原理圖Fig.4 Schematic diagram of OpenCV ranging
通過比較上一幀和下一幀目標物體所在矩形的坐標,以判斷物體是否在水平運動。 對于判斷物體是否在加速或者減速,本項目利用空間的深度來實現,其原理如圖4 所示。
如圖4(b)所示,物體寬度為W,物體W距離相機的長度為d,對物體進行拍攝,拍得照片的像素寬度為P,于是可以得出相機焦距F的公式如下:
公式變換可得:
由此可測出目標物體的距離。
得到物體距離后,根據當前車速和反應時間測得下一幀D的理論值,對比D和D′的大小,若D >D′可知目標物體正在減速或者靜止。
3.3.2 避障建議
避障建議本系統借鑒遺傳算法的思路,在多個約束條件下給出最有效的解決方案,算法流程如圖5 所示。

圖5 算法流程Fig.5 Algorithm flow chart
算法描述如下:
當目標障礙物識別成功后,對其運動狀態進行分類,若為動態且為加速狀態則繼續行駛,反饋給避障建議為繼續行駛;若為靜止或者減速狀態則對目標障礙物種類進行訪問,若為可直接壓過的種類(如塑料袋、雜草等),同時反饋建議為繼續行駛;否則,對目標是否為正在移動的動態障礙物進行判斷,根據判斷出不同的內容進行分類。 其中為動態障礙物有Car 類、Moto 類、Bus 類、Animal 類和Person 類,若是活物則繼續判斷其水平運動狀態,不是則識別左右車道是否具備轉向條件。 當判斷物體沒有水平運動后視為物體非活物,進而判斷左右車道是否具備轉向條件;若目標物體仍在水平移動則進入緊急制動,并反饋出避障建議,避障建議為緊急剎車。 若左右車道具備轉向條件,則給出避障建議為向左轉或向右轉。
本測試主要是針對3 部分進行,其中包括:測試該項目是否可以識別出橫向移動的障礙物;測試內容是測試對于同一個障礙物的目標追隨能力;測試內容是按鈕功能的完善情況。
本測試針對當前方突然出現障礙物后,系統是否可以識別出障礙物類型、分類和給出的避障建議。如圖6 所示,當前方出現行人穿過馬路時,系統可以識別出類型為人,類別為person 類。 給出的避障建議是緊急剎車,完全符合系統設計要求。

圖6 系統運行結果Fig.6 System running results
本測試針對前方一直跟隨的障礙物,當其他障礙物進入攝像區域后,是否可以對目標物體繼續跟隨。 如圖7(a)所示,本系統一直跟隨目標車輛,當側后方出現白色車輛后依舊可以跟隨目標車輛,如圖7(b)所示。

圖7 系統運行結果Fig.7 System running results
本文基于YOLOv5 圖像識別和OpenCV 圖像處理,完成了基于圖像識別的輔助駕駛避障預警系統??梢葬槍Φ缆飞喜煌愋偷恼系K物給予駕駛員不同的避障建議,輔助駕駛員在第一時間做出正確處理,從而降低駕駛中發生危險引起交通事故的幾率。