蔡闖闖,劉慶華
(江蘇科技大學 計算機學院,鎮江 212100)
根據世界衛生組織的統計,疲勞駕駛是造成交通事故發生的重要原因之一[1].為此有必要研發出一種疲勞駕駛預警系統,能夠及時準確的檢測出駕駛員是否處于疲勞駕駛狀態,并給駕駛員做出相應的預警,從而大大的減小交通事故.
疲勞駕駛檢測技術大致可劃分駕駛員生理特征檢測、車輛運動特征檢測和駕駛員面部特征檢測三大類[2].基于駕駛員生理特征檢測主要是用可穿戴設備來獲取駕駛員的腦電圖、心電圖、眼電圖、表面肌電圖等來判斷駕駛員是否處于疲勞狀態[3-4],該方法檢測結果準確率高,而且技術也相當成熟,但是由于可穿戴設備會對駕駛員的正常駕駛造成不便且設備成本高,不適于實際應用[5].基于車輛運動特征檢測主要是通過檢測方向盤轉動角度、車輛的行駛軌跡、車輛的加速度等來間接判斷駕駛員的疲勞狀況,但此方法容易受到外部環境因素的影響,對疲勞判定具有不可靠性和準確率不高的缺點.基于駕駛員的面部特征檢測就可以很好的來判斷駕駛員的疲勞狀態,主要是通過檢測駕駛員的眼部、嘴部和頭部的疲勞信息來確定駕駛員的疲勞狀況,且不易受外部環境影響,對疲勞特征檢測準確率高,而且對檢測的實時性也有一定的保障.
隨著人工智能技術的快速發展,采用深度學習網絡來開展疲勞駕駛研究[6-8],獲取人臉特征后,通過以訓練好的深度學習網絡來對特征圖像進行識別檢測,該方法由于要處理大量的特征圖片,所以在實時性方面很差.面對實際駕駛過程中車速快、車內外光照條件和駕駛員的多種姿態,目前已有的檢測方法很難適應這些變化.因此文中采用了融合駕駛員眼部、嘴部和頭部3個面部特征在疲勞駕駛時的表現來進一步檢測駕駛員是否處于疲勞駕駛狀態.
方向梯度直方圖(histogram of oriented gradient,HOG)特征是一種對物體檢測的特征描述子,該特征描述子常被用于計算機視覺和圖像處理當中[9].其構成特征由圖像局部的梯度直方圖進行計算和統計后所得到,其主要的思想是利用梯度或者圖像邊緣的方向密度可以很好的來對一幅圖像中的局部信息的表象和形狀進行描述[10].HOG特征主要由圖像歸一化、計算梯度、基于梯度幅度的方向權重投影、特征向量歸一化這幾個部分組成,其算法的基本流程如圖1.
圖1 HOG特征提取的流程圖
以中心對稱算子[-1,0,1]計算梯度為:
水平方向梯度
Ix(x,y)=I(x+1,y)-I(x-1,y)
(1)
垂直方向梯度:
Iy(x,y)=I(x,y+1)-I(x,y-1)
(2)
則:
(3)
(4)
式中:I(x,y)為圖片(x,y)像素值;θ(x,y)為該點梯度方向;m(x,y)對應為該點幅度值.
實驗采用矩形HOG結構,為了加快計算速度同時考慮到不影響人臉檢測,采用了一階模板.
由于HOG表示的是邊緣的結構特征,因此對于目標的局部形狀信息就能夠很好的描述,并且通過量化和歸一化分別來抑制一定程度的平移、旋轉和光照帶來的影響,這對駕駛員面部檢測非常適合,唯一的缺點是HOG特征計算時間相對較長.
在經過人臉檢測過后,就需要進行對人眼和嘴巴進行定位,以此來獲取疲勞特征.文中通過建立梯度提升決策樹(gradient boosting decision tree,GBDT)來使人臉形狀從當前形狀一步一步回歸到真實形狀,當輸入落到GBDT的每個葉子的節點上時,就會將節點上存儲的殘差加入到該輸入上,這樣就完成了回歸的目的,最后將所有的殘差疊加在一起就完成了人臉對齊的目的,通過人臉對齊,就可以進一步對人臉的形狀進行準確的定位,而形狀就是由人臉特征點所構成的,因此通過此方法可以對人臉進行68個特征點標記[11],人臉檢測和68個特征點標記如圖2.
圖2 人臉檢測及68個特征點
當駕駛員處于疲勞駕駛狀態時,對外界的判斷力急劇下降,極易引發交通事故,研究表明,當人處于疲勞狀態時,眼睛眨眼頻率降低,開合度變小且持續時間較長;嘴巴會經常出現大幅度開合的表現;頭部會出現點頭和左右擺動,因此利用眼睛、嘴巴的開合狀態和頭部的姿態作為判斷駕駛人是否處于疲勞狀態的依據.
眼部的疲勞判斷可以通過眼睛的開合度進行判斷.采用眼睛縱橫比(eye aspect ratio, EAR)來判斷駕駛員的疲勞狀態[12].當駕駛員沒有疲勞時,眼睛是處于正常的睜開狀態,EAR的值上下波動幅度不大,當疲勞時,EAR值迅速變小,接近于零.其中人眼的12個特征點標記效果如圖3.
圖3 左右眼特征點標記
由此可以分別得到左、右眼的EAR為:
(5)
(6)
由于人眼在睜開和閉合時兩只眼睛是同步進行的,因此,采用一只眼睛的開合度來進行判斷駕駛員的疲勞狀態[13].為了能夠更準確地判斷駕駛員的疲勞狀態,提升算法的魯棒性,將融合兩只眼睛的EAR值,綜合判斷駕駛員的疲勞狀態,融合后的EAR為:
(7)
為了更能夠準確地反應駕駛員的疲勞狀態,且區別一般的眨眼動作,采用了單位時間內眼睛閉合狀態下所占用的時間百分比(percentage of eyelid closure over the pupil over time,PERCLOS),如圖4.
圖4 PERCLOS測量原理
由于人眼在睜開和閉合時是具有連續性的,因此可以通過計算駕駛員的眼睛在一段時間內閉合的視頻幀數占這段時間內視頻總幀數的比值來近似計算PERCLOS的值[14]為:
(8)
式中:Nf、Nt分別為一段時間內眼睛閉合的視頻幀數和視頻總幀數.
駕駛員在處于疲勞狀態的狀況下會出現打哈欠的表現,此時嘴唇上下距離變大,嘴角左右寬度變小.因此通過計算嘴部的縱橫比(mouth aspect ratio, MAR)來判斷嘴巴的張開與閉合,以此來判斷駕駛員是否處于疲勞狀態,嘴部的特征點標記如圖5.
為了避免因為嘴唇的厚度不同帶來的判別誤差[15],采用了嘴部的內輪廓來計算嘴部的開合度,其中嘴角的標記點采用P49和P55的橫坐標計算為:
(9)
頭部也會出現疲勞的表現動作頭部動作表現也是衡量駕駛員是否疲勞駕駛的一個重要的衡量指標.一般頭部的運動狀態有:點頭、搖頭和擺頭,如圖6.
圖6 頭部3種運動狀態
駕駛員的實際疲勞狀態時,頭部的運動狀態只會出現點頭和左右擺頭的情況,為了能夠通過頭部運動狀態來判斷駕駛員是否疲勞駕駛,利用旋轉矩陣和平移矩陣來得到旋轉角度,通過旋轉角度來對疲勞駕駛進行判斷.
頭部的三維姿態與圖像坐標的關系如圖7.根據針孔模型,世界坐標系內PW(XW,YW,ZW)點和其在圖像坐標系下的像素坐標p(u,v)的映射關系如式(10).
圖7 頭部世界坐標系與攝像頭相平面坐標系關系
(10)
(11)
β=-arcsin(r31)
(12)
(13)
式中:α、β、γ分別為繞x、y、z軸旋轉角度,正角度為沿各軸正方向逆時針旋轉所得角度,負角度與之相反.
求解頭部的姿態流程如圖8.
圖8 頭部姿態求解流程
通過計算一段時間內兩種情況下駕駛員頭部點、擺的幅度在20°及以上所占的時間比例來判斷駕駛員是否處于疲勞狀態.測試效果如圖9.
圖9 頭部姿態顯示
支持向量機(support vector machines,SVM)具有高效處理小樣本學習,分類能力強,具有很好的魯棒性,由于人臉檢測也是個小樣本問題,因此將眼睛和嘴巴的PERCLOS值和頭部點頭頻率作為特征向量,采用SVM算法和SVM訓練模型來對駕駛員疲勞駕駛綜合判定.疲勞駕駛檢測方法流程如圖10.
圖10 疲勞駕駛綜合判定
駕駛員在開車過程中,由于車速一般很快,因此對疲勞駕駛檢測是否具有實時性有著很高的要求,為此對原始的檢測視頻做了一些變換,即對視頻圖像做了灰度化處理和圖像縮減處理,處理前后耗時分別為0.025 6和0.006 7 s.說明文中檢測方法更能實時的對疲勞駕駛進行跟蹤判定.
在Windows10上進行訓練即相關的測試,設備配置如表1,訓練時采用了GPU進行加速計算.
表1 系統配置參數
為了驗證檢測方法的時效性,測試了實際駕駛過程中對駕駛員疲勞駕駛的檢測耗時,如表2.
表2 疲勞駕駛檢測耗時
文中測試了駕駛員在駕駛過程中眼部、嘴部和頭部處于疲勞狀態下所表現的疲勞特征被識別出的準確率,表3列出了測試結果.
表3 眼部、嘴部和頭部狀態測試結果
文中還與現有的研究方案做了對比,如表4.
表4 疲勞駕駛對比分析
圖11為駕駛員在正常駕駛的情況下和疲勞駕駛的情況下的測試效果.
圖11 疲勞駕駛檢測效果
(1) 研究一種檢測駕駛員疲勞駕駛的方法,主要是通過融合駕駛員眼睛、嘴巴和頭部疲勞特征來建立駕駛員的疲勞檢測模型,并通過對模型的訓練優化疲勞駕駛檢測方法.
(2) 利用的視頻圖像灰度化及縮減處理方法大大減小了在對人臉檢測時所耗費的時間,使得檢測耗時提升了將近4倍.
(3) 對比大部分的僅通過單個疲勞特征來判斷疲勞駕駛的實驗方案,文中方案在檢測準確率方面有著顯著的提高,在檢測耗時方面略微的遜色于其它方案.
(4) 文中由于融入了多個疲勞特征,所以耗時相對較長,后續希望能夠對算法做進一步的優化來提升檢測效率.