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