王紅君, 白浩*, 趙輝,2, 岳有軍
(1.天津理工大學電氣電子工程學院, 天津 300384; 2.天津農(nóng)學院工程技術學院, 天津 300392)
基于駕駛員面部特征分析的疲勞檢測算法具有非接觸、準確、低成本及易實現(xiàn)等優(yōu)點,因此,基于計算機視覺技術研發(fā)汽車駕駛員疲勞駕駛預警系統(tǒng)具有廣闊的應用前景。 Isaza等[1]提出了一種利用數(shù)字圖像處理和機器學習技術的駕駛警報狀態(tài)動態(tài)設定點模型。通過運行Harr描述符的算法控制Python編寫的Open CV庫來檢測人臉部位進而進行疲勞判定;閆保中等[2]通過眼部寬高比檢測人眼閉合程度,并提出將人眼視線方向應用于疲勞駕駛檢測算法中,判斷注意力是否分散,以便在駕駛員陷入深度疲勞之前對其進行預警;潘志庚等[3]利用Adaboost算法進行人臉檢測,根據(jù)人臉“三庭五眼”的分布特征分割出大致的人眼區(qū)域,結(jié)合眼睛矩形區(qū)域的長寬比、擬合橢圓面積、瞳孔黑色素對眼部特征進行疲勞分析?;隈{駛員面部特征進行疲勞檢測有實時、便捷、經(jīng)濟性高等優(yōu)勢,但是在實際駕車過程中仍然存在魯棒性差、結(jié)果受外界因素影響較大、難以適應復雜光線及背景、對佩戴眼鏡的駕駛員檢測不夠準確等問題。
目前,針對駕駛員疲勞檢測中存在的不足有:①可供參考的疲勞指標過于單一,由于駕駛環(huán)境差別及光照的影響,檢測結(jié)果的準確性和可靠性難以得到保證;②未能有效解決駕駛員因個體差異所表現(xiàn)的不同疲勞特征所帶來的影響;③未能有效解決駕駛員在臨界疲勞狀態(tài)下的判斷及疲勞分級預警問題。為此,提出了一種基于計算機視覺的駕駛員面部多特征疲勞檢測分級預警算法。截取影視片段視頻作為樣本,對于不同駕駛員的疲勞特征指標進行采集,再利用數(shù)學方法計算出相應閾值,有效減少因駕駛員面部特征的差異給檢測結(jié)果帶來的影響,融合眨眼頻率、閉眼次數(shù)、perclos[4]以及打哈欠頻率4個指標建立疲勞分級判定模型,為提高駕駛員疲勞駕駛狀態(tài)的智能化檢測水平提供科學參考。
對視頻流目標進行識別與跟蹤時,首先需要對采集到的彩色視頻流逐幀灰度化,因為相較于彩色圖像來說,灰度圖像的數(shù)據(jù)量較小,更容易保證算法的實時性,從圖像處理學角度來看,顏色本身容易受光照影響,因此難以提供關鍵信息,灰度圖像則可以完整保留反映物體本質(zhì)屬性的梯度[5]。彩色圖像的每個像素至少有R、G、B3個通道,而灰度化處理之后,極大簡化了矩陣維度,降低了算法的空間復雜性,提高了運算速率。首先將實時檢測的視頻轉(zhuǎn)為視頻流文件,然后循環(huán)讀取每一幀圖像,并利用Gamma校正將彩色圖圖像進行灰度化處理,灰度化Gray公式如式(1)所示,圖像灰度化效果如圖1所示。

(1)

圖1 彩色圖像和灰度化圖像對比Fig.1 Comparison of color image and grayscale image
人臉檢測分為3個階段:首先,采用多線程優(yōu)化后的Dlib人臉檢測器實現(xiàn)對駕駛員人臉的追蹤與定位;其次,調(diào)用Dlib開源庫中人臉關鍵點檢測器實時檢測并標記出眼部和嘴部在內(nèi)的68個相應特征點[6];最后利用相似變換對人臉關鍵點對齊,將非正面人臉旋轉(zhuǎn)成正臉來進行特征提取。
方向梯度直方圖(histogram of oriented gradient,HOG)特征是一種在圖像處理中進行物體檢測的特征描述子,該算法的基本流程如下。
步驟1計算圖像梯度。分別計算圖像的橫坐標和縱坐標方向的梯度,然后再計算出每個像素位置的梯度方向值并對此進行求導,這樣一來,不僅可以削弱光照對檢測算法的影響,而且可以有效提取人臉輪廓的邊緣信息。圖像中像素點(x,y)的梯度表達式為
Gx(x,y)=H(x+1,y)-H(x-1,y)
(2)
Gy(x,y)=H(x,y+1)-H(x,y-1)
(3)
式中:Gx(x,y)和Gy(x,y)分別為像素點在水平和垂直方向上的梯度;H(x,y)為像素點(x,y)的像素值。
像素點(x,y)處的梯度幅值和梯度方向的表達式分別為

(4)

(5)
步驟2細胞單元構建梯度方向直方圖。將獲取的圖像分割成若干個單元,在每個單元內(nèi)進行梯度大小和方向的統(tǒng)計,并將結(jié)果做成直方圖。
步驟3梯度歸一化。由于光照和背景的變化具有多樣性,而每次光照或者背景發(fā)生較大變化時,梯度強度的變化也會非常大,這會影響到目標檢測的準確率。為了增強模型對光照強度的魯棒性,將相鄰的M個單元合并成區(qū)塊,對區(qū)塊進行對比度歸一化處理,再將區(qū)塊內(nèi)單元的特征向量進行組合,形成HOG特征,用于表征獲取的整張圖象。
采用級聯(lián)回歸樹(ensemble of regression trees,ERT)算法,即基于梯度提高學習的回歸樹方法進行面部68個特征點檢測并標定[7-8],如圖2所示。
為了避免攝像頭采集到的圖像非正臉情況從而影響疲勞特征的提取,采用相似變換對人臉進行對齊,效果如圖3所示。

圖2 面部特征提取結(jié)果Fig.2 Facial feature extraction results

圖3 人臉關鍵點對齊Fig.3 Alignment of face key points
采用的相似變換可以由平移變換、旋轉(zhuǎn)變換以及各向同性縮放變換復合而成,其變換矩陣為

(6)
式(6)中:左上角2×2矩陣為旋轉(zhuǎn)部分;tx和ty為平移因子;s*為縮放因子。
疲勞檢測對實時性要求很高,通過調(diào)用多線程方式來優(yōu)化Dlib人臉檢測速度,線程是CPU調(diào)度和分派的基本單位,主要負責執(zhí)行當前的應用程序,同屬進程的其他線程也可以共享進程的全部資源。在人臉檢測階段,采用多個線程同時調(diào)用策略,在調(diào)用的過程中適當減小分辨率來提升人臉檢測速度,然后,使用回調(diào)為后續(xù)幀畫圖,再使用隊列保證輸出幀的順序和輸入順序一致,確保每一幀都被處理,在提升檢測速度的基礎上保證檢測的準確率。經(jīng)過實驗驗證,所提出的人臉檢測加速策略可以達到52.58 幀/s,較改進前的模型提升了23.75 幀/s,本文策略可以實時定位跟蹤駕駛員人臉位置,可以滿足后文針對駕駛員疲勞檢測的要求。
基于TMS320DM642芯片進行駕駛員疲勞檢測設計,系統(tǒng)包括圖像采集模塊、CPU處理模塊、電源模塊以及語音報警模塊組成。
硬件結(jié)構如圖4所示,系統(tǒng)工作原理是:首先圖像采集模塊利用攝像頭采集駕駛員面部圖像,經(jīng)過A/D轉(zhuǎn)換后,將數(shù)字圖像傳入CPU處理模塊進行人臉檢測、人臉關鍵點定位以及疲勞狀態(tài)的判定。電源模塊通過轉(zhuǎn)換電路給片內(nèi)資源供電,當系統(tǒng)判定駕駛員處于疲勞狀態(tài)時,會通過音頻輸出接口MCASP使語音預警模塊工作,對駕駛員發(fā)出警告。

EMIF為外部存儲器連接接口;MCASP為多通道音頻串行端口圖4 硬件結(jié)構Fig.4 Hardware structure
具體配置如下:采用MT9V034的CMOS攝像頭,Inter Core i7-8565U@1.80 GHz 四核CPU,運行內(nèi)存為64 GB,512 GB固態(tài)硬盤;編程語言Python采用3.8版本。
駕駛員眼部的運動和眨眼信息被認為是反映疲勞狀態(tài)的重要信息[9-10],眼部疲勞檢測算法是實時計算眼睛縱橫比EAR,即眼睛縱向界標與橫向界標之間的歐式距離比值[11]。在3.2節(jié)中獲取了人臉關鍵特征點,對于每只眼睛都有6個對應的特征點,以右眼為例,如圖5所示。EAR計算公式為

(7)
當駕駛員眼睛睜開時,EAR值通常保持動態(tài)平衡,但是當駕駛員眼睛閉和時,EAR值會迅速下降;當眼睛再次睜開時EAR值又恢復到相對穩(wěn)定狀態(tài),因此,可以將復雜的圖像處理問題轉(zhuǎn)變?yōu)檠劬μ卣鼽c之間的歐氏距離比值。分別計算駕駛員左眼和右眼的EAR值并求出均值如圖6所示。

P1~P6為對應的6個特征點圖5 人眼特征點提取Fig.5 Extraction of human eye feature points

圖6 左右眼EAR值Fig.6 EAR value of left and right eyes
嘴部疲勞特征同樣也是檢測駕駛員疲勞程度的重要參考依據(jù)[12-13],與EAR定義相似,提出嘴巴長寬比MAR指標,相比于嘴部外部輪廓,由于嘴部內(nèi)部輪廓更能直觀反映嘴部張開程度,因此,選用內(nèi)輪廓8個特征點M1~M8對嘴部進行張度計算,嘴部特征如圖7所示,MAR計算公式為

(8)

圖7 嘴部特征點提取Fig.7 Extraction of feature points of the mouth
由于打哈欠和平時說話、大笑、吃東西或者驚訝一樣,嘴部都有明顯的張度變化,所以,需要設定閾值區(qū)分打哈欠和其他情況下嘴部張度變化以避免預警的誤判,圖8為檢測者正常說話、打哈欠的MAR值折線圖。
為了確定駕駛員在清醒情況下EAR值以及MAR值的波動范圍,參考DFEW(dynamic facial expression in the wild)數(shù)據(jù)集,其采集方式是截取超過1 500部的影視片段,選取其中300部不同背景下的影視片段作為樣本視頻,樣本視頻中涵蓋了不同年齡、不同性別以及不同種族的人群,為了提高檢測人眼特征時的魯棒性,樣本視頻中還選取了大量佩戴眼鏡的人群用來增加眼睛特征區(qū)域的多樣性。通過實時檢測視頻流中EAR的最大值EAR,max和最小值EAR,min,以及MAR的最大值MAR,max和最小值MAR,min,再參考perclos中P80標準確定EAR和MAR的閾值,計算公式為
MAR=(MAR,max-MAR,min)(1-X1)+MAR,min
(9)
EAR=(EAR,max-EAR,min)(1-X2)+EAR,min
(10)
取X1為0.2,即嘴部張度為最大張度的80%視為打哈欠一次,同理,取X2為0.8,即眼睛閉合程度達到眼瞼覆蓋瞳孔80%視為閉眼,經(jīng)過反復實驗,確定相應閾值如表1所示。

圖8 正常說話及打哈欠的MAR折線圖Fig.8 MAR line chart of normal speaking and yawning

表1 EAR和MAR閾值確定Table 1 EAR and MAR threshold determination
通過增加樣本的類別和數(shù)量,可以有效減少因為駕駛員面部特征的差異給檢測結(jié)果帶來的影響,提高了疲勞檢測系統(tǒng)的魯棒性和普適性。
通過3.3節(jié)計算出的EAR和MAR的閾值,可以針對輸入的視頻流對駕駛員眨眼頻率、閉眼次數(shù)、打哈欠頻率及perclos這4個指標進行實時檢測[14-15],當EAR值小于閾值時可以記作駕駛員眨眼一次,如果EAR值連續(xù)10幀都小于閾值時可視為閉眼一次,記作N,當EAR值連續(xù)10幀都大于閾值時可視為打哈欠一次。
眨眼頻率的計算公式為

(11)
式(11)中:n為單位時間內(nèi)檢測到的駕駛員累計眨眼次數(shù),即EAR值小于閾值時的次數(shù);NP為單位時間內(nèi)視頻的總幀數(shù)。
打哈欠頻率計算公式為

(12)
perclos是卡內(nèi)基梅隆研究所提出的可以度量疲勞的物理量,經(jīng)過反復實驗和認證,perclos值被認為是最可靠最有效的駕駛員警覺性水平的測定指標。perclos定義為眼瞼閉合的百分比,是指單位時間內(nèi)測得的眼睛閉合時長占總時長的比值[16-17]。研究表明,P80指標與疲勞駕駛的相關性最高,因此,采用P80標準對駕駛員眼部疲勞特征進行判定,如圖9所示。

t0~t5表示一個完整眨眼周期圖9 perclos值Fig.9 The value of perclos
具體來說,如果瞳孔的整體面積被眼瞼覆蓋超過80%,則認為眼睛是閉合的,可知在一個周期內(nèi)perclos的表達式為

(13)
由于攝像頭采集圖像的頻率是固定的,因此,計算單位時間內(nèi)的perclos值可以轉(zhuǎn)化為計算單位時間內(nèi)所采集到的圖像中眼睛閉合的連續(xù)幀數(shù)NK占該時間內(nèi)視頻圖像總幀數(shù)NP的比值,其表達式為

(14)
根據(jù)3.4節(jié)計算可得出眨眼頻率、閉眼次數(shù)N、眼瞼閉合時間百分比perclos以及打哈欠頻率[18-20],鑒于得到的疲勞評判指標所屬的量綱單位不同,若將疲勞指標進行綜合評價,則需要對數(shù)據(jù)進行標準化處理,利用最大最小標準化(min-max normalization)實現(xiàn)數(shù)據(jù)歸一化處理,其轉(zhuǎn)換公式為

(15)
式(15)中:x′為指標融合數(shù)值;xi為實時檢測到的疲勞指標數(shù)值;xmin、xmax分別為該疲勞指標在檢測過程中的最小值和最大值,如表2所示。

表2 疲勞指標最值
歸一化處理之后的數(shù)據(jù)都是無量綱化的小數(shù),并且集中在[0,1]區(qū)間內(nèi)。因此,不同單位的數(shù)據(jù)對目標函數(shù)的影響程度是一致的,各指標之間可以進行比較或加權。根據(jù)各指標表現(xiàn)駕駛員疲勞的可靠性程度設置不同權重,計算公式為

1.0X3+0.8X4]
(16)
式(16)中:X為綜合疲勞指標。
綜合疲勞指標X的取值同樣也在[0,1]區(qū)間內(nèi),根據(jù)不同情景對應的綜合疲勞指標的取值,可以將疲勞分為5個等級,綜合疲勞指標越高,代表越疲勞,如表3所示。

圖10 疲勞駕駛檢測算法流程Fig.10 Fatigue driving detection algorithm flow
機動車駕駛員疲勞檢測系統(tǒng)的主要目標是快速準確的識別疲勞狀態(tài)并作出相應地預警措施,具體步驟如下。
步驟1圖像預處理,對采集到的視頻流逐幀進行灰度化。
步驟2利用多線程優(yōu)化后的Dlib開源庫人臉檢測模型檢測出攝像頭實時獲取視頻流中駕駛員的人臉圖像并定位。
步驟3基于人臉圖像,使用Dlib開源庫中的人臉關鍵點檢測器對駕駛員的面部特征進行提取,從而定位出駕駛員的眼部和嘴部并標記對應的特征點。
步驟4根據(jù)人臉關鍵點計算出駕駛員的眼睛縱橫比EAR和嘴部長寬比MAR,實現(xiàn)對駕駛員眨眼頻率、閉眼次數(shù)、perclos值以及打哈欠頻率這四個疲勞指標的檢測。
步驟5采用多特征融合策略,對實時檢測到的疲勞指標進行歸一化處理,根據(jù)對應疲勞場景將駕駛員的疲勞狀態(tài)進行分級,實現(xiàn)對疲勞駕駛的預警。本文算法總體流程如圖10所示,整體功能通過Python代碼實現(xiàn)。

表3 疲勞分級
選擇YAWDD數(shù)據(jù)集作為實驗驗證樣本,YAWDD數(shù)據(jù)集是由渥太華大學在真實駕駛環(huán)境下利用自然光采集的不同年齡不同種族的視頻數(shù)據(jù)集,記錄了駕駛員在駕車過程中正常說話、打哈欠、眨眼等駕駛狀態(tài)。通過輸入視頻流對樣本視頻中的駕駛員進行眼部、嘴部疲勞特征指標的檢測并記錄,如表4~表6所示。以實際檢測到的指標數(shù)值為基礎將該視頻流中的駕駛員疲勞狀態(tài)分級,并分析結(jié)果,測試者檢測結(jié)果如圖11所示。

blink frequency表示實時檢測到的眨眼頻率;closed number和yawn number分別表示閉眼次數(shù)和打哈欠次數(shù)圖11 檢測視頻實驗結(jié)果Fig.11 Experimental results of detection video

表4 眼部特征指標

表5 嘴部特征指標

表6 綜合疲勞指標分級
針對Dlib采用多線程方式進行優(yōu)化,有效的提高了人臉檢測速度,然后在人臉關鍵點標定的基礎上進行關鍵點對齊處理,提高了檢測疲勞指標的準確率,截取大量影視劇視頻作為數(shù)據(jù)集,結(jié)合數(shù)學方法求取相關閾值,降低了因為駕駛員個體差異給檢測結(jié)果帶來的影響,融合眨眼頻率、閉眼次數(shù)、perclos值以打哈欠頻率4個疲勞判定指標建立疲勞分級模型,不僅解決了疲勞指標單一的問題,而且彌補了駕駛員臨界疲勞狀態(tài)下檢測的不足。實驗驗證表明,在疲勞駕駛檢測中,本文算法的準確性、實時性都表現(xiàn)良好,對研發(fā)駕駛員疲勞駕駛檢測與預警設備具有重要價值。