閆保中,王晨宇,王帥帥
哈爾濱工程大學(xué) 自動(dòng)化學(xué)院,黑龍江 哈爾濱 150001
疲勞駕駛造成的影響是惡劣的,因此通過研究一種實(shí)時(shí)精準(zhǔn)的疲勞駕駛預(yù)警系統(tǒng),以便及時(shí)對駕駛員預(yù)警使其重新獲得對車輛的控制權(quán),這對社會(huì)安全具有重大的意義。當(dāng)今疲勞檢測方式主要分為基于生理指標(biāo)、操作行為、車輛狀態(tài)和視覺特征這4種方式[1]。其中最后一種方式利用人體可視化特征在清醒狀態(tài)下和疲勞狀態(tài)下的不同表現(xiàn)來檢測疲勞,并且無須穿戴任何設(shè)備,有著很好的研究空間[2]。所以該方法變成疲勞駕駛檢測領(lǐng)域的研究重點(diǎn)。
目前,國內(nèi)外技術(shù)學(xué)者針對視覺特征已經(jīng)開展了更深入的研究。張長隆[3]使用多傳感器采集眼部、嘴部以及方向盤特征,使用Fisher線性判別分類來檢測疲勞。而Devi[4]在提取眼部和嘴部信息后,采用了模糊邏輯算法來確定疲勞程度。柳龍飛[5]使用基于梯度提高學(xué)習(xí)的回歸樹(ensemble of regression trees, ERT)定位人臉特征點(diǎn)后判斷駕駛員是否疲勞。
但是在實(shí)際應(yīng)用中基于視覺特征的方法還需進(jìn)一步完善,因?yàn)檫@些方法在準(zhǔn)確性和實(shí)時(shí)性2個(gè)方面無法做到很好的平衡。有的方法注重準(zhǔn)確性,但是忽略了實(shí)時(shí)性要求;有的方法能夠做到快速檢測,但是又面臨精度較差的問題。本文針對上述問題,通過改進(jìn)人臉特征點(diǎn)定位算法提升運(yùn)算速度,利用多特征檢測來提高運(yùn)算精度。并且通過求解駕駛員視線方向辨別注意力是否分散,以便在駕駛員陷入深度疲勞前就對其預(yù)警,更加保證安全性。
本文在駕駛員面前架設(shè)攝像頭得到人臉圖像,為驗(yàn)證訓(xùn)練與測試結(jié)果的真實(shí)性,自建一個(gè)小型數(shù)據(jù)集。其中共有駕駛員8位,每個(gè)人在清醒的時(shí)候收集10 min視頻,在疲勞的時(shí)候收集5 min視頻。它的采樣幀率是15 f/s,大小是640×480像素。除此之外,本文還使用了如下公開的數(shù)據(jù)集:人臉姿態(tài)數(shù)據(jù)集CAS-PEAL的POSE組[6],該組數(shù)據(jù)集包含1 042個(gè)人的21種不同角度的人臉姿態(tài)圖像,用于后續(xù)人臉朝向估計(jì)算法。人臉特征點(diǎn)數(shù)據(jù)集helen和lfpw集,包含3 721幅人臉圖像及其特征點(diǎn)位置。
系統(tǒng)運(yùn)行的第一步是對圖像進(jìn)行預(yù)處理。首先在RGB顏色空間使用2g-r-b算子對駕駛員圖像灰度化[7],使用自適應(yīng)中值濾波減少噪聲[8]。之后使用haar-like特征進(jìn)行人臉識別[9]。因?yàn)閿z像頭位置固定,而且駕駛員所在位置一旦上電之后基本不變,所以前后兩次人臉識別框的位置偏移較小。所以在第一次識別到人臉后,下一次只在這次的識別位置附近判斷即可,以加快算法運(yùn)行,提高實(shí)時(shí)性。
在上電之后的5 min內(nèi),本文認(rèn)為駕駛員是清醒的。此時(shí)需要記錄系統(tǒng)運(yùn)行各個(gè)階段的檢測結(jié)果,將它們作為駕駛員清醒狀態(tài)下的指標(biāo)。其中包括該駕駛員的眼睛寬高比、PERCLOS值和眼睛注視區(qū)域分布,以便在之后的系統(tǒng)檢測過程中發(fā)現(xiàn)上述值出現(xiàn)異常時(shí)更準(zhǔn)確地判斷其疲勞程度。
在疲勞駕駛檢測過程中,往往影響系統(tǒng)運(yùn)行快慢的是人臉特征點(diǎn)定位的速度,這也是制約算法實(shí)時(shí)性的一大難點(diǎn)。由于在檢測過程當(dāng)中,駕駛員圖像會(huì)由于光照、遮擋等復(fù)雜情況而降低定位的精度。所以本文使用精確度較高、速度很快的基于回歸的局部二值特征法(local binary features,LBF)來進(jìn)行人臉特征點(diǎn)定位[10]。
LBF算法需要在開始時(shí)輸入一個(gè)人臉特征點(diǎn)初始化模型,然后通過不斷地回歸使得該模型越來越逼近真實(shí)位置[11]。因此如圖1中虛線框所示,為提高檢測精度與速度,對LBF算法優(yōu)化,采用不同的初始化策略。不再簡單地使用標(biāo)準(zhǔn)平均人臉來進(jìn)行初始化,而是首先判斷人臉朝向,從而使用不同的人臉特征點(diǎn)初始化模型。
圖1 LBF算法改進(jìn)策略示意
本文需要為駕駛員人臉朝向角度訓(xùn)練一個(gè)分類器。選取HOG特征作為參數(shù)[12],之后使用SVM進(jìn)行分類[13]。
HOG特征提取參數(shù)設(shè)置如表1所示,本文使用人臉姿態(tài)數(shù)據(jù)集CAS-PEAL中的POSE組作為輸入圖片,圖片大小均為360像素×480像素。所以HOG特征提取時(shí)的窗口有10×10=100 個(gè),HOG的每個(gè)窗口里block有36/12×48/16=9 個(gè)。1個(gè)block有4個(gè)cell,其特征描述子長度是9維,所以最終得到的 HOG 特征向量維數(shù)是 100×9×9×4=32 400維。提取HOG特征如圖2所示。
表1 HOG參數(shù)選擇
圖2 HOG特征可視化
因?yàn)镃AS-PEAL數(shù)據(jù)集的POSE組中包含1 042個(gè)人的21種不同角度的人臉圖像,但是本文只選取其中5種角度,分別是無偏轉(zhuǎn)正向人臉、向左偏轉(zhuǎn)22°人臉、向左偏轉(zhuǎn)45°人臉、向右偏轉(zhuǎn)22°人臉以及向右偏轉(zhuǎn)45°人臉。所以在訓(xùn)練數(shù)據(jù)集文件夾中新建5個(gè)文件夾,分別命名為0、-1、-2、1、2,并將對應(yīng)的圖片存入其中。在SVM訓(xùn)練時(shí)將圖片所在文件夾的名稱作為分類標(biāo)簽,提取HOG特征向量作為SVM輸入?yún)?shù),得到人臉朝向粗估計(jì)分類器。本文為驗(yàn)證算法精確度,使用了含有500 張圖片的測試樣本集來計(jì)算該分類器的識別率,其中包含CAS-PEAL數(shù)據(jù)集中的320 張圖片和自建數(shù)據(jù)集中的180張圖片,經(jīng)計(jì)算識別率為95.38%。如圖3所示的部分樣本分類結(jié)果圖,最后2 張是自建數(shù)據(jù)集中的樣本。
圖3 部分測試樣本SVM分類結(jié)果
我們?nèi)」_數(shù)據(jù)集300-W和自建數(shù)據(jù)集作為訓(xùn)練樣本,根據(jù)人臉朝向粗估計(jì)之后得到的分類結(jié)果采取不同的人臉特征點(diǎn)初始化模型,如圖4所示的5種人臉特征點(diǎn)初始化模型分別對應(yīng)分類結(jié)果為-2、-1、0、1、2的人臉圖像。
圖4 5個(gè)初始化人臉模型
LBF算法需要建立隨機(jī)森林[14],將訓(xùn)練樣本拆分成多個(gè)小樣本,每個(gè)小樣本中的圖片均有68個(gè)特征點(diǎn)。在以每一個(gè)特征點(diǎn)為圓心的圓內(nèi),生成500個(gè)像素點(diǎn),計(jì)算二者之間的差值。由這些差值作為特征,選擇閾值將當(dāng)前小樣本中所有圖片分成左右子樹兩大類,并計(jì)算分類前后的方差衰減。統(tǒng)計(jì)使該值最大的那個(gè)閾值就是本次分類的最終閾值,此時(shí)的特征就是本次最終特征。不斷分裂直到該樹的最大深度。一個(gè)特征點(diǎn)的決策樹建立完畢,然后取下一個(gè)小樣本集重復(fù)上述步驟,通過這種方法,每個(gè)特征點(diǎn)構(gòu)建多個(gè)子樹組成一個(gè)隨機(jī)森林。本文臉部有68個(gè)點(diǎn),便是68個(gè)隨機(jī)森林。
本文為提升分類效果,不再簡單地使用像素差值作為特征,而是使用歸一化值,如式(1)所示。x和y是兩個(gè)像素值,使用NOL(x,y)作為特征來分類,這種歸一化處理之后使得特征對光照更敏感。同時(shí)這樣處理之后在計(jì)算量上甚至沒有改變,然而分類效果明顯提升。
然后利用訓(xùn)練好的隨機(jī)森林提取局部二值特征。對于每一張圖片的每一個(gè)特征點(diǎn)來說,該圖片必然會(huì)被分類到某個(gè)葉節(jié)點(diǎn)中,此時(shí)將該葉節(jié)點(diǎn)編碼為1,否則將其編碼為0。就可得到一棵樹的二進(jìn)制編碼,將該特征點(diǎn)的隨機(jī)森林中所有二進(jìn)制編碼組合起來就是LBF特征。最后把所有LBF組合以形成特征映射Φt。
回歸時(shí)把位置增量當(dāng)成學(xué)習(xí)目標(biāo),訓(xùn)練線性回歸器Wt。如式(2)、(3)所示,LBF 算法在每一層級的回歸中將線性回歸矩陣Wt和特征映射函數(shù)Φt相乘,根據(jù)人臉特征點(diǎn)初始化模型和當(dāng)前特征點(diǎn)位置信息得到一個(gè)位置變量ΔS,從而修正本層級的位置信息St,然后繼續(xù)回歸與迭代。
通過最小化式(4)的目標(biāo)函數(shù)來學(xué)習(xí)Wt:
隨著層級的不斷深入,回歸產(chǎn)生的特征點(diǎn)越來越逼近真實(shí)位置。LBF算法參數(shù)設(shè)置如表2所示。
使用300-W數(shù)據(jù)集測試結(jié)果如圖5,使用自建數(shù)據(jù)集測試結(jié)果如圖6,可見效果明顯。
表2 LBF算法參數(shù)設(shè)置
圖5 300-W數(shù)據(jù)集測試結(jié)果
圖6 自建數(shù)據(jù)集測試結(jié)果
利用LBF改進(jìn)算法定位到特征點(diǎn)后,通過眼睛位置的先驗(yàn)知識[15],截取出眼部圖像,供下一步判斷人眼閉合程度以及求解視線方向,如圖7
所示。
圖7 截取待檢測人眼區(qū)域
本文基于人眼部特征點(diǎn)的形狀和邊緣檢測來計(jì)算眼睛寬度W和高度H之比,如式(5)所示:
由于眼睛存在著個(gè)體差異性,而且同一個(gè)人在不同自然條件下以及復(fù)雜背景中的眼睛情況也不一樣,所以直接使用R值來判斷閉合程度會(huì)增加算法的誤檢率。而本文在系統(tǒng)初始化之后已經(jīng)得到了駕駛員處于清醒狀態(tài)下的眼睛閉合
程度Rinit,使用該值重新計(jì)算寬高比R,如式(6):
利用優(yōu)化后的R能有效降低個(gè)體差異和外界環(huán)境的影響,提升算法魯棒性。為了檢測疲勞程度,引入PERCLOS P80標(biāo)準(zhǔn)[16]。所以本文將人眼閉合程度為80%時(shí)的R取作閾值,用 T hreshP80表示,那么當(dāng)駕駛員疲勞時(shí),R值會(huì)有:
基于500張眼睛圖像的訓(xùn)練統(tǒng)計(jì)可得:當(dāng)眼睛閉合程度大于80%時(shí),優(yōu)化后R的值大于3。由此把閾值 T hreshP80賦值為3,即人眼寬高比大于3時(shí)的人眼是閉著的。計(jì)算這段時(shí)間在單位時(shí)間的比例,示意圖如圖8,并且計(jì)算公式見式(8)。
圖8 PERCLOS值測量原理
而實(shí)際檢測駕駛員疲勞程度時(shí),式(8)中閉眼時(shí)間占據(jù)總時(shí)間的百分比需要變換為閉眼的幀數(shù)和總幀數(shù)的比[17]。
本文到目前為止已經(jīng)完成了人臉特征點(diǎn)定位、眼部區(qū)域提取和人眼閉合程度判斷的工作。使用5段駕駛員分別處于不同疲勞狀態(tài)下的視頻,通過上述算法求解PERCLOS值,繪制曲線如圖9所示??梢娬G闆r下駕駛員的PERCLOS值都比較小,即使受到自然環(huán)境下異常光照的問題或者存在部分誤檢的情況,該值幅度也只是略微變大,但都很少會(huì)有超過0.2的情況。當(dāng)駕駛員輕度疲勞時(shí)該值會(huì)呈現(xiàn)出波動(dòng)趨勢,即在某些幀數(shù)內(nèi)PERCLOS值會(huì)變得比較大,之后又恢復(fù)到正常水平。為減少誤檢,把輕度疲勞閾值定成0.3,把重度閾值定成0.5。即當(dāng)PERCLOS值比0.5大時(shí),判定其為重度疲勞。
圖9 PERCLOS測量結(jié)果
由于本文采用紅外攝像頭采集圖像,因此駕駛員的瞳孔與虹膜的灰度值具有明顯不同。根據(jù)位于駕駛員面前的4個(gè)紅外LED燈在眼睛反射得到的普爾欽光斑[18]與瞳孔中心[19]關(guān)系求解注視方向。
我們知道瞳孔與虹膜的灰度值明顯不同,并且瞳孔類似于一個(gè)圓,所以邊界上的點(diǎn)的梯度向量一定是通過圓心的。也就是說,瞳孔中心C和邊界上任意像素點(diǎn)xi組成的位移向量 di應(yīng)該和該像素點(diǎn)的梯度 gi方向一樣,所以只要找到二者內(nèi)積最大值所對應(yīng)的中心坐標(biāo)即為所求。如圖10所示。
圖10 瞳孔梯度向量與位移向量示意
其中 gi見 式(9), di見式(10)。式中 i、j表示圖像像素點(diǎn)位置;I為該位置上的像素值。瞳孔中心 C*的求解見式(11)。
但是使用上述方式得到的瞳孔中心往往會(huì)由于眉毛、頭發(fā)等干擾區(qū)域產(chǎn)生強(qiáng)圖像梯度而影響定位精度,所以本文從如下方面優(yōu)化瞳孔定位算法:
1)因?yàn)楸疚脑谇懊嬉呀?jīng)使用LBF改進(jìn)算法得到了精確的人眼特征點(diǎn),我們基于這些特征點(diǎn)來提取人眼可以減少眉毛等干擾區(qū)域的影響。
2)本文基于瞳孔與虹膜之間產(chǎn)生高梯度來定位,但鞏膜和虹膜間灰度值差異也很明顯,二者之間也會(huì)產(chǎn)生高梯度,嚴(yán)重影響準(zhǔn)確度。由于瞳孔顏色比其它區(qū)域都要深,所以在計(jì)算C*時(shí)進(jìn)行反色處理,添加權(quán)重WC,這樣操作使得深色的中心點(diǎn)比淺色的中心點(diǎn)被認(rèn)定為瞳孔中心點(diǎn)的可能性更大。
3)為了提高算法準(zhǔn)確度,在選擇某些中心點(diǎn)計(jì)算內(nèi)積和時(shí),首先判斷該點(diǎn)是否滿足中心點(diǎn)要求。如圖11所示的中心點(diǎn)C明顯不滿足,因?yàn)閐i和 gi方向不同,而且夾角是鈍角,此時(shí) (但是求解C*時(shí)可能會(huì)很大,所以這種中心點(diǎn)的內(nèi)積也會(huì)累加,從而增加定位誤差,因此需要將該情況的內(nèi)積篩選出去。
圖11 可以忽略的中心點(diǎn)示意
綜上,式(11)優(yōu)化后如式(12)所示。
本文通過使用一段視頻進(jìn)行瞳孔定位,截取到的一幀圖片和定位結(jié)果如圖12所示??梢娂词柜{駛員配戴眼鏡也能比較精確地定位瞳孔位置。
圖12 瞳孔定位結(jié)果
為定量分析該算法的準(zhǔn)確度,本文使用BioID數(shù)據(jù)集來測試。一共有1 520 張人臉圖像,并且每張圖片均給出了人眼中心點(diǎn)像素坐標(biāo)。本文隨機(jī)選取其中500 張,部分圖片測試效果如圖13所示。紅點(diǎn)是實(shí)際位置,白點(diǎn)是測試位置??梢娗? 張算法定位的效果較好,但是最后一張出現(xiàn)誤檢的情況,因?yàn)樵搹垐D片反光較為嚴(yán)重,瞳孔區(qū)域內(nèi)低灰度值像素點(diǎn)較少,影響了算法準(zhǔn)確度。經(jīng)過人工審查,本文誤檢圖片數(shù)量為29張,準(zhǔn)確率為94.2%。
圖13 BioID數(shù)據(jù)集的部分測試結(jié)果
由于普爾欽光斑是個(gè)小的連通區(qū)域,因此求得瞳孔中心之后,在附近搜索連通域,篩選得到光斑位置,如圖14,為下一步確定視線方向做準(zhǔn)備。
圖14 瞳孔中心與普爾欽光斑
本文求解注視區(qū)域頻率使用的是投影空間法。如圖15所示,一方面,有4個(gè)紅外LED位于駕駛員正前方的平面里,按照矩形排布。它們在駕駛員眼睛角膜的正切平面中的投影為(v1,v2,v3,v4)。由人眼構(gòu)成的先驗(yàn)知識可知,點(diǎn)p是瞳孔中心,那么就有視線方向與駕駛員前方平面相交,記作點(diǎn)g。另一方面,攝像頭采集人眼圖像,則(v1,v2,v3,v4)投 影到成像平面產(chǎn)生 (Uv1,Uv2,Uv3,Uv4)。經(jīng)上述兩方面可知一共有2次空間映射,所以利用投影空間性質(zhì),求解攝像頭成像平面里UP相對于(Uv1,Uv2,Uv3,Uv4)的坐標(biāo),就可得到人眼注視點(diǎn)g在紅外LED燈平面的位置。統(tǒng)計(jì)該落點(diǎn)在一段時(shí)間內(nèi)的分布情況,得到注視區(qū)域頻率,從而判斷駕駛員注意力是否分散。
本文將人眼視線方向應(yīng)用于疲勞駕駛檢測領(lǐng)域,它和傳統(tǒng)意義上的視線追蹤技術(shù)的著重點(diǎn)與應(yīng)用性不同[20]。應(yīng)用于人機(jī)互動(dòng)和智能控制的追蹤技術(shù)要求解出人眼注視點(diǎn)落在人機(jī)交互界面中準(zhǔn)確的坐標(biāo),所以必須保證有足夠的算法精度。但是應(yīng)用于本文疲勞駕駛檢測技術(shù)的視線方向算法,對注視點(diǎn)坐標(biāo)的準(zhǔn)確度要求不是很高。如果多幀駕駛員圖像的視線方向一直位于某個(gè)不正常區(qū)域內(nèi),說明該駕駛員注意力已經(jīng)分散,此時(shí)應(yīng)該對其預(yù)警。如圖16所示,將由4個(gè)紅外LED燈光源組成的矩形分成9個(gè)區(qū)域。統(tǒng)計(jì)注視點(diǎn)在這9個(gè)區(qū)域的落點(diǎn)頻率,即可判斷疲勞程度。
圖15 視線注視點(diǎn)平面與攝像頭圖像平面映射關(guān)系
圖16 駕駛員注視區(qū)域劃分示意圖
本文用長約10 min的駕駛員自然狀態(tài)下和輕度疲勞狀態(tài)下的2段行駛視頻進(jìn)行分析,如表3和圖17所示,從表3中可以看出正常狀態(tài)下駕駛員在大部分時(shí)間注視區(qū)域都是4,其次是1、5兩個(gè)區(qū)域。而在輕度疲勞狀態(tài)下,區(qū)域7的頻率嚴(yán)重上升,區(qū)域4頻率明顯下降,且注視區(qū)域較為集中在4、7兩個(gè)區(qū)域。因此如果駕駛員在一定幀數(shù)內(nèi)也出現(xiàn)上述現(xiàn)象,即可判斷其處于輕度疲勞或者注意力不集中。
為驗(yàn)證本文系統(tǒng)的檢測速度,使用攝像頭采集3個(gè)人的樣本視頻進(jìn)行測試,每一段包含1 800幀的圖像序列,各算法的檢測速度如表4所示??梢姼倪M(jìn)的LBF算法是主要耗時(shí)模塊,因?yàn)楸疚臓奚嗽撍惴ǖ乃俣榷岣吡藴?zhǔn)確度,而且檢測速度也可以接受。整體算法平均耗時(shí)69.1 ms,達(dá)到 15 f·s-1。
表3 注視區(qū)域頻率 %
圖17 注視區(qū)域頻率直方圖
表4 疲勞駕駛檢測算法各模塊檢測速率 ms
本文將疲勞等級分成正常、輕度和重度3級。其中輕度疲勞是指駕駛員PERCLOS值在0.3~0.5,而且注視點(diǎn)連續(xù)70幀處于區(qū)域7和區(qū)域8的比例達(dá)到40%以上。重度疲勞是PERCLOS值大于0.5,或者注視點(diǎn)的比例達(dá)到了60%以上。本文使用3個(gè)人時(shí)長為10 min的視頻進(jìn)行檢測,每個(gè)人截取9 000 f圖片,為計(jì)算算法準(zhǔn)確度,讓這3個(gè)人在疲勞和清醒狀態(tài)下頻繁切換,統(tǒng)計(jì)結(jié)果如表5。
表5 疲勞駕駛檢測算法檢測精度
可見,系統(tǒng)的平均準(zhǔn)確度達(dá)到了93.9%,運(yùn)行速率15 f·s-1,成功解決二者的平衡問題。
本文提出了一種基于人眼特征的疲勞駕駛檢測方法。主要研究工作有:
1)在對駕駛員圖像進(jìn)行預(yù)處理和人臉識別之后, 改進(jìn)了LBF 算法的初始化策略,提高了人臉特征點(diǎn)定位精度。使用歸一化特征提高了隨機(jī)森林的分類效果。
2)建立了一套以人眼閉合程度這一眼部特征作為基礎(chǔ)的PERCLOS 疲勞檢測模型。
3)提出了將駕駛員注視區(qū)域頻率和PERCLOS檢測法相結(jié)合的算法。實(shí)驗(yàn)證明,該算法提高了疲勞駕駛檢測在實(shí)時(shí)性與準(zhǔn)確性2 個(gè)方面的平衡性能。在后續(xù)的研究中,考慮將駕駛員頭部姿態(tài)角度加入到檢測參數(shù)中,以適應(yīng)更復(fù)雜的測試環(huán)境。