朱 艷,謝忠志,于 雯,李曙生,張 遜
(泰州職業(yè)技術學院 機電技術學院,泰州225300,中國)
造成交通事故的主要因素有酒后駕駛、超速駕駛、違章駕駛和疲勞駕駛等4 個方面。疲勞駕駛造成的交通事故占交通事故總數(shù)的比例超過20%,在特大交通事故中的占比超過45%。夜間開車比白天更容易疲勞,凌晨1 點到3 點是交通事故高發(fā)時間段,大多數(shù)特大交通事故發(fā)生在該時間段。因此如何有效地在低光照環(huán)境下監(jiān)控和預防疲勞駕駛一直是研究重點[1],對于減少交通事故具有重要的意義。
從特征源來分,對于駕駛員疲勞狀態(tài)的檢測主要有:基于駕駛員生理參數(shù)的識別方法、基于車輛狀態(tài)信息的識別方法和基于駕駛員行為特征的識別方法。
基于生理參數(shù)的識別方法屬于接觸式測量,通過穿戴在身上的各類傳感器獲取駕駛員腦電、心電和肌電信號,從中提取出反映疲勞狀態(tài)的特征指標[2-4]。N. S.Disa 等人[2]通過傳感器采集駕駛員肌電信號和呼吸信號,采用近似熵方法對信號處理后,通過閾值判斷來檢測疲勞狀態(tài)。李江天等人[3]采用多信息融合的方式,將采集到的腦電、心電、肌電和血氧飽和度 4 種信號作為分析數(shù)據(jù)源,采用神經(jīng)網(wǎng)絡算法對駕駛員疲勞狀態(tài)進行識別,實現(xiàn)了較好的檢測效果。此類方法具有較高的識別精度和可靠性,但是由于需要將各類傳感器穿戴在身上,從而造成駕駛人員行動不便,因此很難大規(guī)模推廣。
基于車輛狀態(tài)信息的識別方法是通過角度、速度等傳感器采集車輛行駛狀況參數(shù),并從中提取出特征指標來進行疲勞狀態(tài)識別[5-8]。F. Friedrichs 等人[5]將采集到的方向盤轉(zhuǎn)角、車輛橫擺角、方向盤修正頻率等信息作為數(shù)據(jù)源,采用神經(jīng)網(wǎng)絡算法識別疲勞狀態(tài),識別精度達到了84%。劉軍[6]將采集到的方向盤轉(zhuǎn)角信息作為疲勞狀態(tài)檢測的數(shù)據(jù)源,提取出反映車輛運行狀態(tài)的兩種有效指標,從而進行疲勞狀態(tài)識別。由于車輛的運行狀態(tài)受道路狀況和駕駛習慣等外界因素影響較大,因此該方法識別精度較低,適應性較差。
基于駕駛員行為特征的識別方法,主要通過圖像傳感器實時采集駕駛員面部表情、眼睛活動、頭部運動和身體坐姿等行為特征來實現(xiàn)疲勞狀態(tài)識別[9-19]。W. Kim 等人[13]將采集到的嘴巴、頭部和眼睛特征數(shù)據(jù)輸入卷積神經(jīng)網(wǎng)絡模型來識別疲勞狀態(tài)。胡習之[14]從圖像中提取眼睛和面部特征點坐標,并通過機器學習算法進行疲勞識別。由于三原色(red-green-blue,RGB)圖像傳感器受光線影響較大,并且疲勞特征提取和機器學習算法耗時較長,因此該方法實時性和適應性較差。為適應各種光照環(huán)境,LIU Weiwei 等人[19]基于虹膜對紅外光線反射率較高這一特性,通過紅外(infra-red, IR)攝像頭與窄帶濾光片定位虹膜,并提取眼部特征用于疲勞判斷取得了不錯的效果,然而,窄帶濾光片幾乎濾除了所有的自然光線,無法提取其他面部疲勞特征,由于疲勞特征比較單一,因此識別精度相對較低。
本文選用深度視覺傳感器Kinect V2 作為圖像采集設備,首先提取面部特征點和頭部轉(zhuǎn)角數(shù)據(jù),通過坐標轉(zhuǎn)換將數(shù)據(jù)進行標準化處理,然后對眼睛和嘴巴開合度進行歸一化計算,并在此基礎上提取疲勞特征數(shù)據(jù)。最后采用基于數(shù)據(jù)統(tǒng)計序列的卷積神經(jīng)網(wǎng)絡算法建立檢測模型對疲勞狀態(tài)進行識別,并通過Visual Studio 和MATLAB 混合編程的方式完成實驗平臺的搭建,對本文方法進行驗證。
微軟提供了專門用于Kinect 傳感器的人臉跟蹤功能模塊(Face Tracking SDK),首先將改進的人臉特征向量輸入Adaboost 分類器進行人臉檢測,之后采用AAM 算法對人臉進行實時跟蹤并對121 個面部特征點進行提取,其工作流程如圖1 所示。
圖1 Face Tracking 人臉跟蹤流程圖
FT_SENSOR_DATA 結構用于存放人臉追蹤所需的輸入數(shù)據(jù),包括彩色圖像數(shù)據(jù)、深度圖像數(shù)據(jù)和頭頸骨骼坐標數(shù)據(jù)三部分,其中的頭頸骨骼坐標也是通過深度圖像數(shù)據(jù)計算得到。由此可知,該算法在人臉實時跟蹤中,深度圖像數(shù)據(jù)起到了至關重要的作用。相對于僅使用RGB 彩色圖像數(shù)據(jù)的人臉跟蹤算法,該算法跟蹤效果更好,跟蹤速度更快(一般可以保證在50 ms 之內(nèi)),且受光線影響較小,非常適用于低光照環(huán)境下的人臉實時跟蹤。
圖2為Face Tracking SDK 提供的人臉跟蹤算法在低光照環(huán)境下的實時跟蹤效果。由圖2a 可見:低光照環(huán)境下的RGB 圖像清晰度非常低,基于該圖像的人臉跟蹤算法很難進行實時跟蹤,面部特征點數(shù)據(jù)提取困難。圖2b 圖為基于深度圖像的人臉實時跟蹤。由于深度信息由紅外傳感器提供,受光線影響較小,所以采用深度圖像,可以在低光照環(huán)境下較好地實現(xiàn)人臉實時跟蹤,并精確地提取面部121 個特征點數(shù)據(jù)。
圖2 低可見度下RGB 圖像和深度圖像人臉跟蹤效果
疲勞識別所用到的面部特征點分布如圖3 所示。
圖3 疲勞識別所用面部特征點分布
由于駕駛員在疲勞狀態(tài)下眼部和嘴部特征點數(shù)據(jù)變化比較明顯,因此,本文選取眼部和嘴部的32 個特征點數(shù)據(jù)作為疲勞狀態(tài)識別的分析數(shù)據(jù)源,選取94 號特征點(鼻骨中下緣)作為坐標轉(zhuǎn)換參考基準點,用于對特征數(shù)據(jù)標準化處理。
獲取人臉跟蹤結果后,除了可以得到面部特征點數(shù)據(jù),還可以通過Get3DPose 函數(shù)直接獲取面部轉(zhuǎn)角數(shù)據(jù),通過該數(shù)據(jù)對采集到的面部特征數(shù)據(jù)進行標準處理。圖4 是面部轉(zhuǎn)角數(shù)據(jù)的定義:θP為低頭和抬頭角度,其角度識別范圍為-45°~ 45°,θR為左右偏頭角度,其角度識別范圍為-90°~ 90°,θS為左右搖頭角度,其角度識別范圍為-45°~ 45°。
圖4 Kinect V2 頭部轉(zhuǎn)角識別示意圖
在人臉跟蹤和面部特征點提取時,由于采用的是Kinect 自身的坐標系統(tǒng)來輸出三維跟蹤結果(x, y, z),坐標原點(x= 0,y= 0,z= 0)位于kinect的紅外相機中心,X軸方向為順著kinect 照射方向的左方向,Y軸方向為順著kinect 照射方向的上方向,Z軸方向為順著kinect的照射方向,如圖5 所示。
圖5 面部特征點數(shù)據(jù)坐標系統(tǒng)
由于Kinect 的拍攝角度和距離會隨著臉部的移動不斷發(fā)生變化,因此實時提取到的面部特征數(shù)據(jù)也會變化,特別是在臉部轉(zhuǎn)角較大的情況下,坐標數(shù)據(jù)差異更大。如果直接采用該坐標系下的面部特征點數(shù)據(jù)進行疲勞狀態(tài)分析,則會因為數(shù)據(jù)沒有標準化而造成識別精度嚴重下降。
通過坐標變換,將采集到的面部特征數(shù)據(jù)轉(zhuǎn)換至Z軸和面部垂直且坐標原點與面部等高的新坐標系統(tǒng)中,完成特征數(shù)據(jù)的標準化處理,這樣可以最大程度的降低由于拍攝角度和拍攝距離不同而造成的數(shù)據(jù)偏差,從而大大提高識別精度。坐標變換過程如圖6所示。
圖6 面部特征坐標變換過程
坐標變換的步驟如下。
步驟1 選取94 號特征點(鼻骨中下緣)A(xA,yA,zA)作為坐標轉(zhuǎn)換參考基準點,以點A為旋轉(zhuǎn)中心,以線段OA為母線,旋轉(zhuǎn)角度為θS,將Kinect 坐標原點O(0, 0, 0)移動至O1(x1, 0,z1),移動過程中Y方向坐標保持不變。
A(xA,yA,zA)和O(0, 0, 0)的Euclid 距離為O1(x1, 0,z1)和O(0, 0, 0)之間的Euclid 距離d0可由式(2)得:
式(3)和(4)聯(lián)立,得x1和z1。
步驟2 將O1(x1, 0,z1)沿著豎直方向移動到O2(x1,yA,z1),移動距離為yA。移動過程中保持X軸和Z軸坐標不變。至此,O2(x1,yA,z1)被移動到面部的正前方向且與面部中心(94 號特征點)等高的位置。將O2(x1,yA,z1)作為新坐標系的原點。
步驟3 繞O2X軸旋轉(zhuǎn)θP角度,旋轉(zhuǎn)矩陣為
步驟4 繞O2Y軸旋轉(zhuǎn)θS角度的旋轉(zhuǎn)矩陣為
步驟5 繞O2Z軸旋轉(zhuǎn)θR角度,其相對應的旋轉(zhuǎn)矩陣為
步驟6 至此,生成新的坐標系O2-X2Y2Z2,面部特征點數(shù)據(jù)在該坐標系下的坐標可由式(8)轉(zhuǎn)換得到,R0=R1(θP)R2(θS)R3(θR)。
右眼輪廓曲線以53 號和56 號節(jié)點為界,可分成上下2 部分,左眼輪廓曲線以20 號和23 號節(jié)點為界可分成上下2 部分,嘴巴輪廓曲線以88 號和89 號節(jié)點為界可分成上下2 部分。上半部分輪廓曲線可由式 (9)中的F1(x)所示,下半部分輪廓曲線由式(9)中的F2(x)所示。
分別將左眼、右眼和嘴巴的上下2 部分節(jié)點數(shù)據(jù)帶入F1(x)和F2(x),計算其誤差平方和,找到使誤差平方和最小的函數(shù)作為輪廓擬合曲線。圖7 中曲線1 為眼睛在閉合和睜開狀態(tài)下的輪廓擬合曲線,圖8 中曲線1為嘴巴在閉合和張開狀態(tài)下的輪廓擬合曲線。
駕駛員的疲勞狀態(tài)很容易通過眼睛和嘴巴的形態(tài)變化反映出來,因此如何對眼睛和嘴巴的開度大小進行標定至關重要。對于不同的駕駛員,眼睛和嘴巴的開合狀態(tài)差異較大,所以需要一種歸一化的指標對眼睛和嘴巴開度大小進行標定,以提高檢測的準確性和魯棒性。
由式(10)計算眼睛和嘴巴開合程度,并將其作為開度大小標定的歸一化指標。A1為眼睛和嘴巴輪廓擬合曲線所圍成的面積,A2為其外接圓的面積大小。如圖7中曲線2 為眼睛在閉合和睜開狀態(tài)下各特征點的外接圓。圖8 中曲線2 為嘴巴在閉合和張開狀態(tài)下的外接圓。
圖7 眼睛輪廓擬合曲線和外接圓
圖8 嘴巴輪廓擬合曲線和外接圓
眼睛開合度歸一化指標ηNAE如圖9 所示。嘴巴開合度歸一化指標ηNAM如圖10 所示。
圖9 眼睛開合度歸一化指標ηNAE 曲線圖
由圖9 可知:眼睛在睜開狀態(tài)和閉合狀態(tài)下的ηNAE值差別明顯,眼睛在睜開狀態(tài)下ηNAE的值大于0.25,而在完全閉合狀態(tài)下ηNAE的值小于0.2。
由圖10 可知:嘴巴在張開狀態(tài)和閉合狀態(tài)下的ηNAM值差別比較大,閉合狀態(tài)下的ηNAM值在0.3上下波動,而完全張開狀態(tài)下的ηNAM值均大于0.55。因此,選取ηNAE和ηNAM作為眼睛和嘴巴開度大小標定的歸一化指標,具有較高的識別精度和較好的魯棒性。
圖10 嘴巴開合度歸一化指標ηNAM 曲線圖
1)眨眼頻率fb。根據(jù)數(shù)據(jù)統(tǒng)計發(fā)現(xiàn),正常精神狀態(tài)下人的眨眼頻率為12~15 次/min,而在疲勞狀態(tài)下人的眨眼頻率會大大降低,在嚴重疲勞狀態(tài)下眨眼頻率會小于6 次/min。選取ηNAE= 0.25 作為眨眼識別閾值,由于Kinect 傳感器的幀率大約為30 幀/s,非疲勞狀態(tài)下,一次完整眨眼過程中ηNAE≤ 0.25 的持續(xù)幀數(shù)為5~8 幀,因此,如果連續(xù)5 幀以上的圖像ηNAE≤0.25,則判定完成了一次眨眼過程。將30 s 作為一個統(tǒng)計時長Δt,計算眨眼頻率fb。
2)眨眼平均時長tb。根據(jù)統(tǒng)計發(fā)現(xiàn),正常精神狀況下人的眼睛從全部睜開到全部閉合完成一次眨眼過程的時間為0.25 ~0.35 s。但是在疲勞狀態(tài)下,完成一次眨眼的時長要比正常精神狀態(tài)下的眨眼時長大的多。眨眼平均時長tb由式(11)計算,其中:ns為一個統(tǒng)計時長內(nèi)眨眼過程持續(xù)圖像幀數(shù),nf為一個統(tǒng)計時長內(nèi)的圖像幀數(shù),N表示一個統(tǒng)計時長Δt 內(nèi)眨眼的次數(shù)。
3)眼睛閉合總時長tc。在正常精神狀態(tài)下,除了眨眼過程外人的眼睛都處于最大張開狀態(tài),而在疲勞狀態(tài)下人的眼睛會較長時間處于完全閉合或半閉合狀態(tài)。選取ηNAE= 0.2 作為眼睛閉合狀態(tài)識別閾值,計算一個統(tǒng)計時長Δt內(nèi)所有ηNAE≤0.2 的圖像總幀數(shù),從而得到眼睛閉合總時長tc。
4)打哈欠頻率fy。但在說話或吃東西時,嘴巴也會表現(xiàn)出和打呵欠類似的特征,因此需要將它們區(qū)分開來。研究發(fā)現(xiàn),打哈欠時人的嘴巴打開的程度比較大,并且持續(xù)的時間相對較長。選取ηNAM= 0.45 作為打呵欠狀態(tài)識別閾值,如果連續(xù)20 幀以上的圖像ηNAM≥0.45,則判定完成一次打哈欠過程,計算出打哈欠的頻率fy。
5)打哈欠總時長ty。在疲勞狀態(tài)下,打哈欠時嘴巴會張開到最大狀態(tài),其總時長要遠遠大于其他狀態(tài)。選取ηNAM= 0.5 作為嘴巴最大張開狀態(tài)閾值。計算一個統(tǒng)計時長Δt內(nèi)所有ηNAM≥0.5 的圖像總幀數(shù),從而計算得到嘴巴打哈欠總時長ty。
6)低抬頭頻率fh。駕駛員在疲勞狀態(tài)下,會出現(xiàn)頻繁低抬頭或長時間低頭現(xiàn)象[20]。通過Kinect 人臉跟蹤功能模塊(Face Tracking SDK)獲取的面部轉(zhuǎn)角參數(shù)中的θP來確定低頭角度。實驗研究發(fā)現(xiàn)θP≤30°時,即可判定駕駛員處于低頭狀態(tài),計算一個統(tǒng)計時長Δt內(nèi)的低頭頻率fh,如果低頭頻率大于8 min-1,則判定駕駛員已經(jīng)處于疲勞狀態(tài)。
本文將疲勞狀態(tài)劃分為不疲勞、輕度疲勞、中度疲勞和嚴重疲勞4 個等級,疲勞等級和識別特征數(shù)據(jù)之間的關系如表1 所示。
表1 疲勞等級劃分和識別特征數(shù)據(jù)之間的關系
由表1可知,對眨眼頻率、眨眼平均時長、眼睛閉合總時長、打哈欠頻率、打哈欠總時長和低抬頭頻率6個疲勞識別特征數(shù)據(jù)進行閾值分析可以對駕駛員疲勞狀態(tài)進行識別,由于閾值分析算法簡單,因此識別速度快,對設備性能要求不高,系統(tǒng)實時性較好,但是由于不具備非線性處理和自學習能力,因此識別精度不高,魯棒性差。本文采用基于數(shù)據(jù)統(tǒng)計序列的卷積神經(jīng)網(wǎng)絡算法構建駕駛員疲勞狀態(tài)識別模型,算法內(nèi)部采用多權值的加權運算,具有更好的魯棒性和適應性[21-22]。選取統(tǒng)計時長 Δt= 30 s,計算6 個識別特征數(shù)據(jù)的大小,將連續(xù)6 Δt(3 min)作為一個周期,構建66 樣本數(shù)據(jù)如式(12)所示,將其作為卷積神經(jīng)網(wǎng)絡識別模型的輸入。
由于樣本數(shù)據(jù)維度較小,因此構建的卷積神經(jīng)網(wǎng)絡疲勞識別模型采用2 層結構,如圖11 所示。
圖11 卷積神經(jīng)網(wǎng)絡疲勞識別模型結構
第1 個卷積層大小為3×3×4,用于對疲勞特征進行初步提取。第2 個卷積層大小為3×3×8,用于對疲勞特征進行精確提取。中間經(jīng)過2 個2×2×1 的池化層
連接,可以有效降低特征維度,提高運算效率。采用1×1×4 的全連接層將權重矩陣與輸入向量相乘再加上偏執(zhí),得到分類的得分,并將“分布式特征表示”映射到樣本標記空間。最后采用Softmax 輸出層將4 個疲勞狀態(tài)的得分歸一化為(0,1)的概率,將概率最大的確定為當前疲勞等級。
安裝微軟的Kinect for Windows SDK 和Kinect for Windows Developer Toolkit,配置軟件Visual Studio 中的include 和lib 的路徑即可實現(xiàn)對Kinect V2 深度視覺傳感器的開發(fā)。卷積神經(jīng)網(wǎng)絡算法通過MATLAB軟件完成,基于其數(shù)據(jù)處理能力和復雜模型求解能力,可以完成疲勞狀態(tài)識別模型的構建。
圖12為由MATLAB 程序?qū)崿F(xiàn)的卷積神經(jīng)網(wǎng)絡疲勞識別模型訓練結果。
圖12 卷積神經(jīng)網(wǎng)絡疲勞識別模型訓練過程
由圖12 可知:當訓練次數(shù)在90 次左右時,各隱含層參數(shù)基本收斂,訓練準確率達到100%。這表明了該卷積神經(jīng)網(wǎng)絡模型具有良好的學習能力。
采用Visual Studio 和MATLAB 混合編程的方式實現(xiàn)疲勞識別系統(tǒng)實驗平臺。Visual Studio 軟件安裝windows 10 SDK,對Visual Studio 和MATLAB 進行路徑和屬性配置,即可實現(xiàn)2 個軟件之間的交互編程。
參加實驗的人員在駕駛模擬器中進行3~6 h 的連續(xù)駕駛,由視頻記錄下在不疲勞、輕度疲勞、中度疲勞和嚴重疲勞4 個狀態(tài)下駕駛人的行為。選取20 個不同性別、身高、外貌、膚色的駕駛員作為實驗對象,在不同光照條件下分別采集2 h 駕駛視頻,實驗光照環(huán)境如圖13 所示。實驗對象的年齡分布、男女比例以及不同疲勞狀態(tài)下的模擬視頻時長如表2 所示。
表2 實驗對象年齡、性別、不同疲勞狀態(tài)下的模擬時長
圖13 疲勞駕駛實驗所處的光照環(huán)境圖
將其中10 人的駕駛視頻構建得到的200 個樣本作為訓練樣本,輸入到卷積神經(jīng)網(wǎng)絡疲勞識別模型(convolutional neural network,CNN)進行學習。將另外10 人的駕駛視頻構建得到的200 個樣本作為測試樣本,輸入到卷積神經(jīng)網(wǎng)絡進行疲勞識別。并將相同的實驗數(shù)據(jù)輸入閾值分析(threshold value analysis,TVA)、支持向量機(support vector machine,SVM)、強分離器(Ada-Boost)、決策樹(decision tree,DT)和K 近鄰(k-nearest neighbor,KNN)算法模型進行識別[23-25]。實驗結果如表3 所示。
表3 正常光照和低光照環(huán)境下各算法模型識別結果
可以發(fā)現(xiàn),閾值分析方法具有最快的識別速度,但其識別精度比較低,僅有65%左右。本文設計的卷積神經(jīng)網(wǎng)絡識別算法(CNN)在正常光照和低光照環(huán)境下的識別精度都超過了90%,并且識別時間僅130 ms左右,無論識別精度還是識別速度均優(yōu)于其它幾種機器學習識別模型。
本文采用深度視覺傳感器Kinect V2 作為圖像獲取設備,采用基于數(shù)據(jù)統(tǒng)計序列的卷積神經(jīng)網(wǎng)絡算法建立識別模型,并構建疲勞狀態(tài)檢測實驗平臺,最后在正常光照和低光照環(huán)境下進行了實驗。結論如下:
1) 采用深度視覺傳感器Kinect V2 進行人臉跟蹤和面部特征數(shù)據(jù)提取,不論在正常光照還是低光照環(huán)境下,都可以實現(xiàn)實時精確地跟蹤,相比于RGB 視覺傳感器,具有更好的適應性。
2) 基于最小二乘法對眼睛和嘴巴輪廓進行曲線擬合,并將擬合曲線和外接圓的面積比作為眼睛和嘴巴開合度歸一化指標,實驗發(fā)現(xiàn),相對于其它特征指標,具有更好的魯棒性。
3) 采用基于數(shù)據(jù)統(tǒng)計序列的卷積神經(jīng)網(wǎng)絡算法建立識別模型,相對于其它識別算法,具有更高的識別精度和更快的識別速度。
4) 采用Visual Studio 和MATLAB 混合編程的方式實現(xiàn)駕駛員疲勞狀態(tài)檢測實驗平臺構建,系統(tǒng)開發(fā)方便靈活,運行可靠。
如何將系統(tǒng)更加小型化將是今后研究的重點。