


摘 要: 疲勞駕駛是導致交通事故的主要原因之一,因此,以人眼檢測為核心的疲勞駕駛檢測受到了普遍地關注。目前傳統的疲勞駕駛檢測方法采用“人臉?人眼”模型,即先定位人臉,隨后再進行人眼檢測。在AdaBoost算法的基礎上,使用變模板匹配方法進行人眼檢測,并改進了“人臉?人眼模型”,采用多特征的分類器來有選擇的跳過人臉檢測步驟,從而快速準確地定位人眼。在DM642芯片上進行實驗,人眼識別率達到了90%以上,且平均每秒能處理40幀圖片,證明了該方法的高效性和實用性。
關鍵詞: 人眼檢測; 疲勞駕駛; 變模板匹配; LBP; 多特征分類器
中圖分類號: TN919?34; TP391.41 文獻標識碼: A 文章編號: 1004?373X(2015)04?0087?04
0 引 言
國內外研究表明,駕駛員在疲勞的狀態下,對周圍環境的感知能力、危險的判斷能力和車輛的操控能力都會較正常情況有不同程度的下降,從而導致交通事故[1]。因此,疲勞駕駛檢測具有極為重要的意義。
當前疲勞檢測系統主要采用基于圖像處理技術的非接觸檢測方法,這種疲勞駕駛系統主要是檢測與分析駕駛員眼睛的狀態。在疲勞駕駛發生時,駕駛員眨眼頻率會上升,閉眼時間增加,基于眼睛狀態的疲勞駕駛標準PERCLOS(Percentage of Eyelid Closure Over the Pupil Over Time)是目前最為準確同時也是被廣泛接受的標準[2?3]。
目前基于圖像處理技術的疲勞駕駛檢測系統的算法主要采用基于Haar特征的AdaBoost算法,該方法首先采用級聯分類器確定人臉區域,再用同樣的方法確定人眼位置,通過分析人眼狀態結合PERCLOS標準來判斷疲勞駕駛行為是否發生。而在實際運用環境中,由于攝像頭與人臉所成角度的改變、駕駛員頭部的晃動、車輛抖動等因素,AdaBoost算法表現出較差的魯棒性,拒真率高導致識別率較低[4];搜索人眼的過程中也有采用模板匹配的方法,模板匹配計算規模較大,而且在人眼睜閉時,由于目標形狀的變化,采用固定單一模板會丟失目標,如果采取多種模板匹配則計算量過大,無法達到實時性要求[5];也有通過主動形狀模型(Active Shape Model ,ASM)、動態輪廓模(Active Appreance Model ,AAM)獲取人眼精確的特征點坐標,再通過這些特征點計算上下眼眶距離完成眨眼判斷,這種方法結果精確,但是計算量龐大無法部署于實際操作環境中,并且算法對光照敏感[6]。國內也有學者使用改進的Mean?shift算法,根據像素值分布特征以及梯度方向特征追蹤人眼,這種方法同樣面臨實時性的問題[7]。
綜上所述,若要在疲勞駕駛系統中人眼檢測必須具備如下要素:
(1) 實時性;
(2) 人眼檢測精確;
(3) 魯棒性強。
1 方法設計
疲勞駕駛檢測系統通常分為人臉檢測與人眼檢測兩部分,本文采用檢測與跟蹤相結合的方法完成這兩部分檢測;第一節討論了AdaBoost與差分跟蹤相結合的人臉檢測步驟;第二節討論了AdaBoost與變模板匹配相結合的人眼檢測步驟;第三節討論了傳統“人臉?人眼”模型的缺點,并提出了一種改進方法,提高了人臉檢測和人眼檢測兩部分整體的運行效率。
1.1 人臉檢測步驟
人眼檢測目標相對于整體圖像較小,直接檢測人眼運算量較大,并且會產生較多非目標結果,通常在檢測人眼之前首先進行人臉區域定位。Paul Viola和Michael Jones于2001提出的基于Haar?like特征的AdaBoost算法可以精確快速地識別人臉區域。
AdaBoost算法給予每個訓練樣本不同的權重,每個權重表示相應樣本被錯分的概率。算法進行N次迭代,產生N個弱分類器,在每一次迭代時,樣本權重產生變化,在上次迭代中被錯誤分類的樣本獲得更大的權重,進入下一次迭代時,根據更新后樣本的權重選取部分樣本訓練下一個弱分類器,最后將這N個弱分類器加權得到一個級聯的強分類器[8]。訓練方法如下:
(1) 根據樣本分布[Dj],對訓練集S進行有放回的抽樣產生訓練集[Sj]。
(2) 在訓練集[Sj]上使用學習算法訓練弱分類器[cj]。
(3) 用訓練所得的分類器[cj]分類原訓練集S中所有樣本,得到誤差:
[εj=i:cj(xi)≠yiDji]
(4) 令[αj=12ln1-εjεj],更新每個樣本的權值:
[Dj+1(i)=Dj(i)Zj·e-α, cjxi≠yieα, cjxi=yi]
式中[Zj]是一個正規因子用來確保[iDj+1(i)=1];[cj]為本輪迭代所得弱分類器;[αj]為[cj]對應的權重。
(5) 得到強分類器[C],由上述所產生的所有弱分類器加權求和得到:
[Cx=signj=1Nαjcjx]
上述算法在弱分類器訓練中采用Haar?like特征,利用AdaBoost算法訓練人臉分類器定位人臉。
人臉檢測是粗定位,是為了確定下一步驟人眼檢測的搜索區域,對精確度要求不高。為了盡可能快速得到人臉區域,在前幾幀檢測到人臉的情況下,本文采用差分方法進人臉跟蹤,根據之前幀中人臉位置確定當前人臉位置。
在視頻序列中[fkx,y],[fk-3x,y]分別為第k幀和第k-3幀圖像中人臉矩形框向外各擴大10像素以后的區域,width,[height]為其長寬。對[fkx,y],[fk-3x,y]進行差值運算,并二值化得到[gx,y]。統計[gx,y]中所有像素點[Ix,y>0]的個數,記為[N1]。若[N1]小于某閾值即[N1 (1) 計算[gx,y],水平方向和垂直方向的灰度投影[pojHy,pojVx]; (2) 求解[OffsetX,OffsetY]使得: [max(i=OffsetXOffsetX+widthpojV(i)), OffsetX=-1,-2,…,10;] [max(i=OffsetYOffsetY+heightpojH(i)), OffsetY=-1,-2,…,10;] 式中[OffsetX,OffsetY]為跟蹤結果相對于上一幀人臉區域的偏移量。 (3) 根據[OffsetX,OffsetY]更新人臉矩形區域。人臉粗定位效果如圖1所示。 1.2 人眼檢測步驟 由上述步驟得到人臉區域后FROI(Face Region On Interest),在區域內進行人眼檢測。人眼檢測是整個系統的關鍵步驟,直接影響到后續人眼狀態分析,要求檢測到的人眼保證精確。由于人眼區域較小,采用AdaBoost等算法經常會將鼻孔嘴巴等器官誤識別,所以在檢測前,首先根據人臉三庭五眼的特征,取人臉區域上部分區域進行人眼檢測,同時縮小一半計算量。 人眼檢測中使用的AdaBoost算法與人臉檢測中基本相同,在實際環境中,由于行車晃動,司機張望等客觀因素,AdaBoost很難達到較高的識別率,通常低于60%,而人類眨眼只需要0.2~0.6 s就可以完成,單一采用AdaBoost算法會嚴重影響系統的準確度。 雖然AdaBoost識別率較低,但是其檢測出的結果誤識率極低,即結果準確。結合AdaBoost算法所得結果準確的特點,本文設計了一種采用改進的LBP特征的快速模板匹配方法,該方法在AdaBoost算法失效時,采用前一幀已檢測到的人眼作為新的模板進行匹配,解決了模板匹配中單一模板無法應對眨眼時結果不精確的問題,同時LBP特征對于旋轉和晃動不敏感,有效的提高了人眼檢測的效果。 LBP特征是一種用來描述圖像局部紋理的特征算子,它在1994年由T.Ojala,D.Harwood等人提出。算子描述如下: 對于圖片中一個像素[Ii=Fxi,yi],其中[F]為圖像,[x,y]分別為對應像素橫縱坐標: [sIi,Ij=1, Ii-Ij≥00, Ii-Ij<0] [LBPIi=jPs(Ii-Ij)] 式中P表示像素[xi]周圍像素點集合,LBP的計算采用二進制。一個像素點產生一個8位的二進制的字符串,一種字符串排列表示一種模式。本文采用Uniform LBP,即將二進制字符串排列根據旋轉不變性從原來的256種模式壓縮成59種模式[9]。 由于目標人眼圖像中人的眼睛位于圖片中央,上下部分大多為皮膚,在匹配過程中,人眼部分的特征會被皮膚掩蓋,本文使用y軸方向一維高斯模板,給予人眼部分y軸方向較高的權重,皮膚部分較低權重,并且減少了眉毛部分對結果的影響,實驗表明新特征LBPG得到了較好的效果,新算子表達如下: [LBPGIi=LBPxi,yiGyi] 式中G為高斯函數: [Gx=1σ2πe-(x-u)22σ2] 式中[μ]為[H2],[H]為圖像高度。 取上一幀檢測到人眼位置上下左右各擴展10%人臉區域長度個像素所得區域作為搜索區域,將上一幀檢測到的人眼作為模板進行模板匹配搜索新的人眼位置。效果如圖2所示。 1.3 “人臉?人眼”模型改進 上述兩節人臉檢測與人眼檢測的部分。在傳統“人臉?人眼”方法中,先進行人臉檢測找出人臉區域FROI,再對FROI進行人眼檢測找出人眼。這種方法對于每一幀都進行以上兩個步驟,依次進行,每一次檢測人臉區域都保證了下一步人眼檢測中待檢測區域的可靠性,但由于人臉檢測花費時間巨大,犧牲了運行速度。 完成人眼檢測得到人眼結果后,可以發現,在結果準確的情況下,人眼位于圖片中央位置,而實際環境中,下一幀圖像中人眼位置發生的偏移并不大,檢測結果周圍區域可以直接作為下一幀新的FROI,直接進行人眼檢測,跳過人臉檢測步驟。這樣可以省去人臉檢測的計算量,同時由于使用人眼結果周圍區域作為新的FROI,該區域通常小于人臉,從而減少了人眼檢測搜索面積也間接提高了人眼搜索算法的計算效率。 上述分析可知,跳過人臉檢測步驟的前提是需要保證本幀人眼檢測是準確的,即確保本幀檢測結果周圍區域作為新的FROI在下一幀對應位置中包含人眼目標。 本文設計了一種基于logistic分類器用來檢驗本幀檢測結果的準確度,其輸入為本幀檢測結果和上一次AdaBoost成功檢測結果,分類器從多個角度判斷兩張圖片是否相似,由于AdaBoost人眼檢測誤識率極低,得到的人眼準確度高,新檢測得到人眼如果與其相似,則認為結果準確,否則認為本幀檢測結果不準確。 改進后的流程在檢測完人眼以后,使用多特征分類器對結果進行分析,判斷是否和上一幀人眼結果差異大小。一旦差異較小,則認為人眼被檢測到,將人眼周圍區域作為下一幀的FROI跳過人臉檢測,否則算法依舊執行人臉檢測部分,具體步驟如表1所示。 表中Step4具體步驟如下: 對本幀圖像newEyeImg和上一次AdaBoost人眼檢測結果圖像AdaEyeImg,分別抽取特征向量[v1,v2]。本文從紋理特征,邊緣特征,灰度特征,以及彩色信息等角度來構造特征向量[v1,v2]。 接著分別計算[v1,v2]各特征分量之間的歐式距離得到差異特征向量D。采用logistic分類器對D進行分類。特征分量具體如表2所示。 本文從17車次行車視頻中收集了1 217對正樣本,并在人眼檢測結果周圍選擇非人眼結果組成了1 537對負樣本,進行訓練,將1 389對樣本作為測試集,得到Logistic分類器準確率為93.6%。 2 實驗及結果分析 實驗采用DM642芯片,主頻為720 MHz。實驗對18位司機在其工作時進行實際環境行車視頻采樣,共20段視頻。每段視頻各分析998幀行車視頻,圖像大小為352×288,得到人眼結果大小為20×20像素,首先驗證了整體算法流程的識別率和效率,每段視頻平均檢測成功率為90.7%,具體如表3所示;接著比較傳統“人臉?人眼”模型和改進過后方法各自每個步驟的執行速度,如表4、表5所示所示;實驗表明,兩種方法識別率接近,但是在計算時間上改進后的方法明顯優于傳統“人臉?人眼”模型,如表6所示。 3 結 語 本文討論了傳統的“人臉?人眼”模型方式,總結了基于Haar?like特征的AdaBoost算法進行人臉人眼檢測的優缺點,采用差分運算快速跟蹤人臉以及變模板匹配提高人眼檢測成功率,并改進了傳統的“人臉?人眼”模型,使用多特征的分類器跳過人臉部分,提高了整個系統的效率。實驗表明,該方法在DSP開發板上可以以40 f/s左右的速度完成人眼的實時檢測,同時正確率在90%以上。該算法應用于基于嵌入式芯片的疲勞駕駛檢測系統具有較高的實用性和商業價值。 參考文獻 [1] 李都厚,劉群,袁偉,等.疲勞駕駛與交通事故關系[J].交通運輸工程學報,2010,10(2):104?109. [2] 劉秀,王長君,何慶.疲勞駕駛交通事的特點分析與預防[J].中國安全生產科學技術,2008(1):129?131. [3] 夏芹,宋義偉,朱學峰.基于PERCLOS的駕駛疲勞監控方法進展[J].自動化技術與應用,2008(6):43?46. [4] 嚴超,王元慶,張兆揚.基于AdaBoost和Kalman算法的人眼檢測與跟蹤[J].南京大學學報:自然科學版,2010,46(6):681?687. [5] 王江波,李紹文.基于AdaBoost算法和模板匹配的人眼定位[J].計算機測量與控制,2012,20(5):1347?1349. [6] 程如中,趙勇,戴勇,等.基于AdaBoost方法的車載嵌入式疲勞駕駛預警系統[J].北京大學學報:自然科學版,2012,48(5):719?726. [7] 彭召意,周玉,朱文球.用于疲勞駕駛檢測的人眼快速跟蹤方法[J].計算機工程,2010,36(15):191?193. [8] 李維維,胡桂明,何龍玲,等.基于AdaBoost算法的人臉疲勞檢測[J].自動化技術與應用,2014,33(2):46?48. [9] 鄭永斌,黃新生,豐松江.SIFT和旋轉不變LBP相結合的圖像匹配算法[J].計算機輔助設計與圖形學學報,2010,22(2):286?292.