鄭永濤,謝偉豪,陳逸群,何俊陽
(廣東工業大學華立學院,廣東廣州 511325)
縱觀道路交通上發生的交通事故,由駕駛員疲勞駕駛造成的交通事故不容小覷。而對于疲勞駕駛,一方面駕駛員自身很難發覺,另一方面即便發現了也不會引起駕駛員的重視[1-2]。為此,該文從駕駛員疲勞駕駛直觀表現出來的現象出發,如駕駛過程中出現的連續打哈欠、犯困閉眼以及打盹等[3],設計了一款基于OpenCV 的駕駛員疲勞特征識別系統,通過計算機視覺處理技術,綜合分析判斷駕駛員當前的駕駛狀態,發出語音警告,提醒駕駛員并引起駕駛員的重視。
該系統設計以樹莓派4B 為核心主控制板,結合外接攝像頭采集圖像信息,完成圖像信息處理工作,并驅動語音警告系統實現提醒,在顯示屏模塊上顯示當前的圖像采集結果,方便圖像分析及程序調試[4]。該系統由信息處理系統、信息采集系統、警告提醒系統、顯示系統組成,系統結構整體設計框圖如圖1 所示。

圖1 系統結構整體設計框圖
為了更好地實現視覺處理,該系統設計采用樹莓派4B 為主控制板。該主控制板是一款迷你式電腦,具備與其他微控制器(如51 單片機和STM32)相同的IO 引腳之外,還搭載1.5 GHz 的64 位四核處理器、8 GB 的內存、雙頻WiFi 和藍牙5.0,兩個micro-HDMI 端口控制分辨率高達4K 的雙顯示屏,四個USB 接口,其中有兩個數據傳輸速率可達5 Gbit/s 的USB3.0。將內部環境配置好,以便燒錄代碼使用[5]。
攝像頭模塊采用USB 接口的CMOS 攝像頭,一方面考慮到主控制板上有四個USB 接口,并且相比主控制板上CSI 專用攝像頭接口來說,USB 接口在拔插使用過程中更為方便。而且在PC 平臺上進行系統程序開發調試過程中,USB 攝像頭也可直接在PC平臺上使用[6];另一方面CMOS 型攝像頭相比CCD 型攝像頭,具有低成本、低耗能、圖像信息采集快、結構簡單等優勢。綜上,攝像頭模塊采用30 萬像素無畸變60 FPS CMOS OV7725 感光片攝像頭,兼容Linux系統、免驅動、640×480 像素、均支持自動曝光、白平衡及增益。
當檢測到駕駛員處于疲勞駕駛狀態時,系統會發出相應的語音警告,起到提醒作用。由于樹莓派的強大功能,外部硬件不需再接其他語音模塊,只需利用樹莓派自帶的藍牙5.0 與汽車內藍牙配對連接或用3.5 mm 音頻接口外接揚聲器即可。先用設備錄制一句“您已疲勞駕駛,請停車休息。”的wav 格式語音保存在樹莓派中,當系統判斷出疲勞駕駛時再調用該語音進行播放[7]。
顯示屏主要便于系統程序開發調試及觀察系統檢測識別情況,采用7 寸的分辨率為1 024×600 像素的顯示屏與樹莓派4B 兼容,再連接micro-HDMI接口。
系統開發除了搭建好相應的硬件外,還要配置好相應的環境來開發程序。該系統程序開發主要以raspbian 作為樹莓派的操作系統,Python 作為開發語言,調用OpenCV 庫與Dlib 庫分別進行圖像預處理和圖像特征提取,再經過分析計算后進行疲勞狀態的判斷,并作出語音警告。系統軟件整體設計流程圖如圖2 所示。

圖2 系統軟件整體設計流程圖
系統通過攝像頭實時獲取駕駛員的圖像,在采集過程中圖像會受到駕駛室內等各種因素的影響,需要對圖像進行預處理。OpenCV 擁有豐富的視覺處理算法,可以調用cvtColor 函數,對圖像進行灰度化、對cvSmooth 函數進行平滑處理、對cvEqualizeHist函數進行直方圖均衡化,對GaussianBlur 進行高斯濾波[8-9]。處理過程如圖3 所示。

圖3 OpenCV圖像預處理過程
對于人臉檢測,Dlib 的檢測速度比OpenCV 的慢一些,但是其檢測精度比OpenCV 的高,而且擁有更多的人臉識別模型庫[10]。因此,該系統采用Dlib 庫,分 別調用dlib.get_frontal_face_detector 和dlib.shape_predictor 函數來實現圖像人臉檢測及圖像人臉特征提取,利用shape_predictor_68_face_landmarks.dat 開源模型對人臉模型進行處理,獲取68 個特征點的位置坐標[11-12],為接下來眼動、嘴型和頭部姿態關鍵點的提取做好準備。
3.3.1 眼部疲勞特征及判定
在68 個人臉特征點中,37~42 被標志為左眼,43~48 被標志為右眼。以左眼為例,通過式(1)計算眼睛縱橫比EAR 值來檢測眨眼與合眼。

在眼部訓練數據中發現,睜眼時EAR 值會在固定的區域波動,合眼時EAR 值趨于零。因此,設置當EAR≤0.2 時,視眼睛處于眨眼、合眼狀態[13]。為避免由于光線等因素刺激眼睛導致眨眼進而出現誤判,以連續3 幀眼部圖像EAR≤0.2 視為眨眼、合眼一次;若以合眼超過2 s視為疲勞狀態,那么當系統檢測連續合眼13 次(以系統處理一幀圖像時間約為50 ms計算)便發出疲勞語音警告。眼部疲勞判定流程圖如圖4 所示。

圖4 眼部疲勞判定流程圖
3.3.2 嘴部疲勞特征及判定
疲勞狀態除了會合眼外,打哈欠也是最明顯的特征之一。根據被49~68 標志的嘴型,用式(2)計算嘴巴縱橫比MAR 值來檢測張嘴。

與眼部訓練數據相似,嘴部訓練數據時,在打哈欠狀態下,嘴部張開明顯,因此,可以設置當MAR≥0.8時,嘴巴處于張開狀態[14]。為了避免駕駛員說話等情況導致張嘴出現誤判,同樣以連續3 幀嘴部圖像MAR≥0.8 視為張嘴一次,如果連續張嘴13 次則視為一次深度哈欠,當1 min 內累計3 次深度哈欠,便發出疲勞語音警告。嘴部疲勞判定流程圖如圖5所示。

圖5 嘴部疲勞判定流程圖
3.3.3 頭部姿態疲勞特征及判定
打盹表現在疲勞駕駛過程中頭部傾斜、低頭等姿勢進入短暫的睡眠狀態,因此,該系統以低頭姿態作為疲勞檢測點,以低頭持續時間作為疲勞判定。首先由68 個人臉特征點標志的二維數字圖像通過3DMM(3D Morphable Model)匹配出三維空間立體頭部模型,調用OpenCV 中的solvePnp()函數獲得旋轉矩陣,最后將旋轉矩陣轉換成歐拉角,即頭部姿勢的仰俯角Pitch[15-16]。當Pitch≤10 時,視頭部姿勢為低頭狀態,為避免駕駛員看車載儀表盤等導致低頭出現誤判,同樣以連續3 幀頭部圖像Pitch≤10 視為低頭一次,如果連續低頭13 次則視為一次犯困點頭。當1 min 內累計3 次犯困點頭,便發出疲勞語音警告。頭部姿勢疲勞判定流程圖如圖6 所示。

圖6 頭部姿勢疲勞判定流程圖
將在PC 平臺上開發好的程序移植到樹莓派中,把攝像頭、樹莓派、顯示屏及揚聲器搭建好后安裝在汽車駕駛室內,安裝位置如圖7 所示。

圖7 安裝調試系統
系統調試結果表明,在調整好攝像頭的角度及設置好對應的閾值后,從顯示屏上調出識別界面,受試者坐在主駕駛位,分別模擬犯困合眼、打哈欠及困意點頭的動作,系統均能有效識別出疲勞駕駛狀態,在顯示屏上能夠觀察出相關參數的變化,揚聲器能發出語音警告。該識別系統整體運行正常。
基于OpenCV 的駕駛員疲勞特征識別系統主要以樹莓派為數據信息處理核心,通過攝像頭對駕駛員進行實時監測,獲得圖像信息,聯合OpenCV 庫和Dlib 庫分別對圖像預處理和人臉特征進行提取。通過提取駕駛員眼部、嘴部和頭部姿勢疲勞特征,即犯困下合眼、打哈欠、點頭,以此綜合分析判斷駕駛員的駕駛狀態,對疲勞駕駛狀態進行預警告。該系統設計簡單、成本低、易于安裝和操作,系統運行良好,基本能實現預期目標,具有一定的實用價值。