鄭永濤,謝偉豪,陳逸群,何俊陽
(廣東工業(yè)大學(xué)華立學(xué)院,廣東廣州 511325)
縱觀道路交通上發(fā)生的交通事故,由駕駛員疲勞駕駛造成的交通事故不容小覷。而對于疲勞駕駛,一方面駕駛員自身很難發(fā)覺,另一方面即便發(fā)現(xiàn)了也不會引起駕駛員的重視[1-2]。為此,該文從駕駛員疲勞駕駛直觀表現(xiàn)出來的現(xiàn)象出發(fā),如駕駛過程中出現(xiàn)的連續(xù)打哈欠、犯困閉眼以及打盹等[3],設(shè)計了一款基于OpenCV 的駕駛員疲勞特征識別系統(tǒng),通過計算機(jī)視覺處理技術(shù),綜合分析判斷駕駛員當(dāng)前的駕駛狀態(tài),發(fā)出語音警告,提醒駕駛員并引起駕駛員的重視。
該系統(tǒng)設(shè)計以樹莓派4B 為核心主控制板,結(jié)合外接攝像頭采集圖像信息,完成圖像信息處理工作,并驅(qū)動語音警告系統(tǒng)實(shí)現(xiàn)提醒,在顯示屏模塊上顯示當(dāng)前的圖像采集結(jié)果,方便圖像分析及程序調(diào)試[4]。該系統(tǒng)由信息處理系統(tǒng)、信息采集系統(tǒng)、警告提醒系統(tǒng)、顯示系統(tǒng)組成,系統(tǒng)結(jié)構(gòu)整體設(shè)計框圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)整體設(shè)計框圖
為了更好地實(shí)現(xiàn)視覺處理,該系統(tǒng)設(shè)計采用樹莓派4B 為主控制板。該主控制板是一款迷你式電腦,具備與其他微控制器(如51 單片機(jī)和STM32)相同的IO 引腳之外,還搭載1.5 GHz 的64 位四核處理器、8 GB 的內(nèi)存、雙頻WiFi 和藍(lán)牙5.0,兩個micro-HDMI 端口控制分辨率高達(dá)4K 的雙顯示屏,四個USB 接口,其中有兩個數(shù)據(jù)傳輸速率可達(dá)5 Gbit/s 的USB3.0。將內(nèi)部環(huán)境配置好,以便燒錄代碼使用[5]。
攝像頭模塊采用USB 接口的CMOS 攝像頭,一方面考慮到主控制板上有四個USB 接口,并且相比主控制板上CSI 專用攝像頭接口來說,USB 接口在拔插使用過程中更為方便。而且在PC 平臺上進(jìn)行系統(tǒng)程序開發(fā)調(diào)試過程中,USB 攝像頭也可直接在PC平臺上使用[6];另一方面CMOS 型攝像頭相比CCD 型攝像頭,具有低成本、低耗能、圖像信息采集快、結(jié)構(gòu)簡單等優(yōu)勢。綜上,攝像頭模塊采用30 萬像素?zé)o畸變60 FPS CMOS OV7725 感光片攝像頭,兼容Linux系統(tǒng)、免驅(qū)動、640×480 像素、均支持自動曝光、白平衡及增益。
當(dāng)檢測到駕駛員處于疲勞駕駛狀態(tài)時,系統(tǒng)會發(fā)出相應(yīng)的語音警告,起到提醒作用。由于樹莓派的強(qiáng)大功能,外部硬件不需再接其他語音模塊,只需利用樹莓派自帶的藍(lán)牙5.0 與汽車內(nèi)藍(lán)牙配對連接或用3.5 mm 音頻接口外接揚(yáng)聲器即可。先用設(shè)備錄制一句“您已疲勞駕駛,請停車休息?!钡膚av 格式語音保存在樹莓派中,當(dāng)系統(tǒng)判斷出疲勞駕駛時再調(diào)用該語音進(jìn)行播放[7]。
顯示屏主要便于系統(tǒng)程序開發(fā)調(diào)試及觀察系統(tǒng)檢測識別情況,采用7 寸的分辨率為1 024×600 像素的顯示屏與樹莓派4B 兼容,再連接micro-HDMI接口。
系統(tǒng)開發(fā)除了搭建好相應(yīng)的硬件外,還要配置好相應(yīng)的環(huán)境來開發(fā)程序。該系統(tǒng)程序開發(fā)主要以raspbian 作為樹莓派的操作系統(tǒng),Python 作為開發(fā)語言,調(diào)用OpenCV 庫與Dlib 庫分別進(jìn)行圖像預(yù)處理和圖像特征提取,再經(jīng)過分析計算后進(jìn)行疲勞狀態(tài)的判斷,并作出語音警告。系統(tǒng)軟件整體設(shè)計流程圖如圖2 所示。
圖2 系統(tǒng)軟件整體設(shè)計流程圖
系統(tǒng)通過攝像頭實(shí)時獲取駕駛員的圖像,在采集過程中圖像會受到駕駛室內(nèi)等各種因素的影響,需要對圖像進(jìn)行預(yù)處理。OpenCV 擁有豐富的視覺處理算法,可以調(diào)用cvtColor 函數(shù),對圖像進(jìn)行灰度化、對cvSmooth 函數(shù)進(jìn)行平滑處理、對cvEqualizeHist函數(shù)進(jìn)行直方圖均衡化,對GaussianBlur 進(jìn)行高斯濾波[8-9]。處理過程如圖3 所示。
圖3 OpenCV圖像預(yù)處理過程
對于人臉檢測,Dlib 的檢測速度比OpenCV 的慢一些,但是其檢測精度比OpenCV 的高,而且擁有更多的人臉識別模型庫[10]。因此,該系統(tǒng)采用Dlib 庫,分 別調(diào)用dlib.get_frontal_face_detector 和dlib.shape_predictor 函數(shù)來實(shí)現(xiàn)圖像人臉檢測及圖像人臉特征提取,利用shape_predictor_68_face_landmarks.dat 開源模型對人臉模型進(jìn)行處理,獲取68 個特征點(diǎn)的位置坐標(biāo)[11-12],為接下來眼動、嘴型和頭部姿態(tài)關(guān)鍵點(diǎn)的提取做好準(zhǔn)備。
3.3.1 眼部疲勞特征及判定
在68 個人臉特征點(diǎn)中,37~42 被標(biāo)志為左眼,43~48 被標(biāo)志為右眼。以左眼為例,通過式(1)計算眼睛縱橫比EAR 值來檢測眨眼與合眼。
在眼部訓(xùn)練數(shù)據(jù)中發(fā)現(xiàn),睜眼時EAR 值會在固定的區(qū)域波動,合眼時EAR 值趨于零。因此,設(shè)置當(dāng)EAR≤0.2 時,視眼睛處于眨眼、合眼狀態(tài)[13]。為避免由于光線等因素刺激眼睛導(dǎo)致眨眼進(jìn)而出現(xiàn)誤判,以連續(xù)3 幀眼部圖像EAR≤0.2 視為眨眼、合眼一次;若以合眼超過2 s視為疲勞狀態(tài),那么當(dāng)系統(tǒng)檢測連續(xù)合眼13 次(以系統(tǒng)處理一幀圖像時間約為50 ms計算)便發(fā)出疲勞語音警告。眼部疲勞判定流程圖如圖4 所示。
圖4 眼部疲勞判定流程圖
3.3.2 嘴部疲勞特征及判定
疲勞狀態(tài)除了會合眼外,打哈欠也是最明顯的特征之一。根據(jù)被49~68 標(biāo)志的嘴型,用式(2)計算嘴巴縱橫比MAR 值來檢測張嘴。
與眼部訓(xùn)練數(shù)據(jù)相似,嘴部訓(xùn)練數(shù)據(jù)時,在打哈欠狀態(tài)下,嘴部張開明顯,因此,可以設(shè)置當(dāng)MAR≥0.8時,嘴巴處于張開狀態(tài)[14]。為了避免駕駛員說話等情況導(dǎo)致張嘴出現(xiàn)誤判,同樣以連續(xù)3 幀嘴部圖像MAR≥0.8 視為張嘴一次,如果連續(xù)張嘴13 次則視為一次深度哈欠,當(dāng)1 min 內(nèi)累計3 次深度哈欠,便發(fā)出疲勞語音警告。嘴部疲勞判定流程圖如圖5所示。
圖5 嘴部疲勞判定流程圖
3.3.3 頭部姿態(tài)疲勞特征及判定
打盹表現(xiàn)在疲勞駕駛過程中頭部傾斜、低頭等姿勢進(jìn)入短暫的睡眠狀態(tài),因此,該系統(tǒng)以低頭姿態(tài)作為疲勞檢測點(diǎn),以低頭持續(xù)時間作為疲勞判定。首先由68 個人臉特征點(diǎn)標(biāo)志的二維數(shù)字圖像通過3DMM(3D Morphable Model)匹配出三維空間立體頭部模型,調(diào)用OpenCV 中的solvePnp()函數(shù)獲得旋轉(zhuǎn)矩陣,最后將旋轉(zhuǎn)矩陣轉(zhuǎn)換成歐拉角,即頭部姿勢的仰俯角Pitch[15-16]。當(dāng)Pitch≤10 時,視頭部姿勢為低頭狀態(tài),為避免駕駛員看車載儀表盤等導(dǎo)致低頭出現(xiàn)誤判,同樣以連續(xù)3 幀頭部圖像Pitch≤10 視為低頭一次,如果連續(xù)低頭13 次則視為一次犯困點(diǎn)頭。當(dāng)1 min 內(nèi)累計3 次犯困點(diǎn)頭,便發(fā)出疲勞語音警告。頭部姿勢疲勞判定流程圖如圖6 所示。
圖6 頭部姿勢疲勞判定流程圖
將在PC 平臺上開發(fā)好的程序移植到樹莓派中,把攝像頭、樹莓派、顯示屏及揚(yáng)聲器搭建好后安裝在汽車駕駛室內(nèi),安裝位置如圖7 所示。
圖7 安裝調(diào)試系統(tǒng)
系統(tǒng)調(diào)試結(jié)果表明,在調(diào)整好攝像頭的角度及設(shè)置好對應(yīng)的閾值后,從顯示屏上調(diào)出識別界面,受試者坐在主駕駛位,分別模擬犯困合眼、打哈欠及困意點(diǎn)頭的動作,系統(tǒng)均能有效識別出疲勞駕駛狀態(tài),在顯示屏上能夠觀察出相關(guān)參數(shù)的變化,揚(yáng)聲器能發(fā)出語音警告。該識別系統(tǒng)整體運(yùn)行正常。
基于OpenCV 的駕駛員疲勞特征識別系統(tǒng)主要以樹莓派為數(shù)據(jù)信息處理核心,通過攝像頭對駕駛員進(jìn)行實(shí)時監(jiān)測,獲得圖像信息,聯(lián)合OpenCV 庫和Dlib 庫分別對圖像預(yù)處理和人臉特征進(jìn)行提取。通過提取駕駛員眼部、嘴部和頭部姿勢疲勞特征,即犯困下合眼、打哈欠、點(diǎn)頭,以此綜合分析判斷駕駛員的駕駛狀態(tài),對疲勞駕駛狀態(tài)進(jìn)行預(yù)警告。該系統(tǒng)設(shè)計簡單、成本低、易于安裝和操作,系統(tǒng)運(yùn)行良好,基本能實(shí)現(xiàn)預(yù)期目標(biāo),具有一定的實(shí)用價值。