張伯辰,施鑫杰,霍梅梅
(浙大城市學(xué)院,計(jì)算機(jī)與計(jì)算科學(xué)學(xué)院,杭州310015)
現(xiàn)代社會,隨著經(jīng)濟(jì)的發(fā)展和道路交通的日趨完善,汽車出行成為了人們生活不可或缺的組成部分。同時(shí),人們對生活質(zhì)量的要求與日俱增,為了達(dá)成目標(biāo)不得不在疲勞的狀態(tài)下工作奔波,而駕駛?cè)说钠跔顟B(tài)會大大增加車禍發(fā)生的概率。為了避免許多因疲勞駕駛造成的車禍,構(gòu)建智能交通系統(tǒng)[1],做好對駕駛?cè)说淖⒁饬ΡO(jiān)控十分必要。理論上,駕駛輔助系統(tǒng)可以依靠監(jiān)控駕駛?cè)说纳硇盘枴⒉僮餍袨椤④囕v狀態(tài)以及面部表情判定其疲勞程度,一般地,面部行為的判定最直接有效反映駕駛?cè)藸顟B(tài)。
一個(gè)疲勞駕駛檢測系統(tǒng)需要滿足對駕駛?cè)说膶?shí)時(shí)監(jiān)控、疲勞判定、實(shí)時(shí)告警等,本文在系統(tǒng)的軟硬件架構(gòu)設(shè)計(jì)方面采用輕量化方案。原型系統(tǒng)的設(shè)計(jì)基于Python腳本語言,選擇OpenCV跨平臺機(jī)器視覺庫[2],在圖像處理、計(jì)算機(jī)視覺等方面均有豐富的第三方開發(fā)支持,為系統(tǒng)的實(shí)現(xiàn)提供了輕量化構(gòu)建的基礎(chǔ)。選擇樹莓派(Raspberry Pi)作為基礎(chǔ)硬件載體,樹莓派在滿足該系統(tǒng)的功能需求的同時(shí)大大降低了系統(tǒng)的成本,此外,硬件良好的性能能夠保證疲勞監(jiān)控的靈活性,給未來的系統(tǒng)功能拓展奠定了良好基礎(chǔ)。
疲勞駕駛檢測系統(tǒng)在樹莓派平臺上進(jìn)行開發(fā),通過I/O引腳能夠方便地控制具備特殊功能的底層硬件。硬件組成主要包括攝像頭模塊和語音模塊,其中,攝像頭模塊選用motionEyeOS紅外夜視攝像頭。
在樹莓派上搭建OpenCV運(yùn)行環(huán)境,下載mo?tionEyeOS系統(tǒng)鏡像文件并完成配置。在對駕駛?cè)诉M(jìn)行疲勞檢測時(shí),將攝像頭安裝在駕駛?cè)松戏剑_啟攝像頭,運(yùn)行算法,系統(tǒng)會自動實(shí)時(shí)采集臉部圖像,并對圖像做灰度化、關(guān)鍵點(diǎn)檢測、3D特征提取等操作進(jìn)行人臉識別。如圖1所示,系統(tǒng)將眨眼頻率[3]、哈欠頻率[4]和頭部姿勢[5]作為疲勞判定依據(jù),當(dāng)系統(tǒng)實(shí)時(shí)判定駕駛?cè)颂幱谄跔顟B(tài)時(shí),通過語音模塊告警。

圖1 軟件工作流程
(1)利用OpenCV提供的框架提取視頻文件;
(2)從視頻流循環(huán)中讀取圖像,對圖像做維度擴(kuò)大,并進(jìn)灰度化;
(3)2D人臉關(guān)鍵點(diǎn)檢測,獲取臉部位置特征信息,并轉(zhuǎn)換為數(shù)組格式;
(4)設(shè)置閾值;
(5)分別提取左右眼坐標(biāo),構(gòu)造函數(shù)計(jì)算眼部特征EAR值,并使用平均值作為最終的EAR;
(6)提取嘴部坐標(biāo),構(gòu)造函數(shù)計(jì)算嘴部特征MAR值;
(7)3D人臉模型匹配,求解3D點(diǎn)與對應(yīng)原2D點(diǎn)的轉(zhuǎn)換關(guān)系,求解頭部旋轉(zhuǎn)姿態(tài)歐拉角,結(jié)合眼部和嘴部特征判定瞌睡點(diǎn)頭;
(8)獲得規(guī)定時(shí)間內(nèi)眨眼頻率、打哈欠頻率,點(diǎn)頭頻率,超過閾值則發(fā)出疲勞示警。
(1)提取幀圖像檢測人臉,進(jìn)行畫圖操作,用矩形框標(biāo)注人臉,并對2D人臉圖像標(biāo)識68個(gè)關(guān)鍵特征點(diǎn)。
(2)分別計(jì)算左眼和右眼的EAR值求平均作為最終的EAR值,若小于閾值,則記眨眼一次;每三秒計(jì)算眨眼頻率若大于1.5倍的正常眨眼頻率,則判定為疲勞狀態(tài);同理可通過打哈欠判斷是否疲勞。
(3)通過計(jì)算頭部上下旋轉(zhuǎn)的歐拉角度,若角度小于-30°則判定為低頭行為,同時(shí)若眨眼頻率或打哈欠頻率比正常情況高則判定為疲勞狀態(tài)。
(4)若觸發(fā)疲勞示警,控制顯示器和蜂鳴器發(fā)出提示,則所有計(jì)算結(jié)果清零。

圖2 軟件功能實(shí)現(xiàn)
3.1.1 人臉位置信息獲取
首先,利用OpenCV讀寫視頻流,循環(huán)出圖像幀,初始化DLIB的人臉檢測器(HOG),然后創(chuàng)建面部標(biāo)志物預(yù)測。引入并使用人臉識別算法應(yīng)用中的開源檢測器工具[6]dlib.get_frontal_face_detector和dlib.shape_predictor構(gòu)建人臉位置檢測器,再獲取人臉特征關(guān)鍵點(diǎn)。
對從視頻流中循環(huán)讀取出的幀圖像做維度擴(kuò)大,并通過OpenCV進(jìn)灰度化。使用detector(gray,0)進(jìn)行人臉位置檢測,使用predictor(gray,0)獲取人臉特征關(guān)鍵點(diǎn)的位置信息,其中,gray表示灰度圖。將獲取的信息轉(zhuǎn)換為array數(shù)組格式。
3.1.2 畫圖操作
使用cv2.convexHull獲取array數(shù)組的凸包位置,并使用drawContours畫出輪廓位置,進(jìn)行畫圖操作。使用shape_predictor_68_face_landmarks.dat,可以得到68個(gè)特征點(diǎn)位置的坐標(biāo)。結(jié)果如圖3所示,標(biāo)識出68個(gè)特征關(guān)鍵點(diǎn),并用矩形框標(biāo)注人臉。

圖3 關(guān)鍵點(diǎn)標(biāo)識
3.2.1 人眼信息識別
根據(jù)已經(jīng)得到的68個(gè)特征點(diǎn)位置的坐標(biāo),分別獲取所圖4所示的左右眼面部標(biāo)志的索引E1、E2、E3、E4、E5、E6,并計(jì)算眼睛長寬比[7]EAR值:


圖4 人眼標(biāo)志坐標(biāo)
當(dāng)人眼處于正常睜開狀態(tài)時(shí),EAR值在某個(gè)值上下波動。閉眼過程中,EAR值迅速下降,理論上,當(dāng)完全閉合后,EAR值將為零。由于視頻檢測存在誤差,因此本文認(rèn)為當(dāng)EAR值低于某個(gè)閾值時(shí),判定眼睛處于閉合狀態(tài)。
人眼眨眼速度較快,一般情況下,1~3幀就可以完成一次眨眼動作,而在疲勞狀態(tài)下,眨眼頻率會下降。實(shí)際過程下,根據(jù)EAR值的變化,若EAR值小于閾值,則記一次眨眼。在判定疲勞時(shí),計(jì)算三秒內(nèi)的眨眼頻率,若大于1.5倍的正常眨眼頻率,則判定為疲勞。其中包含的兩個(gè)閾值都要根據(jù)實(shí)際情況設(shè)置。
3.2.2 嘴部信息識別
同眨眼判定過程理,本文利用嘴部關(guān)鍵點(diǎn)計(jì)算嘴部長寬比[8]MAR值:

一般情況下的張嘴行為持續(xù)的時(shí)間較短,而在打哈欠過程中張嘴時(shí)間會延長,根據(jù)MAR值的變化來判斷張嘴及張嘴的時(shí)間,從而確定是否在打哈欠。記錄規(guī)定時(shí)間內(nèi)的MAR值,若連續(xù)三次小于閾值,則判定人體處于疲勞狀態(tài)。打哈欠判定的關(guān)鍵在于通過大量模型訓(xùn)練區(qū)分打哈欠和唱歌等非疲勞行為。
3.2.3 頭部信息識別
眨眼和打哈欠的判定只需要通過2D人臉關(guān)鍵點(diǎn)檢測,幀與幀之間的對比就可以得到效果,而點(diǎn)頭的判定需要引入3D人臉模型匹配,并求解3D點(diǎn)和對應(yīng)2D點(diǎn)的轉(zhuǎn)換關(guān)系,來判定點(diǎn)頭行為。
首先,引入相機(jī)模型中四個(gè)坐標(biāo)系,世界坐標(biāo)系、相機(jī)坐標(biāo)系、圖像中心坐標(biāo)系和像素坐標(biāo)系。攝像頭成像過程是三維的,通過構(gòu)建這四個(gè)坐標(biāo)系,就可以得到旋轉(zhuǎn)矩陣,從而求解頭部姿勢旋轉(zhuǎn)的歐拉角,若角度小于-30°,則判定低頭行為。
實(shí)際情況下,駕駛?cè)说狞c(diǎn)頭行為不僅發(fā)生在疲勞狀態(tài)下,也可能是主動行為。因此,本算法規(guī)定當(dāng)駕駛?cè)诉B續(xù)出現(xiàn)低頭行為的同時(shí),若眨眼頻率和張嘴頻率均較正常情況低,則判定為瞌睡點(diǎn)頭。
本文選擇的語音模塊是有源蜂鳴器,這種蜂鳴器與樹莓派配套使用,其內(nèi)部帶震蕩源,單片機(jī)一個(gè)高低電平就可以發(fā)出聲音。系統(tǒng)既定疲勞判定標(biāo)準(zhǔn),駕駛?cè)艘怀霈F(xiàn)疲勞狀態(tài),該語音模塊就會發(fā)出提示,直至駕駛?cè)瞬辉偬幱谄跔顟B(tài)。
疲勞駕駛檢測如圖5所示,圖中紅色立方體為根據(jù)頭部姿勢重新建立的空間姿態(tài)立方體,將它與圖像中的標(biāo)準(zhǔn)坐標(biāo)對比后的結(jié)果見圖中X、Y、Z,由右上角圖可見當(dāng)眨眼頻率和哈欠頻率較高時(shí)該算法能及時(shí)給出警告。本文使用采集了100組含疲勞狀態(tài)的駕駛視頻對本系統(tǒng)算法進(jìn)行準(zhǔn)確率檢驗(yàn),由于算法中的參數(shù)因人而異因此檢測到疲勞行為的準(zhǔn)確率在87%左右。

圖5 系統(tǒng)性能測試
本文首先選擇樹莓派作為硬件架構(gòu),采用OpenCV、Dlib等開源資源對駕駛?cè)诉M(jìn)行人臉識別,實(shí)現(xiàn)了實(shí)時(shí)疲勞告警的功能需求,因其設(shè)備便攜度高,可以廣泛應(yīng)用于汽車出行。該系統(tǒng)圍繞深度學(xué)習(xí)和物聯(lián)網(wǎng)知識體系,具備良好的可維護(hù)性和可拓展性。經(jīng)過進(jìn)一步訓(xùn)練與改進(jìn),能夠成為一個(gè)功能更加完備,人機(jī)交互更加舒適的疲勞駕駛檢測系統(tǒng)。