蔣文博,謝曉明
(北京化工大學 信息科學與技術學院 北京 100029)
近年來,疲勞駕駛在導致交通事故中所占的比例逐年上升,對預防疲勞駕駛的研究也越來越受到關注。開發能夠實時檢測疲勞駕駛行為并對駕駛員進行預警的系統,對改善交通安全意義重大[1]。
目前疲勞駕駛的檢測方法主要有神經網絡,模板匹配,統計方法等[2]。而人眼檢測由于特征明顯,容易處理,被廣泛研究。文獻[3]采用逐步增加匹配點的匹配策略,通過計算每個位置的相關度,引入淘汰機制,對符合要求的位置進一步增加相關計算的像素點。該方法減小了匹配過程中的計算量,有效降低了誤檢率。但對初始點選擇有較強的依賴性,一定程度上影響了魯棒性。文獻[4]根據灰度值縱向投影得到的波峰波谷位置判定眼睛、鼻子和嘴的位置,然后根據灰度值覆蓋的面積的不同來判別睜眼和閉眼狀態。但此方法對光照、噪聲及臉部姿態非常敏感,魯棒性和準確度都不高。
隨著Adaboost、支持向量機(SVM)、神經網絡和模糊推理等統計模型的興起,高精確度成為了現在模式識別的研究趨勢。Fok等人[5]提出的分層神經網絡,使檢測系統具有旋轉不變性,解決了人臉及臉部特征的多角度問題,提高了準確率。徐歡等人[6]提出一種基于代價敏感支持向量機(CSVM)的人眼檢測方法,用Gabor濾波器提取人眼特征向量,并使用主成分分析法實現降維,最后用CSVM訓練人眼和非人眼分類器。該方法降低了誤檢率,提高了分類器的可靠性。文中使用Adaboost算法訓練分類器,分別實現人臉、眼睛和打哈欠的檢測,然后結合基于局部搜索的自動閾值法及快速Hough圓檢測法來分割出眼球虹膜輪廓,最后通過對檢測出輪廓形狀的計算和處理做出判定,解決了以往判定眼睛睜開和閉合時計算復雜,閉合程度判斷不準確的問題,同時增加了對打哈欠時嘴部的輪廓的檢測,增加了疲勞檢測的準確度。
疲勞駕駛檢測分為兩個部分:前端CCD攝像頭圖像采集,后臺計算機圖形處理分析。整套方法的流程為:1)CCD攝像頭采集駕駛員圖像;2)用基于Haar特征的Adaboost算法檢測出人臉區域;3)在人臉圖像區域再次使用Haar特征的Adaboost算法進行眼睛區域和嘴部區域的定位;4)用基于局部搜索的自動閾值法實現眼球虹膜與眼瞼的分割、打哈欠時嘴的輪廓的分割,用快速Hough算法標定眼球虹膜,計算虹膜圓形輪廓的完整程度以及打哈欠時嘴的張開程度,從而實現對駕駛員是否出在疲勞狀態進行判別。具體流程如圖1所示。

圖1 疲勞駕駛檢測流程圖Fig.1 Driver fatigue detection flowchart
1995年,Freund和Schapire提出了Adaboost算法,是對Boosting算法的一大提升。其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些分類器結合起來,構成一個更強的最終分類器(強分類器),且不需要任何關于弱分類器的先驗知識[7]。Viola P和Jones M提出了一種結合積分圖的Haar-like特征快速計算方法的Adaboost算法,真正意義上實現了目標的快速、準確檢測。影響Adaboost檢測訓練算法速度很重要的兩方面是特征的選取和特征值的計算。臉部的一些特征可以用Haar(矩形)特征簡單的描述。如圖2所示。訓練時,將每一個特征在訓練子窗口中進行滑動計算,獲取各個位置的各類矩形特征,位于同一位置的不同矩形特征,屬于不同的特征。特征數只和子窗口大小有關,一副24×24的圖像,矩形的特征數量就有約160 000個,由此可見Haar特征的多樣性。

圖2 Haar特征及Haar特征多樣性Fig.2 Features and it's diversity of Haar
Viola P和Jones M提出的積分圖像法[8-9]可以快速計算Haar特征的特征值,簡化了Haar特征值計算過程涉及到的很多內部像素的求和操作,大大提高了訓練效率。在計算出Haar特征值之后,用Boosting算法將弱分類器組合成為一個強分類器,用于目標檢測。
本文的疲勞檢測方法把人臉檢測作為圖像處理部分的第一步驟,為之后眼睛和嘴的檢測和處理縮小了檢測區域,有效的減小了計算量。實驗中使用的圖像為筆記本電腦攝像頭在不同背景下采集的圖像序列,用基于Haar特征的Adaboost算法進行檢測的部分結果如圖3所示。

圖3 人臉、眼睛檢測和定位結果Fig.3 Result of face and eyes detection
由人體頭部的生理結構可知,眼睛位于人臉的上半部分,則在進行眼睛檢測和定位的過程中,只對人臉圖像的上半部分進行檢測,可以有效縮短檢測時間。
大多數疲勞檢測系統用人眼的睜開和閉合作為判斷駕駛員是否疲勞的標準,但駕駛員在某些疲勞的狀態下,眼睛并沒有完全閉合,而這樣就容易產生誤判。文中用于檢測人眼的分類器選用Opencv提供的分類器,能夠識別各種狀態的人眼,然后再針對檢測到的人眼圖像進行二次判斷。
由人眼的結構特征可知,睜眼和閉眼的一個明顯的區別在于眼球可見部分輪廓的大小,睜眼時為最大,閉眼時則完全消失,圖4給出了處于不同睜眼狀態時眼球的比對示意圖。

圖4 睜眼時的不同睜眼狀態Fig.4 Different states when eyes open
由圖4可以看出,人眼圖像的灰度值分布存在一定特征,眼瞼邊緣和眼球部分的灰度值要遠小于人眼其他部分。因此,眼瞼邊緣輪廓和眼球虹膜輪廓可以很容易被分割出來。文中采用基于局部搜索的自動閾值分割法,即用自適應大小的正方形模板窗口對圖片進行遍歷,計算模板的平均灰度值,找到最小值,則認為是黑眼球部分的平均灰度,作為二值化分割的閾值。在人眼檢測標定的圖片中,眼球的直徑約等于人眼圖片高度的1/3,則模板大小即為人眼圖片高度的1/3。當睜眼過小即眼球可見部分變小,模板遍歷到最小值的區域變為眼角部分,但隨著眼白部分的減小,也可以把眼瞼邊緣分割出來。圖5給出了局部搜索自動閾值分割后的人眼二值化圖像。

圖5 局部搜素自動閾值分割后的人眼二值化圖像Fig.5 Binary image after local template searching and segment
得到二值化分割后的人眼圖像后,需要提取虹膜的外輪廓。一般二值化后的圖像會有部分眼角區域,可以通過邊緣檢測尋找最大輪廓,即為虹膜的輪廓。快速Hough圓檢測的核心思想是:圓上任意兩點連線的中垂線都會經過圓心,中垂線公式:

其中(x1,y1),(x2,y2)為圓上的兩點,k 為這兩點所在直線的斜率。
如果對檢測到的眼球輪廓上的每兩點連線求中垂線,計算量太大,本文選定眼球輪廓上最具特征的3個點:左邊緣點、下邊緣點和右邊緣點,求得3個點連接成3條線段的中垂線的交點,求平均坐標點作為圓心,然后半徑為圓心到3個點的距離的平均值,繼而重繪出整個圓。快速Hough圓檢測結果如圖6所示。

圖6 快速Hough圓檢測結果Fig.6 Results of fast hough circle detection
快速Hough圓檢測后,得到重繪圓的輪廓,用參數γ來判定人眼的睜開狀態。

其中,areaeye是眼球輪廓面積,areacircle是重繪圓面積,γ越接近1,則人眼睜開越大,反之則越小,一般認為當γ<0.5的時候,判定駕駛員處于疲勞狀態。
對于閉眼或者睜眼過小(即眼球可見部分很小)的情況,此時求出的圓點坐標在檢測出的輪廓的上邊緣點上方,則跳過公式(3)的計算,直接判定為疲勞狀態。
打哈欠作為疲勞最直接的表現形式,在本文中被用來作為疲勞檢測的一個標準。然而不同人打哈欠時嘴的張開程度也會有不同,特別是在說話或者發出吃驚等一些表情的時候,嘴都會張開,對判定結果產生影響。為了解決誤判問題,文中使用基于Haar特征的Adaboost算法訓練分類器,實現嘴的正常狀態和張嘴狀態的區分,再針對區分結果實現二次處理,計算嘴的張開程度,判定是否處于疲勞狀態。
文中選取打哈欠及各種張嘴時的嘴部圖像為正樣本,選取臉部其他部分圖像為負樣本,正樣本和負樣本圖像均從網上搜索得到,正樣本圖像250張,大小統一縮放為24×24,負樣本圖像550張,部分樣本圖片如圖7所示。

圖7 部分正負樣本圖像Fig.7 Part of the positive and negative sample images
訓練分類器使用Opencv提供的opencv_haartraining.exe訓練程序得到分類器描述文件。由于嘴位于人臉的下半部分,所以搜索區域可縮小至人臉下半部分,節省搜索時間。檢測完成得到打哈欠(或張嘴)的圖片,則再用局部搜索確定二值化分割閾值,把嘴的輪廓分割出來。為判斷嘴的張開程度,我們同樣在輪廓上取最具代表性的4個點:上下邊緣點和左右邊緣點,通過計算輪廓的外接矩形的寬高比來判定是否為打哈欠狀態,一般認為當寬高比大于1.5的時候處于疲勞狀態。

圖8 打哈欠的檢測結Fig.8 Result of yawn
測試使用筆記本電腦集成攝像頭采集的1 000張駕駛員頭部圖像作為實驗測試圖像,統一大小為640×480,測試電腦配置 CPU Core i5系列,主頻 2.3 GHz,內存4G,得到的實驗結果表1所示。

表1 實驗結果Tab.1 Test result detection
由實驗結果可以看到,判斷準確率達到了92.6%,可以滿足實際駕駛中疲勞檢測的要求。
文中用基于Haar特征的Adaboost算法對人臉和人眼位置進行快速定位,然后針對人眼圖像應用基于局部模板搜索的自動閾值法進行二值化分割,再根據快速Hough圓檢測法判定睜眼和閉眼狀態,同時增加了打哈欠的判定,用兩種標準判斷駕駛員的疲勞狀態,增加了整套檢測方法的準確性。經過實驗測試表明,本方法簡單、快速且有著很高的準確性,為駕駛員疲勞檢測的實時應用打下了良好的理論基礎。
[1]馬天翼,成波.基于面部表情的駕駛員疲勞狀態識別[J].汽車安全與節能學報,2010,1(3):200-204.
[2]唐琎,許海柱,王力炳.圖像中人眼檢測技術綜述[J].計算機應用研究,2008,25(4):961-965.
[3]唐琎,李青.一種快速的模板匹配算法 [J].計算機應用,2010,30(6):1559-1564.
[4]方君院,陸玲.基于灰度投影的眼睛定位研究[J].湖南農機:學術版,2011,38(1):142-143.
[5]Fok Hing Chi Tivive,Abdesselam Bouzerdoum.A hierarchical learning network for face detection with in-plane rotation[J].Neurocomputing,2008,71(16):3253-3263.
[6]徐歡,高雁鳳,鄭恩輝,等.一種用于駕駛員疲勞檢測的人眼檢測方法[J].計算機工程.2013,39(9):254-257.
[7]李紹文,王江波.駕駛員疲勞監測系統的研究[J].計算機工程與應用,2013,49(15):253-258.
[8]Paul Viola,Machael Jones.Robust real-time object detection[J].International Journal of Computer Vision.2004,57(2):137-154
[9]Paul Vioal,Machael Jones.Rapid object detection using a boosted cascade of simple feature[J].IEEE Computer Society Conference on Computer Vision and Pattern Recognition.2001(1):511-518.