賈文洋 王鵬舉 吳文祥 劉朋
關(guān)鍵詞 計(jì)算機(jī)視覺(jué) 車(chē)道識(shí)別 駕駛狀態(tài)監(jiān)測(cè)
1引言
近年來(lái),隨著社會(huì)經(jīng)濟(jì)的不斷發(fā)展,人們生活水平不斷提高,越來(lái)越多的家庭擁有了汽車(chē)。自動(dòng)駕駛技術(shù)的不斷發(fā)展,使得越來(lái)越多的汽車(chē)開(kāi)始裝備駕駛輔助系統(tǒng)。
采用計(jì)算機(jī)視覺(jué)進(jìn)行道路識(shí)別和駕駛輔助具有成本低、部署快速、效率高等特點(diǎn)。使用OpenCV 對(duì)攝像頭傳回的數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。使用Canny 邊緣檢測(cè)技術(shù)和霍夫變換以實(shí)現(xiàn)圖像的實(shí)時(shí)處理,Canny 邊緣檢測(cè)采用了高斯模糊來(lái)加強(qiáng)對(duì)數(shù)據(jù)處理的精準(zhǔn)性,首先進(jìn)行圖像的降噪,然后計(jì)算圖像梯度,隨后進(jìn)行非極大值抑制和閾值篩選,使用霍夫(Hough)變換尋找直線(xiàn),最后標(biāo)記出道路供駕駛員參考或?yàn)樽詣?dòng)駕駛設(shè)置界限。
在OpenCV 的基礎(chǔ)上,引入Tensorflow API 和已訓(xùn)練數(shù)據(jù)集進(jìn)行目標(biāo)識(shí)別[1] 。根據(jù)已經(jīng)訓(xùn)練好的模型,在車(chē)輛行駛中進(jìn)行目標(biāo)識(shí)別,如行人、車(chē)輛、紅綠燈等。同時(shí),針對(duì)已有系統(tǒng)無(wú)法對(duì)駕駛員進(jìn)行監(jiān)控和駕駛輔助問(wèn)題,我們采用車(chē)載雙攝像頭的方式對(duì)車(chē)外道路信息和車(chē)內(nèi)駕駛員駕駛狀態(tài)進(jìn)行實(shí)時(shí)采集來(lái)解決。車(chē)外攝像頭采集圖像,使用OpenCV 進(jìn)行實(shí)時(shí)的圖像處理,識(shí)別車(chē)道并幫助駕駛員進(jìn)行行車(chē)路線(xiàn)的保持;車(chē)內(nèi)攝像頭通過(guò)對(duì)駕駛者一定時(shí)間內(nèi)的眨眼次數(shù)進(jìn)行統(tǒng)計(jì),以判斷駕駛員的駕駛狀態(tài)。
2車(chē)道識(shí)別步驟及算法實(shí)現(xiàn)
車(chē)道線(xiàn)檢測(cè)和識(shí)別模塊主要流程如圖1 所示。
2.1ROI 區(qū)域劃分算法實(shí)現(xiàn)
收集實(shí)時(shí)圖像時(shí),圖像中會(huì)出現(xiàn)對(duì)數(shù)據(jù)處理結(jié)果產(chǎn)生干擾的區(qū)域,如路邊的電線(xiàn)桿、大石塊等。這些因素的出現(xiàn)會(huì)導(dǎo)致數(shù)據(jù)處理速度變慢甚至影響準(zhǔn)確性。為了排除非必要數(shù)據(jù)所帶來(lái)的干擾,通過(guò)圖像ROI 來(lái)解決這個(gè)問(wèn)題。ROI 通過(guò)在圖像上選擇或使用諸如設(shè)定閾值以及從其他文件轉(zhuǎn)換獲得等方法生成。ROI 區(qū)域可以是點(diǎn)、線(xiàn)、面、不規(guī)則的形狀,通常用來(lái)作為圖像分類(lèi)的樣本、掩膜、裁剪區(qū)。根據(jù)實(shí)際情況和模擬場(chǎng)景所提取到的數(shù)據(jù)來(lái)看,車(chē)道線(xiàn)的信息一般位于圖像中間靠下部分,因此需要對(duì)圖像進(jìn)行裁剪,從而減少計(jì)算時(shí)間、提高檢測(cè)精度[2] 。
2.2圖像灰度處理算法實(shí)現(xiàn)
為了減小后續(xù)圖像處理的計(jì)算量,提高系統(tǒng)的實(shí)時(shí)性能,需要將車(chē)外攝像頭采集到的實(shí)時(shí)彩色圖像轉(zhuǎn)變成灰度圖像(圖2)。灰度圖像將反映圖像局部和全體的色度與亮度階度的分布特征,并且灰度圖像消耗的內(nèi)存空間小。
2.3Canny 邊緣檢測(cè)算法實(shí)現(xiàn)
可以在精準(zhǔn)提取圖像邊緣的前提下,盡可能降低噪聲所產(chǎn)生的影響,并且將圖像中弱邊緣和強(qiáng)邊緣識(shí)別出來(lái)。對(duì)于路面磨損、不清晰等情況,Canny邊緣檢測(cè)的魯棒性強(qiáng),能夠綜合強(qiáng)弱邊緣的位置關(guān)系,計(jì)算出圖像整體邊緣信息。Canny 邊緣檢測(cè)算法如下。
使用高斯模糊對(duì)圖像進(jìn)行處理,保留邊緣信息,使用3×3 高斯濾波器:
采取非極大值抑制,比較圖像像素和梯度強(qiáng)度與正負(fù)兩個(gè)方向上的兩個(gè)像素,若當(dāng)前像素梯度強(qiáng)度大于其他兩個(gè)梯度時(shí),設(shè)置該點(diǎn)為邊緣點(diǎn),反之則該點(diǎn)將會(huì)被抑制。
檢測(cè)強(qiáng)邊緣和弱邊緣。設(shè)置兩個(gè)值為閾值。將檢測(cè)到的邊緣點(diǎn)梯度值與雙閾值進(jìn)行比較。若邊緣點(diǎn)梯度值大于較小閾值且小于較大閾值,則該點(diǎn)為弱邊緣;若該點(diǎn)梯度值小于小閾值,則刪除該點(diǎn)。
在進(jìn)行灰度處理后,系統(tǒng)將采用高斯濾波對(duì)圖像在傳輸過(guò)程中因?yàn)楦鞣N因素所干擾而產(chǎn)生的噪聲干擾進(jìn)行去除。通過(guò)高斯函數(shù)離散化處理,以離散點(diǎn)的高斯函數(shù)值為權(quán)重對(duì)圖像灰度矩陣的每個(gè)像素進(jìn)行加權(quán)平均,最后輸出結(jié)果(圖3)。
2.4霍夫變換對(duì)直線(xiàn)進(jìn)行檢測(cè)算法實(shí)現(xiàn)
為了在車(chē)道檢測(cè)的過(guò)程中將區(qū)域中的直線(xiàn)繪制出來(lái)(圖4),實(shí)現(xiàn)ROI 區(qū)域像素從笛卡爾x?y 坐標(biāo)系到霍夫k?b 坐標(biāo)系的轉(zhuǎn)換,使用了概率霍夫變換,其算法如下:(1)檢測(cè)直線(xiàn)上的所有像素點(diǎn),找到符合y=kx+b 的所有點(diǎn)坐標(biāo)(x,y);(2)將y=kx+b 轉(zhuǎn)換為b=-kx+y 的形式。y=kx+b 直線(xiàn)上的點(diǎn)在b=-kx+y 上都體現(xiàn)出經(jīng)過(guò)(k,b)點(diǎn),將這些點(diǎn)轉(zhuǎn)換為直線(xiàn);(3)圖像中所有b=-kx+y 的點(diǎn)都表示各種直線(xiàn)。若找到了直線(xiàn)的交點(diǎn),那么就找到了y=kx+b 坐標(biāo)中的直線(xiàn)。
2.5圖像實(shí)時(shí)回傳的處理方法
使用OpenCV 獲取實(shí)時(shí)畫(huà)面,并將畫(huà)面以窗口化方式呈現(xiàn)在車(chē)載電腦屏幕上。對(duì)實(shí)時(shí)屏幕畫(huà)面進(jìn)行典型處理,對(duì)傳回的圖像進(jìn)行灰度處理和canny 邊緣檢測(cè),最終可以達(dá)到每秒20 幀左右的畫(huà)面實(shí)時(shí)處理速度。如圖5 所示。
2.6提高邊緣檢測(cè)下直線(xiàn)精度的處理方法
將傳回的圖像直接進(jìn)行邊緣檢測(cè)處理時(shí),存在識(shí)別線(xiàn)條精度問(wèn)題:一些線(xiàn)條出現(xiàn)短線(xiàn)、斷層,這對(duì)車(chē)道的精準(zhǔn)識(shí)別產(chǎn)生影響。傳回邊緣檢測(cè)所產(chǎn)生的線(xiàn)條時(shí),以坐標(biāo)形式進(jìn)行函數(shù)劃分,在斷層處畫(huà)線(xiàn)連接,使用高斯模糊對(duì)圖像進(jìn)行邊緣化處理。
3使用Tensorflow API 中的部分方法實(shí)現(xiàn)目標(biāo)識(shí)別和碰撞預(yù)警
使用OpenCV 的目標(biāo)識(shí)別函數(shù)進(jìn)行動(dòng)態(tài)物體的識(shí)別,會(huì)導(dǎo)致識(shí)別效率低下[3] 。為了更好的解決上述問(wèn)題,選擇使用Tensorflow API 與已經(jīng)訓(xùn)練好的模型相結(jié)合,進(jìn)行實(shí)時(shí)識(shí)別并標(biāo)注車(chē)輛、行人、紅綠燈位置,還可以進(jìn)行距離碰撞預(yù)警(圖6)。主要方法如下。
4駕駛員駕駛狀態(tài)識(shí)別及算法實(shí)現(xiàn)
駕駛員駕駛狀態(tài)識(shí)別模塊主要流程如圖7 所示。
4.1使用OpenCV 進(jìn)行人臉識(shí)別的算法實(shí)現(xiàn)
通過(guò)OpenCV 調(diào)用攝像頭,使用基于dlib 的68 個(gè)特征點(diǎn)檢測(cè)模型進(jìn)行人臉識(shí)別、眼間距以及眨眼次數(shù)的統(tǒng)計(jì)。主要算法如下。
4.2Yolov5 進(jìn)行物品識(shí)別的算法實(shí)現(xiàn)
在前期進(jìn)行模型的訓(xùn)練,使系統(tǒng)具有識(shí)別手機(jī)、水杯的功能,并進(jìn)行系統(tǒng)自動(dòng)標(biāo)注( 圖8)。使用yoloV5 python 接口(detect.py)處理圖片并創(chuàng)建Flask服務(wù),主要算法如下。
4.3駕駛員駕駛疲勞判斷的算法實(shí)現(xiàn)
檢測(cè)駕駛員的瞳孔直徑,計(jì)算注目凝視、眼球轉(zhuǎn)動(dòng)、眉眼掃視、眼睛閉合的時(shí)長(zhǎng),確定駕駛員疲勞的程度。根據(jù)Perclos 算法檢測(cè)出駕駛員存在疲勞駕駛狀態(tài),系統(tǒng)就會(huì)發(fā)出預(yù)警信號(hào)。主要算法如下。
5總結(jié)
本文通過(guò)基于OpenCV 實(shí)現(xiàn)了攝像頭的視頻流處理,識(shí)別出當(dāng)前道路直線(xiàn)情況。同時(shí),調(diào)用TensorflowAPI 實(shí)現(xiàn)了行車(chē)障礙的識(shí)別和碰撞距離的預(yù)警;對(duì)于車(chē)內(nèi)駕駛員,通過(guò)OpenCV 和Yolov5 實(shí)現(xiàn)了對(duì)駕駛員駕駛狀態(tài)的檢測(cè)和特定物品識(shí)別,將大大增加駕駛安全性。本系統(tǒng)尚有不足之處,如對(duì)道路識(shí)別的準(zhǔn)確性、對(duì)特定物品識(shí)別的速度和精準(zhǔn)度等都有待提高,未來(lái)將逐漸完善此項(xiàng)工作,不斷提高系統(tǒng)的穩(wěn)定性和魯棒性。