閆 河,楊曉龍,張 楊,董鶯艷,王 鵬
(重慶理工大學 計算機科學與工程學院,重慶 400054)
國內外研究現狀顯示,駕駛員疲勞[1]檢測方法大致分為3類:①基于車輛行駛行為檢測,包括方向盤轉動幅度檢測和車輛偏離車道檢測[2]等;②基于駕駛員生理信息檢測,包括利用心電圖信息檢測和腦電圖信息檢測[3-5];③基于駕駛員面部行為檢測[6-9],包括:眨眼頻率檢測、嘴部狀態檢測、頭部姿態檢測等。3類方法中,基于駕駛員面部行為檢測實時效果好,準確性高和魯棒性強,是近些年研究的熱點[10]。何俊等[10]和耿磊等[11]對眼睛狀態和嘴巴狀態的進行檢測,這些方法均引入了打哈欠參數,但均沒有對打哈欠行為建立有效的模型,會把駕駛員張嘴講話誤判為打哈欠,從而降低了疲勞狀態識別的準確性。駕駛員在重度疲勞時,會出現低頭行為。針對駕駛員低頭行為檢測,楊曉峰等[12]通過對駕駛員面部圖像進行正負建模分類,然后對駕駛員低頭行為進行檢測,但實時效果有待考證;程文冬等[13]通過對頭部姿態進行建模,該方法準確率高,但計算參數過多,實時效果相對較差。
針對以上問題,本文采用具有194個特征點人臉ASM,結合haar級聯得到精確的人臉和眼睛區域;通過光流法實現對人臉及上下眼瞼特征點的有效跟蹤,準確識別出眼睛的狀態;結合眼睛狀態識別結果,采用正負圖像訓練得到的SVM判定駕駛員是否屬于重度疲勞情況下的低頭行為。實驗結果表明,本文方法能有效識別駕駛員面部疲勞狀態。
在ASM定義中,大多物體的形狀都可以由多個特征點組成。這些特征點的數量足夠多并且可以準確地描繪出物體的輪廓和內部細節[14]。
實驗中共N幅人臉圖像,全部按圖1進行特征點標定,第i張人臉形狀向量為
Xi=(xi1,yi1,…,xij,yij,…,xin,yin)T,i=1,2,…,N
(1)
式中:對應的第i幅人臉圖像中第j個特征點的坐標為(xij,yij),n為特征點的數量。同時進行對齊和降維,計算并得到其均值和協方差矩陣
(2)
(3)

圖1 194個特征點人臉ASM
則人臉ASM的形狀X可表示為
(4)
為防止形狀產生畸變,b的取值范圍
(5)
其中,λξ為S的特征值,pξ為λξ對應的特征向量,特征矩陣P=(p1,p2,…,pt)。
對人臉進行特征點標定得到人臉ASM,本文采用194個特征點人臉ASM,該ASM是基于Helen數據集中2000多張高分辨率人臉圖像訓練得到。194個特征點人臉ASM如圖1所示。
實驗中發現,直接使用ASM進行人臉檢測和匹配,準確度較低,實時效果較差。同時文獻[1]指出ASM算法對人臉初始搜索位置要求較高,適合的搜索起始位置可以減少算法迭代次數。因此,實驗中使用OpenCV中自帶的haarcascade相關文件快速進行人臉和眼睛區域檢測。檢測與定位結果如圖2所示。

圖2 人臉和眼睛區域檢測與定位
確定好初始搜索位置后,精確定位每個特征點的位置然后進行ASM和人臉匹配。局部灰度模型是用來計算每個特征點的局部特征,局部灰度模型直接影響特征點的定位精度。在數據集中,選取第i幅人臉圖像,以該幅圖像中第j個特征點為中心,在第j個特征點兩側分別選取k個點構成一個長度為2k+1的灰度向量hij
hij=(hij1,hij2,…,hij(2k+1))T
(6)
hij的導數為
(7)
對進行歸一化操作
(8)
局部灰度模型以局部灰度平均值和協方差矩陣表示為
(9)
(10)

(11)
選擇馬氏距離最小值Dξ,min對應的特征點為最佳定位點。全部候選點都為最佳定位點的搜索結果如圖3所示。

圖3 ASM和人臉匹配
由于實驗需要對整個人臉區域更細節化的呈現,本文采用194個特征點人臉ASM。在BioID數據集中,比較于77個特征點人臉ASM,對這兩個ASM采用me17(mean error measured by internal 17 facial points)[15]的方法,得到各自平均差曲線,發現該模型的平均差小于77個人臉特征點ASM,對比發現,使用194個特征點標定人臉具有更好的魯棒性和適用性。兩者平均差曲線如圖4所示。同時該ASM特征點數更多,對人臉細節有更好地描述,可以匹配得到更加精確的人臉和眼睛區域,具有很好的適用性和準確性。

圖4 77個和194個特征點人臉ASM的me17對比曲線
在進行上述操作后,需要對人臉和眼睛區域特征點進行跟蹤,來判定疲勞狀態。因為駕駛員在駕駛汽車的過程中,駕駛員頭部運動幅度較小,場景單一,本文使用光流法[16]對這些區域特征點進行跟蹤,具體過程如下:使用上述操作進行人臉和ASM最優匹配后,得到人臉輪廓特征點,同時得到眼睛上下眼瞼輪廓共40個特征點(每個眼瞼輪廓區域20個特征點),使用光流法對這些特征點進行跟蹤。
實驗中,對駕駛員進行面部行為監測,為了不影響其正常駕駛,把監控攝像頭安裝在儀表臺的位置,安放位置如圖5所示。

圖5 攝像頭的安放位置
駕駛員在長時間駕駛汽車后,特別是長途客車和長途貨車駕駛員,他們更容易疲勞駕駛,會出現不同程度的疲勞狀態。文獻[17]中把駕駛員的狀態分為3種:清醒、疲勞和重度疲勞。3種狀態的面部表現如下:清醒狀態下,駕駛員注意力集中于正前方,精神狀態佳,整個駕駛行為正常;疲勞狀態下,眼睛張開度變低,眨眼頻率降低,同時可能伴隨著打哈欠等行為;重度疲勞狀態下,眼睛近乎閉合,頻繁點頭,甚至可能出現短暫的低頭行為。
目前僅依靠眼睛狀態來判斷是否疲勞存在一定的局限性,大多數都只是檢測到疲勞狀態,并不能對重度疲勞狀態進行判定。本文在基于眼睛狀態檢測的基礎上,加入對頭部姿態的檢測,通過獲取駕駛員眼睛PERCLOS參數以及SVM對頭部姿勢的判定作為駕駛員疲勞程度的判斷標準。
PERCLOS(percentage of eyelid closure over the pupil over time),即單位時間內眼睛閉合時間所占的百分比,是由卡內基梅隆研究所提出并應用于疲勞檢測[10]。研究表明,PERCLOS對駕駛員疲勞狀態檢測具有很高的準確性[18]。PERCLOS的測量原理如圖6所示。

圖6 PERCLOS測量原理
PERCLOS有3種標準,其中P80標準(即眼瞼遮住瞳孔的面積超過80%就計為眼睛閉合)與疲勞程度相關性最好,適合作為駕駛員疲勞狀態檢測的標準[17]。眼睛睜開度如圖7所示,對應的P80標準,即眼睛睜開度小于20%時計為眼睛閉合。

圖7 眼睛睜開度
由圖6并參考PERCLOS的定義,可得PERCLOS的值f
(12)
基于PERCLOS-P80標準評價疲勞的方法是:根據眼睛在每一時刻的狀態,計算出眼睛處于閉合大于80%狀態所占的時間比,最終計算出PERCLOS的值F。設單位時間內所采集的視頻有效幀數為N,其中眼睛處于閉合狀態大于80%狀態的幀數為K,計算出該單位時間內PERCLOS值F,即
(13)
通過F的均值來判斷駕駛員是否疲勞。本文使用文獻[19]中F值的定義,定義當F小于0.25時駕駛員處于清醒狀態,當F大于0.25時駕駛員屬于疲勞狀態。
由于實驗中攝像頭的位置在頭部水平線以下擺放,因此在正常駕駛中,人臉相對于攝像頭的視角是仰視狀態;如果出現疲勞狀態,同時人臉相對于攝像機呈現出平視或俯視的視角,判定此時的狀態為重度疲勞狀態。
實驗中選用SVM判定頭部姿態。低頭行為檢測的人臉圖像來自MUCT人臉庫,經過選取和比較選取了其中900張人臉圖像,其中正性(正常駕駛)圖像161張、負性(非正常駕駛)圖像739張,正負圖像樣本如圖8所示。
對兩組圖像進行標注,利用本文ASM精確匹配到人臉位置,截取圖像中人臉區域,結合頭部行為相關性,不同于直接使用兩組圖像訓練,這樣先檢測、匹配后截取人臉區域最后再訓練會得到識別率更高的SVM。使用訓練好的SVM準確對頭部姿態進行判定,判定是否低頭,結合是否出現疲勞狀態,進而判定是否處于重度疲勞狀態。
正性圖像如下:

負性圖像如下:

圖8 正負圖像樣本
(1)實驗環境
實驗環境為VS2010+OpenCV2.4.13,Windows7操作系統Intel(R)Xeon(R)CPU E5-2603 v4 @ 2.20 GHz,內存為32 GB,測試視頻的幀率為30 fps,分辨率為800*600。
(2)測試數據集
本文選取20位測試者作為測試數據集,其中包括10位男性和10位女性,每位測試者面部分別在不佩戴任何干擾物和佩戴近視鏡的情況下進行實時測試。
實驗中電腦攝像頭的角度、位置、距離和真實駕駛環境保持一致。為了檢驗本文194個特征點人臉ASM的有效性,對20位測試者進行人臉檢測、ASM和人臉匹配,該過程平均耗時約為30 ms,統計結果得出匹配的正確率。統計結果見表1。

表1 準確匹配的統計結果
可以看出該ASM在和人臉匹配的過程中具有較高的準確性和較好實時效果,但佩戴近視鏡的匹配正確率低于不佩戴近視鏡的情況,原因在于由于鏡片反光對匹配過程造成干擾,導致誤判。
實驗通過該匹配過程,得到更加精確的人臉和眼睛區域,使用光流法對眼睛區域40個特征點進行跟蹤,檢測得到眼睛Open Rate,清醒狀態下眼睛Open Rate如圖9所示。

圖9 清醒時眼睛Open Rate
實驗中模擬駕駛員的疲勞狀態,疲勞狀態下駕駛員眼睛睜開度變小,此時對應的眼睛Open Rate如圖10所示。
這里選取P80作為檢測標準和文獻[19]中F的定義,當F>0.25時,屏幕上顯示eyes closed,同時發出“滴”的警告聲,顯示結果如圖11所示,判定此時駕駛員的狀態為疲勞狀態。
使用上述過程判定駕駛員狀態為疲勞狀態,伴隨著頭部處于低頭狀態,準確跟蹤到頭部后,使用本文中訓練好的SVM判定頭部姿態,此時屏幕上先顯示eyes closed后顯示head rotated,同時發出“嘟嘟”的警告聲,顯示結果如圖12所示,判定此時駕駛員的狀態為重度疲勞狀態。
同時為驗證本文算法的檢測正確率及速率,進行實時檢測。文獻[19]指出過低的分辨率如320*240和640*480會使實驗結果存在一定的差異,因此本文采用分辨率為800*600視頻流以用于實時檢測。實時檢測過程中,本文算法處理一幀圖片的平均檢測速率見表2,單位為ms。

表2 本文算法處理一幀圖片的平均檢測速率
通過對比,發現本文在高分辨率的情況下(文獻[11]中的視頻分辨率為320*240),平均檢測速率仍然高于文獻[11]中的方法,可以看出該算法能夠滿足實時性的要求。
文獻[12]中對駕駛員低頭行為進行檢測,平均檢測正確率為94.29%,但引入過多參數,從而導致實時效果差,本實驗中對重度疲勞狀態的判定其實也包含了對低頭行為的檢測,低頭行為的檢出率在93%左右,但實時效果好。
為驗證本文方法的準確性,通過實時對測試者進行模擬駕駛狀態的測試。首先人工統計20位測試者在不同測試狀態下疲勞(包括疲勞狀態和重度疲勞狀態)發生的次數,然后使用本文中的方法進行驗證,得出檢測正確率為92.5%。比較于其它方法疲勞狀態檢測正確率見表3。

表3 疲勞狀態識別方法比較
對比于文獻[10]中的方法,本文所使用的ASM對人臉有更加細節化描述,在疲勞狀態識別正確率稍高一些。對比于文獻[11]中的方法,本文的方法正確率稍低,但檢測的整體速率有所提高,可以看出在實際應用中,本文方法具有很好的適用性和實時效果。
區別于其它的人臉ASM,本文使用具有194個特征點的人臉ASM,該ASM特征點數更多,對人臉細節有更好的描述,可以準確的檢測出眼睛睜開度。針對目前對重度疲勞狀態檢測的空白,我們提出在檢測疲勞狀態的基礎上加入對頭部姿態的判定,得出一種檢測重度疲勞狀態的方法。實驗結果表明該方法對疲勞狀態檢測正確率在92%以上,具有很好的實用性和可靠性。此外,由于沒有統一和標準的哈欠模型,本文并未引入對嘴巴狀態判定,這是下一步需要完成的工作。