武昆亮,禹素萍,許武軍,范 紅
(東華大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201620)
疲勞是指對(duì)某體力勞動(dòng)或者腦力勞動(dòng)進(jìn)行長(zhǎng)時(shí)間重復(fù)作業(yè),所形成的一種生理阻礙[1]。《道路安全法實(shí)施條例》第六十二條表明,連續(xù)駕駛機(jī)動(dòng)車(chē)超過(guò)4h未停車(chē)休息,可視為疲勞駕駛?,F(xiàn)實(shí)中由于多方面因素的影響,例如睡眠質(zhì)量或者身體情況,4h的駕駛閾值會(huì)根據(jù)駕駛員的自身情況降低,因此需要一種自適應(yīng)的疲勞駕駛評(píng)估標(biāo)準(zhǔn)。
University of Virginia的Walt研究表明,眼睛疲勞程度與眼睛的閉合時(shí)間成正比關(guān)系。此基礎(chǔ)上,Mellon[2]提出了PERCLOS算法測(cè)算眼部疲勞,通過(guò)計(jì)算單次的眨眼動(dòng)作進(jìn)行評(píng)估,容易漏判誤判,對(duì)于連續(xù)的時(shí)間序列無(wú)法判別。
人體頭部姿態(tài)由歐拉角評(píng)估,分別為偏航角(yaw)、俯仰角(pitch)、滾轉(zhuǎn)角(roll)。目前有兩種常用的頭部姿態(tài)算法[3],一種是基于頭部外觀的方法,一種是基于模型的方法。基于外觀的方法通常使用外觀模板與真實(shí)圖像比較,通過(guò)統(tǒng)計(jì)運(yùn)算來(lái)推測(cè)具體的頭部姿態(tài),此方法過(guò)度依賴(lài)環(huán)境與精度,在實(shí)時(shí)環(huán)境下無(wú)法得到良好的應(yīng)用。基于模型的方法具有良好的實(shí)時(shí)性與魯棒性,但采集姿態(tài)的范圍有限,經(jīng)過(guò)Ferrario等人[4]研究發(fā)現(xiàn),人體頭部的俯仰角范圍為-60.4°~69.6°,滾轉(zhuǎn)角的范圍為-40.9°~36.3°,偏航角的范圍為-79.8°~75.3°,上述角度均屬于姿態(tài)的極限范圍,現(xiàn)實(shí)中,基于模型的方法并不受姿態(tài)范圍的影響,本文使用該種方法采集頭部姿態(tài)。
本文提出一種全新的BFR算法來(lái)測(cè)量眼部特征。同時(shí)將頭部姿態(tài)與眼部特征引入算法框架,進(jìn)行綜合判別。
眨眼頻率是一個(gè)人正常的生理狀態(tài)。車(chē)在駕駛時(shí),眨眼頻率可作為衡量駕駛員疲勞狀態(tài)的生理指標(biāo)。正常情況下,一個(gè)人每分鐘眨眼次數(shù)為10~15次,每?jī)纱握Q蹠r(shí)間的間隔是4~5s,本文引入了EAR(眼睛縱橫比)來(lái)檢測(cè)眨眼動(dòng)作。
每只眼睛由6個(gè)坐標(biāo)標(biāo)定,從左眼角開(kāi)始,圍繞該區(qū)域順時(shí)針旋轉(zhuǎn),如圖1所示。
圖1 眼部特征點(diǎn)
(1)
P1~P6標(biāo)定6個(gè)眼部坐標(biāo),根據(jù)坐標(biāo)高度與寬度之間的關(guān)系,推導(dǎo)出式(1)。方程分母計(jì)算水平坐標(biāo)之間的距離,分子計(jì)算垂直坐標(biāo)之間的距離,由于垂直點(diǎn)有兩組,所以進(jìn)行加權(quán)分母,確保距離不同的坐標(biāo)差擁有不同的比例因子,計(jì)算得到的EAR值具有相同尺度。眼睛縱橫比隨時(shí)間剪輯的曲線圖如圖2所示。由圖2可知,正常時(shí)間內(nèi),眼睛縱橫比恒定在0.24左右。在一次眨眼動(dòng)作中,閉眼時(shí),EAR值會(huì)迅速下降至0,睜眼時(shí),再迅速增加至0.24[5]。
圖2 EAR變化曲線
Ilse等人[6]研究,多巴胺的分泌與眨眼頻率成正比關(guān)系,多巴胺分泌不足,疲勞程度越高,眨眼頻率越低。
本文提出一種名為BFR的全新算法,該算法基于眨眼頻率,通過(guò)攝像頭采集單位時(shí)間內(nèi)被測(cè)者的眨眼動(dòng)作,如式(2)所示。
(2)
圖3 BFR原理圖
(3)
若采單位時(shí)間內(nèi)平均眨眼次數(shù)α小于等于單位時(shí)間內(nèi)最低眨眼次數(shù),如式(4)所示,則判定疲勞駕駛。降低閾值,給之后的姿態(tài)單元預(yù)留判定空間,并起到防患于未然的效果。
「T·BFR?≥α
(4)
該方法首先檢測(cè)司機(jī)是否在位,因此面部檢測(cè)是算法的基礎(chǔ)。Viola和Jones[7]將Haar特征的概念引入了面部識(shí)別領(lǐng)域,Haar-like特征是一組數(shù)字圖像特征,反應(yīng)圖像空間灰度值的變化,Haar-like特征分為三類(lèi),分別為邊緣特征、線性特征、中心特征。
在獲得Haar-like特征之后,需要利用積分圖來(lái)進(jìn)行運(yùn)算,積分圖定義為(x,y)左上角的所有像素之和。如圖4所示,若A、B、C、D區(qū)域左上角區(qū)域像素和分別為S1、S2、S3、S4。則A、B、C、D區(qū)域的像素和見(jiàn)式(5)
圖4 積分圖概念
S1=S(A)
S2=S(B)-S(A)
S3=S(C)-S(A)
S4=S(D)-S(C)-S(B)+S(A)
(5)
Adaboost(adaptive boosting)算法是一種自適應(yīng)性增強(qiáng)算法。本次仿真利用Adaboost算法識(shí)別司機(jī)的面部,從而判斷是否落座。算法的核心思想是識(shí)別訓(xùn)練,強(qiáng)化弱分類(lèi)器的識(shí)別率,若訓(xùn)練弱分類(lèi)器出現(xiàn)錯(cuò)誤樣本,則將錯(cuò)誤樣本的權(quán)值增大,同樣,減小正確分類(lèi)的樣本權(quán)值,將這些更新權(quán)重后的樣本進(jìn)行迭代,來(lái)訓(xùn)練下一個(gè)弱分類(lèi)器,直到錯(cuò)誤率達(dá)到所設(shè)定的最低閾值?;虻螖?shù)已達(dá)最大值,則可以確定最終的強(qiáng)分類(lèi)器,多個(gè)強(qiáng)分類(lèi)器進(jìn)行級(jí)聯(lián),得到最終Haar分類(lèi)器[8]。
本次仿真中,需要采集司機(jī)的頭部姿態(tài),此單元利用偏航角、俯仰角、滾轉(zhuǎn)角對(duì)頭部姿態(tài)進(jìn)行衡量。俯仰角反應(yīng)仰視運(yùn)動(dòng)或者俯視運(yùn)動(dòng),滾轉(zhuǎn)角反應(yīng)左右擺頭運(yùn)動(dòng),偏航角反應(yīng)左右轉(zhuǎn)頭運(yùn)動(dòng)。當(dāng)司機(jī)疲勞時(shí),頭部會(huì)猛地下點(diǎn)或者向左右耷拉。以上分析表明,偏航角代表正常駕駛時(shí)的左右轉(zhuǎn)頭,俯仰角與滾轉(zhuǎn)角代表疲勞時(shí)候的頭部姿態(tài)[9]。
(6)
頭部姿態(tài)通過(guò)座椅前的攝像機(jī)采集,攝像機(jī)模型公式為式(6)所示。式中:u,v是圖像坐標(biāo)系下的2D坐標(biāo),fx,fy,cx,cy是相機(jī)標(biāo)定時(shí)設(shè)定的內(nèi)參矩陣,rij,ti分別構(gòu)成旋轉(zhuǎn)矩陣與平移向量;X,Y,Z為世界坐標(biāo)系下的3D位置坐標(biāo)。比例因子s、2D、3D坐標(biāo)和內(nèi)參矩陣均為已知參數(shù),平移向量通過(guò)采集得到的信息進(jìn)行計(jì)算,因此可以直接求解出旋轉(zhuǎn)矩陣R。歐拉角可用旋轉(zhuǎn)矩陣進(jìn)行表示。且旋轉(zhuǎn)矩陣R=Rx(α)·Ry(β)·Rz(γ)。通過(guò)矩陣乘法運(yùn)與R聯(lián)立。由于R已根據(jù)攝像機(jī)模型求出結(jié)果,可用已知旋轉(zhuǎn)矩陣的參數(shù)rij,聯(lián)立計(jì)算出歐拉角,如(7)式所示
(7)
使用python3.6+opencv3.4.1+dlib19.1的開(kāi)發(fā)環(huán)境,python編譯器為Spyder,臉部模型采用shape_predictor_68_face_landmarks,眨眼閾值(threshold)設(shè)定為0.22,frames設(shè)定為3,表明眼睛長(zhǎng)寬比小于0.22時(shí),3個(gè)連續(xù)的幀一定發(fā)生眨眼動(dòng)作,如圖5所示。
圖5 眨眼檢測(cè)
眼部特征采集是系統(tǒng)第1個(gè)重要模塊,為體現(xiàn)系統(tǒng)的自適應(yīng)性,對(duì)不同對(duì)象生成不同的BFR值。本次實(shí)驗(yàn)一共選取6位研究對(duì)象,如表1所示。采集單位時(shí)間1min內(nèi)的眼部動(dòng)態(tài)特征,生成眨眼時(shí)間序列。測(cè)試結(jié)果如表2所示。
表1 實(shí)驗(yàn)對(duì)象
表2 BFR算法
A、B、D的眨眼間隔具有較大時(shí)間跨度,A的跨度為4s~7s,B、D的跨度為4s~8s,其調(diào)節(jié)因子擁有較大的調(diào)節(jié)范圍。現(xiàn)實(shí)測(cè)試中,A、B、D精神狀態(tài)良好,采集時(shí)眼部放松,眨眼自然,正常情況下,最低頻率至疲勞頻率的可調(diào)域大,因此乘以擁有較大的范圍的調(diào)節(jié)因子,與推理相符合。
C、E的間隔跨度比A、B、D小,但起始時(shí)間間隔遠(yuǎn)大于A、B、D。C的起始間隔為6s,跨度是6s~8s,E的起始間隔為8s,跨度是8s~11s,其調(diào)節(jié)因子范圍較A、B、D稍小。現(xiàn)實(shí)測(cè)試中,C、E測(cè)試的時(shí)間分別為午餐后與晚上10點(diǎn)。午餐后容易產(chǎn)生食困,C與最低頻率同為1/8的B、D相比,C的疲勞頻率稍高,因此可達(dá)到閾值會(huì)稍低,即進(jìn)入疲勞狀態(tài)的時(shí)間會(huì)更快,符合推理。E的起始間隔為9s,可直接判斷E已經(jīng)進(jìn)入疲勞狀態(tài),與推理相符。
F的時(shí)間跨度比A、B、D小,起始時(shí)間間隔與A、B、D相同,都為4s。F的調(diào)節(jié)因子可調(diào)范圍較小,最低頻率為1/6。假設(shè)單位時(shí)間為1min,則單位時(shí)間乘BFR的值為9.06,表明1min眨眼九次就判定眼部疲勞。這不符合算法推理。在現(xiàn)實(shí)測(cè)試中,F(xiàn)精神狀況良好,但知道本次采集的目的,這導(dǎo)致了眨眼動(dòng)作不自然,眨眼間隔下意識(shí)控制在4s~6s。正常情況下,單位時(shí)間內(nèi)人的眨眼間隔不會(huì)在某一個(gè)固定值上下浮動(dòng),具有很大的差異性。因此設(shè)定,測(cè)定時(shí)需要一定的隱蔽性,且眨眼間隔的min值與max值相差應(yīng)大于等于4s,否則在下一個(gè)單位時(shí)間周期內(nèi)重新測(cè)定。
環(huán)境采用python3.6+opencv3.4.1+dlib19.1,Haar分類(lèi)器使用haarcascade_frontalface_alt2,模型采用shape_predictor_68_face_landmarks。先進(jìn)行面部檢測(cè),可成功檢測(cè)面部[10],如圖6。
圖6 單個(gè)人臉檢測(cè)
攝像頭內(nèi)參矩陣設(shè)定fx=653.678,fy=653.083,cx=319.5,cy=239.5,攝像頭的畸變系數(shù)與鏡頭的物理屬性和畸變模型有關(guān),由MATLAB的相機(jī)標(biāo)定工具箱計(jì)算得到,在此次的仿真中,畸變系數(shù)經(jīng)計(jì)算得知:D=[0.07083,0.06914,0,0,-1.307]。攝像頭像素為720P。以一個(gè)邊長(zhǎng)為20cm的正方體框定頭部,在正方體內(nèi),定義面部關(guān)鍵點(diǎn)3D坐標(biāo),部分坐標(biāo)見(jiàn)表3。
表3 面部關(guān)鍵點(diǎn)3D坐標(biāo)
得知這些已知變量后,可計(jì)算出旋轉(zhuǎn)矩陣R,從而得到歐拉角。正常姿態(tài)下仿真結(jié)果如圖7所示,非正常姿態(tài)下仿真結(jié)果如圖8所示。
圖7 正常姿態(tài)
圖8 疲勞姿態(tài)
實(shí)驗(yàn)共采集2000個(gè)頭部姿態(tài),1000個(gè)正常的頭部姿態(tài),標(biāo)簽為1,1000個(gè)疲勞的頭部姿態(tài),標(biāo)簽為0。仿真結(jié)果如圖9、圖10所示。
圖9 正常姿態(tài)三維坐標(biāo)圖
圖10 疲勞姿態(tài)三維坐標(biāo)圖
將正常姿態(tài)與疲勞姿態(tài)的歐拉角利用Matlab進(jìn)行3D建模,分析正常姿態(tài)與疲勞姿態(tài)的關(guān)系。正常姿態(tài)下俯仰角的變化范圍大致為5°~7°。疲勞姿態(tài)下俯仰角范圍為10°~25°。正常姿態(tài)與疲勞姿態(tài)下,偏航角范圍大致在-10°~20°,表明司機(jī)查看路況的轉(zhuǎn)頭動(dòng)作,與理論相符。正常姿態(tài)下,觀察縱軸,滾轉(zhuǎn)角變化的范圍呈小區(qū)域波浪狀,方向?qū)?shù)小,表明正常姿態(tài)下擺頭動(dòng)作不明顯,疲勞姿態(tài)下,歐拉角曲面的方向?qū)?shù)大,具有不可預(yù)測(cè)性,表明此時(shí)多為不正常姿態(tài)。
最終選用Keras深度學(xué)習(xí)框架,并用TensorFlow作為后端引擎[11]。輸入到含有8個(gè)隱藏單元的Dense層,該層激活函數(shù)使用relu,最后一層使用含有1個(gè)隱藏單元的Dense層,該層的激活函數(shù)使用sigmoid,優(yōu)化器為rmsprop,損失函數(shù)使用binary_crossentropy,指標(biāo)函數(shù)為accuracy,驗(yàn)證集采集2000個(gè)頭部進(jìn)行驗(yàn)證,經(jīng)過(guò)實(shí)驗(yàn),模型精度為91.7%。滿(mǎn)足實(shí)驗(yàn)需求。
最終結(jié)果見(jiàn)表4,實(shí)驗(yàn)對(duì)象A、C、D到達(dá)BFR閾值的時(shí)間在2小時(shí)30分左右,檢測(cè)姿態(tài)疲勞時(shí)間大致在第3個(gè)小時(shí),比法定4個(gè)小時(shí)少1個(gè)小時(shí),可以起到提前預(yù)警的作用。C調(diào)節(jié)因子的調(diào)節(jié)范圍較小,提前達(dá)到BFR閾值時(shí)間,判定疲勞時(shí)間在2小時(shí)14分,表明飯后駕駛更易到達(dá)疲勞狀態(tài)。E的起始眨眼間隔為9s,可直接判斷處于疲勞狀態(tài)。F到達(dá)BFR閾值的時(shí)間為4小時(shí)15分,與法定疲勞駕駛時(shí)間相符,但判定眼疲勞后立馬檢測(cè)出姿態(tài)疲勞,表明司機(jī)已提前進(jìn)入疲勞駕駛狀態(tài),此時(shí)已無(wú)法起到預(yù)警的作用。故采集眼部特征時(shí),需做到隱蔽性,采集駕駛員自然狀態(tài)下的眼部動(dòng)作。
表4 試驗(yàn)結(jié)果
6位實(shí)驗(yàn)對(duì)象中5位可成功預(yù)警,實(shí)驗(yàn)精度為83.3%,考慮F的特殊性,真實(shí)精度還會(huì)略高。
導(dǎo)入python的time庫(kù)進(jìn)行效率測(cè)試,見(jiàn)表5。人臉檢測(cè)模塊調(diào)用Haar分類(lèi)器,執(zhí)行時(shí)間為7.968ms,dlib68點(diǎn)模型具有很強(qiáng)的魯棒性與高效性,耗時(shí)0.534ms,BFR計(jì)算耗時(shí)0.012ms。總耗時(shí)約為8.5ms。
表5 系統(tǒng)的執(zhí)行效率分析
胡卓[12]對(duì)面部圖像進(jìn)行預(yù)處理,利用PERCLOS檢測(cè),采集10段視頻數(shù)據(jù),識(shí)別率為80%,低于本方法。王小帆[13]使用瞳孔分割進(jìn)行眨眼檢測(cè),精度為92%,其疲勞檢測(cè)受姿態(tài)方位與攝像機(jī)角度的影響,檢測(cè)率最高可達(dá)到85.6%,略高于本方法,但執(zhí)行效率為62ms,不利于實(shí)時(shí)檢測(cè)。蔡伽[14]使用改進(jìn)的Adaboost算法進(jìn)行人臉檢測(cè),并使用PERCLOS檢測(cè)疲勞,Adaboost算法經(jīng)過(guò)優(yōu)化后,執(zhí)行效率有所提高,但仍未優(yōu)于本文方法。
表6 系統(tǒng)和精度對(duì)比
本文提出一種基于BFR算法與頭部姿態(tài)的綜合判別系統(tǒng),BFR算法可檢測(cè)駕駛員視疲勞,針對(duì)不同駕駛對(duì)象生成不同的疲勞閾值。頭部姿態(tài)經(jīng)采集計(jì)算,輸入到神經(jīng)網(wǎng)絡(luò)形成個(gè)體樣本集,判定駕駛員是否疲勞駕駛。采集過(guò)程對(duì)攝像頭的安裝不限固定方位,具有自適應(yīng)性。實(shí)驗(yàn)表明,該系統(tǒng)對(duì)疲勞駕駛擁有提前預(yù)警作用,道路安全法規(guī)定連續(xù)駕駛機(jī)動(dòng)車(chē)超過(guò)4小時(shí)未停車(chē)休息,可視為疲勞駕駛,本文判定時(shí)間較4小時(shí)略短,為駕駛員提供充分的預(yù)警時(shí)間,提高駕駛安全性。