杜永昂,楊耀權,金玥佟
(華北電力大學 控制與計算機學院,河北 保定071003)
隨著社會經濟的發(fā)展,我國汽車保有量逐年增加,交通安全形勢愈發(fā)嚴峻。 在所有交通事故的成因中,由疲勞駕駛造成的交通事故占總交通事故的20%左右,占特大交通事故40%以上[1]。 目前,疲勞駕駛的檢測方法主要分為三大類:基于生理指標的檢測方法、基于駕駛員行為特性分析的檢測方法和基于面部表情識別的檢測方法?;谏碇笜说臋z測方法采用接觸式測量方式,一般通過測試駕駛人員的生理信號來推測駕駛人的疲勞狀態(tài)。 文獻[2]使用一種自制駕駛員腦電圖信號檢測裝置,采用快速傅里葉變換提取腦電圖功率譜密度,當分析腦電圖功率譜密度發(fā)現疲勞時,采取一種自動減速的車輛速度控制策略。這種接觸式生理參數測試方法通常需要被測者佩戴相應的裝置(如電極片等),會給駕駛行為造成極大干擾,不適合實際行車環(huán)境下的應用。 基于駕駛人行為特性的疲勞檢測方法受道路環(huán)境、行駛速度、個人習慣、操作技能等的影響,并不適用我國復雜多變的道路情形。 得益于機器視覺等人工智能的發(fā)展,基于面部表情的疲勞駕駛檢測方法因其應用成本較低、無需干擾駕駛人員,已經成為該領域的研究熱點。 文獻[3]基于開源庫提取的人臉輪廓點計算眼和嘴的縱橫比,生成瞇眼和哈欠特征,基于線性擬合趨勢提取法生成車輛操縱活躍度特征,然后采用改進的隨機森林模型對疲勞狀態(tài)進行識別。 文獻[4]提出了一種采用級聯(lián)的序列級和幀級兩層檢測模型,分別處理持續(xù)睜眼和眨眼的視頻序列, 實現由粗到精漸進地檢測眨眼的方法,通過隨機回歸森林計算眼睛開合度,最終完成眨眼過程。 文獻[5]針對復雜光照和姿態(tài)變化造成疲勞駕駛的原因,提出了實時增強約束局部模型的多信息疲勞檢測方法。 文獻[6]提出比例縮減區(qū)域(PRA)的方法快速定位人眼,其原理為對面部區(qū)域反復迭代縮減,最后得到對人眼區(qū)域的定位。 因此,構建一種可靠快速的人眼定位技術是對駕駛人員疲勞檢測的關鍵。 由于光照、道路兩側樹木及樓房陰影等原因的影響,直接在原始圖像中進行人眼定位存在較大困難,而且準確率較低,因此,人眼定位一般分為如下步驟:第一步,在原始圖像中定位出人臉區(qū)域;第二步,在人臉圖像中粗定位出人眼區(qū)域;第三步,對人眼區(qū)域進行精確定位。
考慮到不同特征維度對人臉的貢獻程度不同,本文提出了一種基于信息熵加權的方向梯度直方圖(Histogram of Oriented Gradients,HOG)與支持向量機(Support Vector Machine,SVM)相結合的人臉檢測算法,可以有效提取人臉特征,并準確完成人臉定位。 在完成人臉檢測之后,以人臉區(qū)域為母版,先采用OpenCV 開源實現對人眼的粗定位;然后采用自商圖消除光照影響,遍歷尋找最優(yōu)二值分割點;最后用二值分割圖像進行積分投影, 實現瞳孔的精確定位。 該算法解決了復雜光照下的瞳孔定位問題。
梯度直方圖HOG 是在2005 年CVPR 會議上由Dalal 提出的特征提取算法[7]。 近年來,HOG 特征提取算法越來越多地受到國內外學者的青睞,積極探索其潛能及應用范圍,但在對HOG 特征的相關研究中,大部分學者只是將HOG 算子應用到人臉全局中或只是簡單地進行全局特征和局部特征的級聯(lián)。文獻[8]提出的信息熵加權的HOG 特征提取算法將人臉分割成不同塊,在不同塊中進行加權來提高不同部位的識別率。
本文提出一種基于信息熵加權的HOG 特征提取算法。 首先計算每幅圖片的信息熵;然后提取每幅圖片的原有HOG 特征;最后對原有提取的HOG特征實行閾值分割,將符合條件的特征點加權信息熵形成新的HOG 特征。 算法采用SVM 作為分類器,將加權后的HOG 特征作為SVM 的輸入特征進行分類。 算法步驟如下:
(1)人臉圖像預處理
對檢測到的圖像進行灰度變換,單通道圖片相較RGB 三通道圖片信息量更少,可以更加快速地完成訓練。

(2)圖片HOG 特征提取
本文將人臉圖像矩陣I 的維數設定為Ix×Iy,其中x、y 均為64;每個細胞單元尺寸設定為(8,8);每2×2 個細胞單元組成一個塊(block);每個細胞單元分為9 個方向塊;滑動步長設定為一個胞元長度。檢測窗口在橫向滑動7 個塊,在縱向滑動7 個塊,共提取1 764 個特征點。
(3)信息熵加權到特征點
由于HOG 特征點只在人臉輪廓線或鼻子、嘴巴等區(qū)域有較為明顯的特征,而在人臉大部分較為平滑的區(qū)域特征點不明顯,故將信息熵加權到該區(qū)域。 設DN×M為特征點向量,其中N=1,M=1 764,則特征點均值為:

其中l(wèi)en(DN×M)為特征點向量長度。
加權特征點計算為:

其中DN×M(i)為第i 個特征點向量,E[I]為圖片信息熵。 本文閾值點的選擇在實驗部分有詳細的實驗數據作為參考。
(4)對信息熵加權后的HOG 特征點進行SVM分類。
自商圖的計算公式為:

其中,R 為自商圖,I 為灰度圖,F 為濾波核。
根據自商圖的計算公式,將采集的原始圖像轉變?yōu)樽陨虉D,消除眼睛區(qū)域的光照變化,以更好實現二值化閾值分割。 將人眼區(qū)域灰度圖進行低通濾波,遍歷灰度圖與低通濾波圖像中的所有像素點,“點對點”地作商運算,并將計算結果歸一化到[0~255]灰度范圍。
一般而言,臉部圖像中眼睛區(qū)域與周圍區(qū)域相比較暗,利用該特征,常采用灰度積分投影法來定位眼睛,根據圖像的波谷和波峰的分布情況來定位眼睛區(qū)域[9]。
假設圖像大小為m×n,G(x,y)為像素點(x,y)的灰度值,其在水平方向的積分投影為:

在圖像[y1,y2]區(qū)域的垂直積分投影為:

本文提出了由粗到精的瞳孔檢測方法,以自商圖為基準尋找二值分割點,實現了眼部區(qū)域光照不變性,以灰度積分投影為依據實現了瞳孔精確定位。傳統(tǒng)灰度積分投影是直接將原始圖像進行灰度化,然后將灰度圖進行二值化,最后將二值化圖像進行水平投影與垂直投影。 此方法雖然計算效率高,但是容易受光照及陰影所影響,在實際應用中存在一定的缺陷。本文引入自商圖,用以消除光照的影響,同時可以保留積分投影的運算效率,滿足了實際運用。 瞳孔定位算法主要步驟為:
(1)應用OpenCV 得到左、右眼睛的大體區(qū)域。
(2)對眼睛區(qū)域進行自商圖變化,結果如圖1(b)所示,本文濾波核采用高斯濾波。
(3)從圖1(b)不難看出,眼部灰度最小值在瞳孔附近,故遍歷眼部區(qū)域自商圖,將灰度值進行排序,得 到 灰 度 最 小 值。 設FN×M為 自 商 圖,N、M 分 別 為 該圖行列數,則最小值為:

(4)以T 為分割點做灰度閾值變換,將其轉換為二值圖像:

(5)對二值圖像進行水平、垂直積分投影。
(6)得到瞳孔定位的橫縱坐標。
如圖1 所示,(a)為原始圖像人臉檢測區(qū)域;(b)為圖像自商圖;(c)為二值化圖像。 可以看出基于自商圖的眼部細節(jié)更加突出。 本數據來源LFW 公開數據集,數據編號為Zico_0002。

圖1 原始圖像、自商圖及二值圖像對比結果
本文提出的瞳孔定位算法流程圖如圖2 所示。

圖2 瞳孔定位算法流程圖
通過Python 工具平臺進行實驗,實驗運行環(huán)境為InterCore I5 處理器,8 GB 運行內存,Windows 10操作系統(tǒng)。 人臉檢測數據集采用香港中文大學公布的大型人臉識別數據集CelebA,該數據集包含20 萬張人臉圖片,人臉屬性有40 多種,在表情、光照及姿態(tài)等方面更有權威性。 瞳孔定位實驗數據集采用HELEN 系列數據集,該數據集包含348 幅圖片。 實驗識別分類器采用支持向量機分類器。
本文選用CelebA 人臉庫編號為1 ~200 的圖片作為訓練樣本,選用編號為201~350 的圖片作為測試樣本。 正、負訓練集樣本共為400 張;正、負測試集樣本共為300 張。 首先對特征點閾值進行選擇,通過不同閾值點對比選擇出最佳的閾值點。
在CelebA 人臉庫中對于不同閾值共進行了4次實驗,每一次對人臉特征點進行不同的閾值劃分,通過對4 次閾值劃分所得的實驗結果進行比較,選取最佳閾值點。 得到的最佳實驗結果即為本文方法的最終實驗結果。
令Mean1=0.8×Mean;Mean2=1.25×Mean;Mean3=1.5×Mean。表1 給出了幾種閾值的識別結果。識別結果用百分比表示。 不同閾值識別率比較如圖3所示。

表1 不同閾值所得識別結果 (%)

圖3 不同閾值識別率比較
根據不同閾值仿真結果可以看出以Mean 為閾值點識別效果最佳,Mean2 次之,然后依次為Mean3、Mean1。 如果Mean1 作為閾值劃分點,信息熵只能加權到小部分特征點,不能很好表示全局特征點,導致識別率較低;Mean2、Mean3 則是因為信息熵加權到了太多的特征點,造成了大量噪聲,給分類帶來了干擾,導致識別率有所下降。
在選擇好最佳閾值點后,用原始HOG+SVM 人臉檢測與本文人臉檢測算法進行實驗對比,實驗結果如表2 所示。
從不同算法的對比仿真結果中可以看出,本文提出的人臉檢測算法識別率高于原始HOG+SVM人臉檢測算法。 原始HOG+SVM 算法主要依賴于全局特征,有部分關鍵特征點并不能很好地體現出來,而本文所提出的信息熵加權算法則對這些特征點進行信息熵加權,從而提高了識別率。

表2 不同算法識別率比較 (%)
此外,本文還在HELEN_1 公開數據集對原始HOG+SVM 人臉檢測算法與本文提出的人臉檢測算法進行了仿真實驗,并選擇部分樣本圖片作為展示結果,以便更加直觀地體現該算法性能。 其中數據類型分別為臉部右側旋轉、臉部左側旋轉、光照明亮、光照較暗、光影對比強烈、側臉、陰影強烈、佩戴眼鏡、抬頭、低頭等類型。 數據編號分別為10697993_1、13789611_1、16542667_1、103236168_1、137346980_1、170508172_1、143588896_1、151902153_1、167629013_1、213033315_1。 仿真結果如圖4、圖5所示。

圖4 原始HOG+SVM 人臉檢測算法結果

圖5 本文人臉檢測算法結果
通過對HELEN_1 公開數據集驗證可知,如圖4所示,HOG+SVM 人臉檢測算法對于臉部左側旋轉(13789611_1)、 陰 影 強 烈(143588896_1)、 抬 頭 幅 度過大(167629013_1)等情況檢測結果均不佳,出現漏檢等情況。 本文提出的人臉檢測算法,如圖5 所示,無論對于臉部右側旋轉、左側旋轉,還是抬頭等均可達到滿意的檢測效果,但是對于陰影強烈(143588896_1)的情況因為訓練樣本不足還有待增強。 由仿真實驗結果可知,本文提出的人臉檢測算法比傳統(tǒng)人臉檢測算法精度更高、魯棒性更強。
本文提出的基于自商圖先粗后精的瞳孔定位算法,充分考慮了光照、陰影等環(huán)境,該算法對光影及噪聲干擾等有較強適應性。 一般積分投影法在眼睛定位時,采用的圖像預處理方法為自適應閾值分割法,以該法獲取二值圖像。 雖然該分割法在眼部區(qū)域光照較為明亮時會得到較好的效果,但當面部陰影較為嚴重時,使得整個眼部都會出現二值為黑的情況,如圖1(c)所示。 文獻[10]提出了一種基于膚色和積分投影結合的眼部定位方法,該方法在水平投影和垂直投影方向均出現了多個波峰、波谷的情況,不易得到準確的瞳孔坐標值。 本文以眼部最小灰度值為分割點,可以較為理想地得到瞳孔橫縱坐標值。
本文隨機選取50 張實際行車環(huán)境圖片用于瞳孔定位實驗,首先通過上文提到的自商圖處理眼部區(qū)域,之后通過對每幅圖片遍歷求取灰度最小值,以該灰度值進行圖像二值化,最后進行灰度積分投影,得到準確的瞳孔定位坐標。
表3 給出了本文與傳統(tǒng)積分投影瞳孔定位的識別結果。 識別結果用百分比表示。

表3 本文與傳統(tǒng)積分投影瞳孔定位算法比較(%)
本文算法充分考慮了眼部區(qū)域結構性特點,即瞳孔附近灰度值最低的特性,并引入自商圖消除光影的影響。 由仿真實驗結果可知,本文提出的瞳孔定位算法比傳統(tǒng)算法泛化能力更強,準確度更高。
為了更加直觀地展現該算法的優(yōu)勢, 本文從樣本中選取部分圖片作為展示結果。其中數據類型分別為臉部右側旋轉、臉部左側旋轉、抬頭、表情(打哈欠)等類型。 數據幀數分別為1316、1139、469、446、66、26。 仿真結果如圖6、圖7 所示。

圖6 基于傳統(tǒng)積分投影瞳孔定位

圖7 基于自商圖二值分割點瞳孔定位
通過數據仿真結果可知,如圖6 所示,基于傳統(tǒng)積分投影法對瞳孔定位時,如果頭部出現偏轉、抬頭時將會出現誤檢等情況,如編號1316、1139、469、446 所示,在實際應用中檢測精度較低。 本文提出的瞳孔定位算法,如圖7 所示,對于頭部左右旋轉、抬頭等情況都能較為精準地定位出瞳孔位置。 相較于傳統(tǒng)的人眼定位方法,本文提出的瞳孔定位方法在準確度方面得到了較好提升。
人眼定位是疲勞駕駛檢測的關鍵環(huán)節(jié),針對現有方向梯度直方圖人臉檢測算法泛化能力不佳的問題,本文提出了一種基于信息熵加權的HOG 特征提取算法,該算法將待分類的人臉特征進行閾值加權,提高了原有人臉檢測的識別率。 針對現有瞳孔定位準確率不高的問題,本文提出了多算法協(xié)同工作的瞳孔定位方法,以自商圖為基準尋找二值分割點,實現了眼部區(qū)域光照不變性,以灰度積分投影為依據實現了瞳孔精確定位。 仿真實驗結果表明,本文提出的人臉檢測算法比傳統(tǒng)人臉檢測算法魯棒性更高、泛化能力更強;本文提出的瞳孔定位算法相較于傳統(tǒng)方法,定位精度更高,可以為疲勞駕駛檢測研究提供更加科學、可靠的數據。