任 俊,魏 霞,黃德啟,劉 棟
(新疆大學(xué) 電氣工程學(xué)院,新疆 烏魯木齊 830047)
視覺檢測[1-3]主要提取面部特征來判斷疲勞狀態(tài),然而這些特征提取會受到外界干擾,如何避免光照、眼鏡以及姿勢等因素的影響,提高疲勞狀態(tài)檢測的精度和速度是研究的關(guān)鍵。其中,吳良超等[4]提出構(gòu)建特征點動態(tài)變化圖和神經(jīng)網(wǎng)絡(luò)的動態(tài)表情結(jié)合的識別法,該方法通過特征點動態(tài)變化圖提取人臉輪廓信息,用卷積和循環(huán)神經(jīng)網(wǎng)絡(luò)提取人臉的紋理信息、人臉序列的時序信息。樊飛等[5]圍繞著人臉特征點檢測改進算法進行疲勞檢測,通過牛頓提升樹結(jié)合統(tǒng)計量特征,提出CNBT人臉特征點檢測算法,能夠有效提高疲勞識別準(zhǔn)確率和穩(wěn)定性,但是沒有考慮駕駛員頭部姿勢變化等情況,在真實環(huán)境下的實用性有待提高。對于上述提到的問題,需要設(shè)計一種實用性廣泛的疲勞檢測框架尤為重要,同時由于駕駛員會有不同程度的頭部偏轉(zhuǎn),采用單眼檢測來代替?zhèn)鹘y(tǒng)的雙眼檢測機制,增強檢測的范圍,提高實用性。根據(jù)特征點和二值圖像得到的縱橫比值、累積黑色素差值以及人眼水平投影高度和寬度比值作為支持向量機的3個輸入特征,進而在三維立體圖形中得到眼睛狀態(tài)分類結(jié)果,最后根據(jù)眼睛狀態(tài)計算ECR值作為眼部疲勞特征參數(shù)判斷駕駛員的疲勞狀態(tài)。
本文框架分為3個部分,經(jīng)過圖像預(yù)處理后檢測和跟蹤人臉,對定位好的3類特征點進行提取和校正,特征融合判別疲勞狀態(tài),本文設(shè)計流程如圖1所示。

圖1 設(shè)計流程
在實際采集駕駛員視頻和圖片時可能會受到周圍環(huán)境的噪聲和光照的影響,使得圖像變得模糊,因此需要先對采集的圖像進行濾波去噪,提高后期人臉檢測和特征提取的準(zhǔn)確率。采用自適應(yīng)中值濾波[6]的方式,實際是利用中值濾波來消除孤立的斑點,并采取自適應(yīng)鄰域中值代替是噪聲的原始像素值,再采用圖像動態(tài)閾值的光照均衡化處理,使圖像的光照均勻分布,如圖2所示,均衡化處理后,圖片光照和亮度得到較好的改善,進而有效提取人臉的特征。

圖2 光照均勻化前后對比
1.3.1 基于Haar-like特征的AdaBoost人臉檢測算法
目前在人臉檢測過程中,人臉圖像可以用圖像灰度變化的特征來表征,而Haar-like特征[7]可以反映灰度變化。先用積分圖算法快速得到任意區(qū)域的像素和,再可以由像素灰度和差值來得到Haar-like模板特征。AdaBoost算法[8]用于人臉檢測,是通過訓(xùn)練集訓(xùn)練弱分類器,形成分類效果較好強分類器,進而訓(xùn)練出最能代表面部特征,從而加快檢測速度和提高準(zhǔn)確率。其算法流程如圖3所示。

圖3 AdaBoost算法流程
1.3.2 實驗結(jié)果分析
對人臉特征識別完成后進而對眼睛特征進行檢測,輸出可以識別的人臉區(qū)域和眼睛區(qū)域的矩形框,檢測效果如圖4所示,可以清楚標(biāo)識出來。

圖4 人臉檢測效果
考慮到在實際圖像采集的過程中,由于駕駛員面部偏移距離較小,都在一定范圍內(nèi),在第一次檢測到人臉之后,只需要跟蹤人臉上一幀人臉信息,快速獲得下一幀人臉位置信息。采用基于幀間差分法的Mean Shift算法[9]進行人臉跟蹤,利用連續(xù)兩幀圖像之間的聯(lián)系,進行差分運算,然后利用二分閾值法提取邊緣區(qū)域,獲得下一幀人臉的位置信息,提高檢測速度。
為了減少外界環(huán)境因素對人臉特征部位的檢測及定位的影響,在人眼檢測定位之前先使用了基于級聯(lián)回歸樹算法[10-12](ERT)對人臉的關(guān)鍵特征點進行定位,然后在人臉特征點定位的基礎(chǔ)上,快速定位到人眼。基于級聯(lián)回歸樹算法是一種人臉對齊算法,不斷檢測特征點然后進行更新,最后逐步定位到真實人臉位置。
如圖5所示,ERT算法可以實現(xiàn)多個角度的人臉特征點定位且效果較好。

圖5 不同角度人臉特征定位
在提取人臉特征點之后,通過實驗發(fā)現(xiàn),駕駛員在正常眨眼過程中,眼睛的特征點也會隨之變化,因此我們根據(jù)人眼特征點來求取眼睛的縱橫比值來表示人眼的狀態(tài)信息。而且縱橫比值不會因為駕駛員面部位置和攝像頭距離改變而改變。如圖6所示P1到P6分別對應(yīng)人眼6個特征點,眼睛縱橫比計算公式
(1)

圖6 人眼特征點分布
由式(1)可知EAR由眼睛縱向長度與橫向長度比值得來的,當(dāng)頭部左右偏轉(zhuǎn)時,眼睛的橫向長度發(fā)生變化,當(dāng)頭部上下點動時,眼睛的縱向長度發(fā)生變化。因此針對頭部左右偏轉(zhuǎn)和上下點動時進行特征點校正。圖7為眼睛縱向長度變化。

圖7 人眼縱向長度變化
圖7中l(wèi)0表示初始狀態(tài)下真實眼睛的縱向長度,分別發(fā)生了點頭和抬頭,導(dǎo)致俯仰角β0變成β1和β2,l0也隨之變化為l1和l2。h0為l0投影到二維圖像的高度,h1為l1投影的高度,由于實際情況下點頭和偏轉(zhuǎn)眼睛真實縱向長度不變,即l0=l1,則有
(2)
人眼左右偏轉(zhuǎn)變化和上述過程類似,以w0和w1分別表示初始狀態(tài)下以及變化后的眼睛橫向長度,α0和α1分別代表初始狀態(tài)下以及變化后的偏轉(zhuǎn)角,得到w0和w1關(guān)系
(3)
由此可以得到圖像中人眼縱橫比為
(4)
式中:EAR1是校正前眼睛縱橫比值,圖8是校正后的眼睛縱橫比值隨幀數(shù)變化的折線圖,由圖8可以看出,當(dāng)眼睛睜開時縱橫比維持在0.32左右,當(dāng)縱橫比小于0.2時可視為閉眼狀態(tài)。因此可以通過計算人眼縱橫比值來判斷人眼狀態(tài)。

圖8 人眼縱橫比值隨幀數(shù)變化
根據(jù)定位的人眼區(qū)域,先進行人眼圖像二值化處理,再經(jīng)過中值濾波處理后顯示眼睛的輪廓,表1為人眼不同狀態(tài)下的二值圖像。

表1 人眼不同狀態(tài)二值圖像
在眼睛閉上的情況下,計算眼睛區(qū)域內(nèi)的黑色像素數(shù)的累積差值,雖然睫毛和眼瞼等黑色區(qū)域可能會保留,但是瞳孔區(qū)域最大的黑色區(qū)域不會出現(xiàn),也就是說,當(dāng)眼睛閉上的時候,黑色像素數(shù)量會比睜眼的時候大幅減少,然而,黑色像素的數(shù)量不僅會隨著眼睛狀態(tài)變化而變化,還會隨攝像頭與駕駛員面部的距離變化而變化,當(dāng)這個距離增大時,眼睛區(qū)域黑色素的數(shù)量會減小。
如圖9所示,圖(a)顯示了根據(jù)幀數(shù)變化的二值化區(qū)域內(nèi)的黑色像素數(shù),看到在第101幀之后當(dāng)面部離開攝像頭更遠時,眼睛區(qū)域的黑色像素減小,因此僅使用第101幀之前的閾值,就無法區(qū)分第101幀之后的眼睛是睜開還是閉上的,可以采用連續(xù)圖像中眼睛區(qū)域的黑色素的差值。

圖9 人眼睜閉過程中黑色像素值隨幀數(shù)變化
當(dāng)采用的連續(xù)圖像中眼睛區(qū)域的黑色像素的差值作為特征時,可以識別部分閉眼狀態(tài),但如圖(b)中在第41幀、105幀和106幀的差值小于靜態(tài)閾值,錯誤地識別眼睛狀況,為了解決這一問題,使用一種新的特征,即眼睛圖像中黑色像素數(shù)的累積差值,當(dāng)檢測連續(xù)兩幀及以上圖像的差值小于0的條件下,將連續(xù)的差值進行累加,如圖(c)中第一個滿足條件的情況出現(xiàn)在第40幀,而在第102幀時,盡管差值小于0,但是它沒有在超過兩幀情況下保持,因此它不累加。
然而對于如圖10所示,圖(a)這種情況,累積差值法在識別眼睛狀態(tài)時存在以下問題,如圖(b)的第257和260幀所示,雖然它們顯示的是閉眼,但是由于差值大于0,它們不是累積的,導(dǎo)致圖(b)的第255幀到260幀都被錯誤地識別為睜開眼睛,因此使用了具有自適應(yīng)閾值的累積差值作為特征。

圖10 自適應(yīng)人眼睜閉過程中黑色像素值隨幀數(shù)變化
如圖11所示,將累積差與自適應(yīng)閾值的使用規(guī)則建模為有限狀態(tài)機[13](FSM),F(xiàn)SM有兩種狀態(tài),狀態(tài)0和狀態(tài)1,首先檢測當(dāng)前幀黑色像素與前一幀的差值是否大于或等于0,若大于或等于0設(shè)定為此時為狀態(tài)0并保持狀態(tài)不變,否則由狀態(tài)0變成狀態(tài)1,在狀態(tài)1時,再檢測此時的差值是否小于閾值T(t)時,若小于T(t)保持狀態(tài)1,并連續(xù)累積差值,否則,狀態(tài)1變成狀態(tài)0,差值不累積。

圖11 有限狀態(tài)機
基于自適應(yīng)閾值黑色像素算法如下
(5)
T(t)=α*|D(t-1)|,α∈[0,1]
(6)
FSM定義如下,其中ΔN(t) 為第t幀與前一幀的黑色像素數(shù)差值,D(t-1) 為在t-1幀的累積差值,α為0到1之間的定值。
通過自適應(yīng)閾值算法,如圖10(c)中255幀開始差值小于0,設(shè)定為狀態(tài)1,且差值小于閾值,進行連續(xù)累加差值,如圖10(c)中257幀和260幀差值可以正確累計,因此第255幀到260幀可以正確判斷為閉眼狀態(tài)。
根據(jù)定位的人眼區(qū)域,提取人眼二值化圖像,再對二值化圖像進行水平投影,得到如圖12所示不同狀態(tài)下人眼水平投影曲線。

圖12 不同狀態(tài)下人眼水平投影曲線
如圖12中所示,眼睛睜開時縱坐標(biāo)跨度較大,橫坐標(biāo)峰值較小,而閉眼時縱坐標(biāo)跨度較小,橫坐標(biāo)峰值較大,但是實際情況二者差距不大,因此通過計算人眼水平投影的高度與寬度的比值來識別眼睛狀態(tài)。先計算水平投影曲線的高度h和寬度w,計算并保存h、w和h/w這3個值,分別記為H、W、K。當(dāng)滿足K值大于0.4時,可以定義睜眼狀態(tài),否則為閉眼狀態(tài)。
SVM通過找出邊際最大的決策邊界,來對數(shù)據(jù)進行分類的分類器。擁有更大的邊際的決策邊界在分類中泛化誤差較小,從而使實際樣本間隔更大。通過SVM分類器來進行二分類,其中數(shù)據(jù)選取、處理、訓(xùn)練、測試都是基于PyCharm開發(fā)環(huán)境和OpenCV視覺庫等平臺進行具體實現(xiàn)的。
2.5.1 數(shù)據(jù)選取
本文從YawDD駕駛環(huán)境中拍攝的視頻數(shù)據(jù)集[13]、ZJU眨眼數(shù)據(jù)集[14]中各選取20人,男女各20人,其中20人戴眼鏡,20人不帶眼鏡,再從中采集4000張睜眼圖像、4000張閉眼圖像,同時自己采集2000張睜眼圖像、2000張閉眼圖像,一共采集12 000張睜眼和閉眼狀態(tài)圖像。
2.5.2 數(shù)據(jù)處理
首先對每個樣本進行提取人臉特征點,然后通過式(4)計算眼睛縱橫比值記為第一個特征值F1、由自適應(yīng)閾值法得到的黑色像素累積差值記為第二個特征值F2、把水平投影高度和寬度的比值h/w記為第三個特征值F3,即對每個樣本提取3個特征值,3個特征值分別對應(yīng)X、Y、Z軸,對每個睜眼樣本和閉眼樣本都進行特征提取操作。
2.5.3 特征參數(shù)歸一化
由于不同特征參數(shù)之間的量綱不同導(dǎo)致數(shù)值較小的特征參數(shù)在訓(xùn)練過程中的占比較小,需要對每個特征參數(shù)數(shù)據(jù)進行歸一化處理,采用Z-score標(biāo)準(zhǔn)化方法,即求取原始參數(shù)數(shù)據(jù)的均值和標(biāo)準(zhǔn)差,再把均值和標(biāo)準(zhǔn)差進行數(shù)據(jù)的標(biāo)準(zhǔn)化處理,使處理后的均值和標(biāo)準(zhǔn)差符合正態(tài)分布,然后再進行以下轉(zhuǎn)化函數(shù)
(7)
式中:x*為歸一化后的值,x為原始特征值,μx為所有樣本數(shù)據(jù)的均值,σx為所有樣本數(shù)據(jù)的標(biāo)準(zhǔn)差。
2.5.4 模型訓(xùn)練即參數(shù)尋優(yōu)
SVM分類器[15]可以表示為
(8)
(9)

(10)
式中:N是訓(xùn)練數(shù)據(jù)的總數(shù),yi∈{-1,1} 為訓(xùn)練樣本眼睛狀態(tài)類別,-1表示閉眼狀態(tài),1表示睜眼狀態(tài),K(x,xi) 表示核函數(shù),系數(shù)ai可以通過由線性約束的二次規(guī)劃得到,常數(shù)b是偏差項。本文采取3個特征輸入,通過引入核函數(shù),支持向量機可以擴展到非線性決策面上,然后利用支持向量確定可以區(qū)分兩類的超平面,來尋找讓數(shù)據(jù)線性可分的高位空間。根據(jù)最小分類誤差,RBF核函數(shù)分類非線性情況效果較好,故本文采用RBF核函數(shù)進行模型訓(xùn)練,式(9)為RBF核函數(shù),參數(shù)γ定義單個樣本的影響大小,式(10)為目標(biāo)方程,w和b是模型參數(shù),ξ參數(shù)為松弛變量,懲罰參數(shù)C是在錯誤分類樣本和分界面簡單性之間進行權(quán)衡,這兩個參數(shù)的選取對預(yù)測結(jié)果的精度非常關(guān)鍵。我們通過分類器交叉驗證法來尋找使預(yù)測結(jié)果最優(yōu)的參數(shù)C和γ,從收集到的特征值中選取2000組特征值分為10組,每次選9組為訓(xùn)練集,剩余1組為測試集,選取的所有特征值都經(jīng)過歸一化處理,測試結(jié)果標(biāo)簽保存到對應(yīng)類別中,經(jīng)過尋優(yōu)發(fā)現(xiàn),當(dāng)參數(shù)C=1.92,γ=0.9時,模型預(yù)測分類效果較好。
2.5.5 實驗檢測
當(dāng)用SVM分類器融合校正后的特征點計算人眼的縱橫比值以及人眼二值圖像計算累積黑色素差值這兩個特征時,得出的二維平面分類結(jié)果如圖13所示,睜眼和閉眼這兩種類別基本可以區(qū)分開來,但是還是有少量類別區(qū)分錯誤。當(dāng)用SVM分類器融合校正后的特征點計算人眼的縱橫比值和人眼二值圖像計算累積黑色素差值以及人眼水平投影高度和寬度比值這3個特征時,在三維立體坐標(biāo)系中進行分類,如圖14所示,圖(a)和圖(b)采用了不同的角度展示分類效果,在二維平面分類錯誤的點在三維坐標(biāo)系中得到正確的區(qū)分,分類準(zhǔn)確率提升到97.51%。

圖13 SVM二維平面分類結(jié)果

圖14 SVM三維立體分類結(jié)果
通過表2可以看出,提出基于融合多特征算法可以較準(zhǔn)確的識別眼睛的兩種狀態(tài),表3為不同算法對眼睛狀態(tài)的分類準(zhǔn)確率對比,結(jié)果表明提出的SVM三維立體分類的識別方法相較于SVM二維平面分類的狀態(tài)識別方法分類準(zhǔn)確率更高,與文獻[16]相比,本文算法睜眼和閉眼識別的準(zhǔn)確率也都要更高。

表2 基于SVM融合多特征算法分類測試結(jié)果

表3 不同算法在眼睛狀態(tài)分類對比
在實際駕駛過程中,駕駛員會有多種頭部姿態(tài),當(dāng)左右偏頭幅度過大時,會出現(xiàn)一只眼睛被遮擋,這時很難準(zhǔn)確提取雙眼的特征,一旦出現(xiàn)一只眼睛錯檢,就會影響最終眼睛狀態(tài)的判斷,對實驗結(jié)果有很大干擾。為驗證頭部多姿態(tài)時檢測結(jié)果的準(zhǔn)確率,以駕駛員的正前方為中心軸,頭部向各個方向偏轉(zhuǎn)一定角度進行雙眼檢測。
如圖15所示,給出部分具有代表性的4種頭部偏轉(zhuǎn)狀態(tài)實驗圖。當(dāng)駕駛員頭部偏轉(zhuǎn)較小方位內(nèi),雙眼檢測可以達到較好效果,圖(d)當(dāng)頭部出現(xiàn)極端角度時,眼睛狀態(tài)檢測時出現(xiàn)了錯檢,準(zhǔn)確率會大幅下降,因此可以采用單眼檢測機制,用未被遮擋的單只眼睛代替雙眼檢測機制。具體操作如圖16所示。

圖15 雙眼檢測示例

圖16 眼睛篩選機制
圖16中x1和x2分別表示檢測框的寬和高,s表示兩個瞳孔中心間的距離,d表示瞳孔連線中心點到人臉右框的距離,由于檢測到的人臉大小不一,所以要對邊框進行切割,提高準(zhǔn)確率,令w=3/4x1, 當(dāng)d大于w/2時只對圖中右眼進行狀態(tài)判斷,反之只對圖中左眼進行狀態(tài)判斷。這里測試600張人臉圖像,分別選取在轉(zhuǎn)動角度為-30°到30°以及轉(zhuǎn)動角度為-60°到60°情況,第一組檢測睜眼狀態(tài),第二組檢測閉眼狀態(tài),實驗部分單眼檢測不戴眼鏡各種轉(zhuǎn)動角檢測結(jié)果如圖17所示。

圖17 基于眼睛篩選機制單眼檢測不戴眼鏡示例
如圖18所示,第一組檢測睜眼狀態(tài),第二組檢測閉眼狀態(tài),戴眼鏡時單眼檢測不同轉(zhuǎn)動角識別效果也較好。

圖18 基于眼睛篩選機制單眼檢測戴眼鏡示例
由表4和表5可知,單眼檢測對頭部適應(yīng)性較好,當(dāng)檢測到頭部大幅度偏轉(zhuǎn)時采用單眼檢測具有較高準(zhǔn)確率。

表4 單眼檢測不戴眼鏡結(jié)果

表5 單眼檢測戴眼鏡結(jié)果
采用YawDD視頻數(shù)據(jù)集、ZJU眨眼數(shù)據(jù)集來測試單眼檢測和雙眼檢測的準(zhǔn)確率,各選取20組不戴眼鏡,10組戴眼鏡,總共從拍攝的視頻中選取10 000幀圖片,見表6,實驗結(jié)果表明自適應(yīng)單眼檢測無論是在戴眼鏡還是不戴眼鏡情況下準(zhǔn)確率都更高。

表6 單眼檢測和雙眼檢測眼睛狀態(tài)對比
當(dāng)在實際行駛過程中,駕駛員疲勞時會出現(xiàn)頻繁眨眼的現(xiàn)象,同時眼部狀態(tài)信息是最能顯示疲勞狀態(tài),為此可以通過獲取駕駛員眼部的狀態(tài)信息來判斷駕駛員的疲勞狀態(tài)。本文選取基于PERCLOSE準(zhǔn)則[17]的ECR作為眼部疲勞特征參數(shù),ECR指檢測到閉合狀態(tài)時幀數(shù)與一次眨眼整個過程幀數(shù)的比率,即
(11)
式中:n為閉合狀態(tài)時幀數(shù),N為眨眼整個過程幀數(shù),根據(jù)眼睛篩選機制判斷眼睛狀態(tài)方法得到參數(shù)n和N,當(dāng)ECR范圍在0.3到1視為疲勞狀態(tài),ECR范圍在0到0.2視為正常狀態(tài),ECR范圍在0.2到0.3內(nèi)時介于正常和疲勞狀態(tài)之間,為此對ECR這個范圍的閾值進行6000組測試,測試結(jié)果見表7,當(dāng)ECR為0.25時,檢測的準(zhǔn)確率最高。

表7 不同ECR值的疲勞檢測準(zhǔn)確率對比
文獻[18]采用CNN回歸網(wǎng)絡(luò)檢測人臉關(guān)鍵點,并用寬度學(xué)習(xí)對面部狀態(tài)進行判別,最后,通過二級寬度學(xué)習(xí)網(wǎng)絡(luò)融合眼睛,嘴部和頭部狀態(tài)預(yù)測駕駛員疲勞狀態(tài)。文獻[19]采用深度卷積層學(xué)習(xí)獲取圖像和特征,并利用相鄰幀間關(guān)系預(yù)測疲勞狀態(tài),不同算法疲勞檢測對比見表8,相比之下本文精度更高。根據(jù)研究發(fā)現(xiàn),駕駛員正常情況下的眨眼頻率為15到30 次/分鐘,本文提出的方法檢測每幀圖片只需要0.091 s,正常平均每次眨眼0.25 s到0.3 s,所以本文算法可以檢測多種姿態(tài)下的眼睛狀態(tài),同時滿足實時性的要求。
本文提出多特征融合的疲勞駕駛檢測方法,通過傳統(tǒng)的方法進行特征提取,基于SVM分類器融合人眼的縱橫比值、累積黑色素差值、人眼水平投影高度和寬度比值3個特征,再結(jié)合眼睛篩選機制進行狀態(tài)檢測,不僅可以適應(yīng)不同光照強度、減少頭部姿態(tài)和戴眼鏡的干擾,而且能實時更新檢測的疲勞狀況,實驗結(jié)果表明該方法具有較高的識別率和較強的實用性。

表8 不同算法的疲勞檢測性能對比