王彥博, 張劍書, 孫新元
(南京工程學院計算機工程學院, 南京 211167)
疲勞駕駛行為是造成交通事故的主要因素之一,交通事故常常會造成巨大的經濟損失,甚至威脅到駕乘人的生命安全[1]。 據交通部統(tǒng)計,中國每年因疲勞駕駛導致的交通事故約占所有交通事故的20%,在特大交通事故中占比40%,且其發(fā)生數量呈現(xiàn)出逐年升高的趨勢[2]。 因此,通過各項技術手段實現(xiàn)對駕駛員的疲勞檢測,并及時給予提醒是必要的。
近年來,隨著機器視覺技術和機器學習的興起,人臉檢測和面部信息提取技術得到了進一步的發(fā)展,在人工智能等領域發(fā)揮著舉足輕重的作用,基于駕駛員的面部圖像數據分析面部狀態(tài),以實現(xiàn)對駕駛員疲勞檢測與預警,在駕駛安全領域具有重要的實用價值和研究意義[3]。 Hernandez 等[4]提出了以駕駛員腦電信號為基礎的疲勞檢測方法;在針對圖像數據的疲勞檢測方面,Majdi M S 等[5]提出了一種基于卷積神經網絡和隨機決策森林的駕駛員注意力分散檢測方法,其分類準確率能達到95%。
本文提出了一種基于機器視覺的駕駛人疲勞檢測算法,針對車內監(jiān)控設備采集的司機面部圖像進行預處理,提取出面部關鍵點信息;融合眼部、嘴部和頭部姿勢3 個特征,分別檢測駕駛員的眨眼、打哈欠和點頭行為,從而綜合評價駕駛人的疲勞狀態(tài)。
疲勞特征提取是實現(xiàn)疲勞檢測算法的前提。 與正常狀態(tài)相比,人在疲勞時,嘴巴、眼睛和頭部姿勢會表現(xiàn)出較大差異。 因此,基于機器視覺的疲勞檢測需要先提取被檢測目標的相關面部和頭部運動特征。 本文基于Dlib(一個包含機器學習算法和工具的C++工具包)中的人臉關鍵點檢測技術實現(xiàn)面部特征提取,Dlib 提供的人臉檢測模型能夠快速獲取到包括面部、眼睛、鼻子、嘴巴等部位輪廓的68 個關鍵點,如圖1 所示。

圖1 面部68 個關鍵點位置Fig. 1 The location of the 68 key points on the face
在檢測出這些關鍵點之后,可以通過計算眼睛和嘴巴縱向與橫向的比例,來判斷其張開與閉合程度,也可以將這68 個關鍵點間的信息,投射在3D模型上,獲得面部的朝向與姿勢,計算頭部旋轉的歐拉角,獲得頭部的姿態(tài)與動作。
從檢測到的68 個關鍵點中提取出左右眼睛的輪廓坐標,并計算眼部縱橫比EAR(Eye Aspect Ratio),可以估計駕駛人眼睛的張開或閉合程度,眼睛關鍵點位示意如圖2 所示。

圖2 眼部關鍵點Fig. 2 Key points of eyes
EAR1與EAR2分別表示左眼與右眼的縱橫比,Pn表示關鍵點坐標(xn,yn) ,左眼關鍵點序號為37~42,右眼關鍵點序號為43 ~48,取上述關鍵點對雙眼縱橫比進行計算,公式(1)和公式(2):
取EAR1與EAR2均值作為駕駛人當前狀態(tài)的EAR值。
將縱橫比公式運用在嘴部橫縱比MAR(Mouth Aspect Ratio)提取時,為了準確計算嘴巴的張開程度,主要提取序號為51、59、53、57 的關鍵點和序號為49、55 的關鍵點的橫坐標進行縱橫比的判斷,嘴部關鍵點示意圖如圖3 所示。

圖3 嘴部關鍵點Fig. 3 Key points of mouth
MAR計算公式(3)如下:
利用HPE(Head Pose Estimation,HPE)算法進行頭部姿勢預測。 首先需要獲得2D 人臉關鍵點坐標,并將2D 坐標分別與3D 人臉模型進行匹配,計算3D 與2D 關鍵點之間的轉換關系,根據旋轉矩陣求解歐拉角。 轉換時需要使用到世界坐標系(UVW)、相機坐標系(XYZ)、圖像中心坐標系(uv)和像素坐標系(xy)。
世界坐標系轉換到相機坐標系,公式(4):
相機坐標系轉換到像素坐標系,公式(5):
像素坐標系轉換到世界坐標系,公式(6):
圖像中心坐標系轉換到像素坐標系,公式(7):
由公式(4)~公式(7)可以獲得旋轉矩陣,基于此可以求出歐拉角,公式(8):
其中,θ、?和φ分別為章動角、旋進角和自轉角,三者共同構成歐拉角。
將2D 人臉關鍵點與3D 人臉模型進行映射匹配,根據旋轉矩陣計算頭部旋轉歐拉角,便可以獲得頭部姿勢和運動狀態(tài)。
駕駛人疲勞檢測算法通過融合EAR、MAR和HPE算法提取的眼部、嘴部和頭部姿勢3 個特征,實現(xiàn)對駕駛員面部狀態(tài)的實時檢測。 為了獲得更加合理的檢測閾值,本文在模擬疲勞駕駛的視頻數據集YawDD 上對算法和數值變化進行了實驗與測試。YawDD 數據集中包含29 位志愿者在靜止車輛中模擬長時間駕駛后的疲勞狀態(tài)錄制的正面視頻,視頻中志愿者的行為包括眨眼、打哈欠、注意力分散、交談等行為,視頻樣例如圖4 所示。

圖4 YawDD 數據集樣例Fig. 4 Example of YawDD dataset
通過眨眼、張嘴和頭部姿勢特征提取方法對YawDD 數據集中志愿者的視頻進行測試,得到的EAR和MAR數據變化趨勢曲線如圖5 所示。 從圖5可以發(fā)現(xiàn),駕駛員在眼睛睜開時,對應的EAR值在0.3 ~0.4 區(qū)間波動;而在出現(xiàn)眨眼或閉眼動作時,EAR值則會瞬間下降至0.2 以下,并趨于0。 因此,可以設置判斷眨眼的閾值為EAR <0.2 且保持2幀。

圖5 YawDD 數據集中EAR、MAR 變化曲線示例Fig. 5 Variation curve of EAR and MAR under fatigue state of volunteers in YawDD dataset
另外,駕駛員在正常狀態(tài)下,MAR值較小,交談時MAR值在0.3~0.5 之間上下波動;而在打哈欠時,MAR值將迅速增大至0.6 及以上,并會持續(xù)一段時間。 因此,在進行打哈欠檢測時將MAR閾值設置為0.6,當MAR >0.6 并保持12 幀之后,則計算為打哈欠一次。 此外,駕駛員平視前方時,視線水平角度約為0°,當低頭打瞌睡時,平視角度將會下降,因此可以將低頭檢測的閾值設置為0.3,即在一段時間內,低頭歐拉角大于20°或平視角度變換比例超過0.3 時,則認為低頭或點頭一次。
經過統(tǒng)計分析,駕駛人在疲勞駕駛狀態(tài)下的每分鐘平均眨眼次數超過20 次,打哈欠次數超過5次,并且會存在頭部角度較低,以此作為該段時間內疲勞判斷的標準,疲勞檢測的結果如圖6 所示。

圖6 疲勞檢測結果Fig. 6 Results of fatigue detection
本文提出了一種基于機器視覺的疲勞駕駛檢測方法,通過Dlib 完成了駕駛人面部關鍵點的檢測,并從中提取駕駛人疲勞狀態(tài)相關的特征,基于此實現(xiàn)對駕駛人疲勞狀態(tài)的實時檢測。 該方法僅需在車內部署一個小型監(jiān)控攝像頭,而不需要復雜的腦電設備或可穿戴設備,因此不會對駕駛人的動作或行為造成任何影響,具有一定的實際應用價值。