徐柱 何鋒 華星淇 李家林
(1.貴州大學(xué),貴陽 550025;2.廣東工業(yè)大學(xué),廣州 510006)
主題詞:疲勞檢測 人眼檢測 AdaBoost 眼睛閉合時間占比
我國的汽車保有量逐年增加,交通安全形勢愈發(fā)嚴(yán)峻[1]。在各類道路交通事故中,疲勞駕駛、酒后駕駛以及超速駕駛是引發(fā)交通事故的主要原因,相關(guān)數(shù)據(jù)表明,疲勞駕駛造成的事故約占交通事故總數(shù)的7%,約占特大交通事故總數(shù)的40%[2]。因此,開展駕駛員疲勞檢測技術(shù)的研究對于保障駕乘人員生命及財產(chǎn)安全具有重要的現(xiàn)實意義。
目前,疲勞駕駛檢測方法主要分為3類:基于腦電信號(Electroencephalography,EEG)特征的檢測[3-4]、基于眼動特征的檢測[5-6]和基于駕駛行為特征的檢測[7]。其中,基于眼動特征檢測的方法因其檢測的直接性、非接觸性、與駕駛員的生理信息具有一致性、可接受性強(qiáng)等特點(diǎn),成為目前國內(nèi)普遍采用的研究方法。Dong[8]等根據(jù)駕駛員眼睛狀態(tài)進(jìn)行疲勞駕駛判斷,提出了一種利用眼瞼之間的距離判斷疲勞程度的方法,當(dāng)眼睛開度小于設(shè)定閾值時,判定為閉合狀態(tài)。Seifoory[9]針對虹膜進(jìn)行眼睛狀態(tài)分析,檢測不到虹膜時,認(rèn)為眼睛閉合。Wu[10]等采用模板匹配的方法進(jìn)行人眼狀態(tài)的分類檢測,從而得到駕駛員的疲勞狀態(tài)信息。上述文獻(xiàn)在疲勞駕駛檢測中只針對正常狀態(tài)下的人眼完成訓(xùn)練和測試,沒有考慮佩戴眼鏡情況下鏡片反射及鏡框?qū)z測算法的干擾。
本文選用自動對焦彩色攝像頭作為圖像采集模塊,首先利用Haar特征設(shè)計AdaBoost算法實現(xiàn)人臉及人眼的檢測及定位,再根據(jù)Canny算子實現(xiàn)人眼輪廓檢測與提取,最后利用離散的眼睛閉合時間占比(Percentage of Eyelid Closure over the Pupil over Time,PERCLOS)疲勞判斷算法實現(xiàn)駕駛員疲勞狀態(tài)的檢測與警告,借助開源計算圖像庫OpenCV編程實現(xiàn)疲勞檢測,并對系統(tǒng)的實時性和穩(wěn)定性進(jìn)行了測試。
本文駕駛員疲勞駕駛檢測系統(tǒng)可分為圖像采集模塊、圖像處理模塊和疲勞預(yù)警模塊,系統(tǒng)總體框架如圖1所示,工作流程如圖2所示。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
圖2 系統(tǒng)工作流程
圖像采集模塊由自動對焦的彩色攝像頭組成,可實現(xiàn)駕駛員面部圖像的實時獲取。由于車輛行駛過程中駕駛員頭部與攝像頭的距離在一定的有限范圍內(nèi)變動,經(jīng)實車測試后選擇廣角為90°視野,500萬像素,幀頻為15幀/s的攝像頭。該攝像頭完全滿足系統(tǒng)的實時性需求,通過視頻轉(zhuǎn)換傳輸技術(shù)將采集到的圖像信息傳輸至圖像處理模塊。
圖像處理模塊主要由數(shù)字信號處理器(Digital Signal Processor,DSP)、同步動態(tài)隨機(jī)存儲器(Synchronous Dynamic Random Access Memory,SDRAM)和Flash存儲器組成,對采集的圖像進(jìn)行預(yù)處理,以及人臉、人眼定位和人眼開度計算。DSP具有多個獨(dú)立計算的功能單元、較快的計算速度以及高度的可編程性,可滿足系統(tǒng)的整體需求。但系統(tǒng)斷電后DSP中的數(shù)據(jù)會丟失,所以使用SDRAM和Flash存儲器來存儲數(shù)字信號、算法以及后處理數(shù)據(jù)。
疲勞預(yù)警模塊采用LED燈閃爍和蜂鳴器音頻同時報警,根據(jù)駕駛員的疲勞程度實現(xiàn)分級預(yù)警:一級預(yù)警時,LED指示燈為黃色,間斷閃爍,蜂鳴器間斷報警;二級預(yù)警時,指示燈變?yōu)槌壬?,閃爍頻率增加,蜂鳴器報警占空比增加;三級預(yù)警時,指示燈變?yōu)榧t色,蜂鳴器長鳴,直至疲勞狀態(tài)清除。系統(tǒng)不斷重復(fù)上述流程,從而實現(xiàn)實時疲勞檢測并預(yù)警。
AdaBoos(tAdaptive Boosting)算法[11]精度高、分類速度快,能大幅提高泛化能力且不易引起過擬合現(xiàn)象?;贏daBoost算法,使用Haar-like作為人臉和人眼分類器進(jìn)行檢測定位。AdaBoost算法主要包括弱分類器的選取和由弱分類器確定強(qiáng)分類器兩部分。
以人臉檢測為例,AdaBoost算法步驟如下:
給出一組訓(xùn)練集(x1,y1),…,(xn,yn),其中xi為樣本描述,yi∈(0,1)為樣本標(biāo)識(0、1分別表示正例和反例)。在疲勞檢測中,可以定義0為非人臉,1為人臉。
初始化:初始化樣本權(quán)重,對于非人臉樣本,t次循環(huán)中第i個樣本的誤差權(quán)重Dt(i)=1/2m,對于人臉樣本,Dt(i)=1/2(l人臉樣本和非人臉樣本初始化為不同的值,m為非人臉樣本總數(shù),l為人臉樣本總數(shù))。對t=1,2,…,T(T為循環(huán)次數(shù)),循環(huán)執(zhí)行下面的步驟:
a.權(quán)重歸一化:
式中,qi為歸一化值。
b.對每個特征f,訓(xùn)練一個弱分類器h(x,f,p,θ),計算所有特征的弱分類器的加權(quán)錯誤率εf為:
式中,θ、p分別為弱分類器的閾值和偏差參數(shù)。
c.按最小錯誤率選取最佳弱分類器ht(x):
式中,ft、pt、θt分別為最佳弱分類器下的特征值、偏差值和閾值。
d.按最佳弱分類器調(diào)整權(quán)重:
式中,βt=εt/(1-εt)為更新因子;ei為分類檢測變量,當(dāng)樣本xi被正確分類時,ei=0,當(dāng)樣本xi被錯誤分類時,ei=1。
e.最后的強(qiáng)分類器為:
AdaBoost算法是一系列強(qiáng)分類器的組合,將強(qiáng)分類器按照強(qiáng)弱依次串聯(lián)起來,成為級聯(lián)分類器,如圖3所示,能夠排除大量的非人臉圖像,進(jìn)而提高檢測速度[12]。
圖3 強(qiáng)分類器篩選過程[11]
通過收集不同光照強(qiáng)度下的正樣本和負(fù)樣本,訓(xùn)練得到人臉和人眼分類器的層數(shù)為8層,每級最小檢測率為0.95。調(diào)用訓(xùn)練好的人臉、人眼級聯(lián)分類器進(jìn)行測試,檢測結(jié)果如圖4所示。
圖4 人臉、人眼檢測結(jié)果
僅通過在AdaBoost算法訓(xùn)練過程中加入不同光照強(qiáng)度下的人臉圖片進(jìn)行訓(xùn)練來提高檢測性能無法滿足要求。為了更好地提升檢測系統(tǒng)不同光照下的穩(wěn)定性,本文在AdaBoost算法基礎(chǔ)上采用動態(tài)直方拉伸對眼部較暗或較亮圖像進(jìn)行處理,增強(qiáng)眼部圖像顯示效果,更便于AdaBoost算法實現(xiàn)人眼檢測以及輪廓提取。
灰度直方圖是灰度級的函數(shù),描述圖像中該灰度級的像素數(shù)量(或該灰度級像素出現(xiàn)的頻率)。一維直方圖的結(jié)構(gòu)表示為:
式中,H(rk)為直方圖離散函數(shù);rk為圖像的第k級灰度;nk為圖像中具有灰度值rk的像素數(shù)量;n為圖像像素總數(shù)量;L為圖像的灰度級數(shù)量;P(rk)是灰度級rk出現(xiàn)的頻數(shù)。
圖像增強(qiáng)處理時,為了突出感興趣的目標(biāo)或灰度區(qū)間,可采用分段線性變換。將整個灰度區(qū)間劃分成幾個灰度區(qū)間,拉伸需增強(qiáng)目標(biāo)對應(yīng)的灰度區(qū)間,抑制不感興趣的灰度級,從而達(dá)到增強(qiáng)的目的,圖5所示為三段直方拉伸變換原理。其數(shù)學(xué)表達(dá)式為:
式中,f(x,y)為像素點(diǎn)(x,y)拉伸變換處理前圖像灰度值;g(x,y)為空間運(yùn)算函數(shù);M=255為圖像最大灰度值;a、b、c、d分別為拉伸灰度段點(diǎn)值。
圖5 直方圖拉伸三段線性圖
直方圖拉伸的段點(diǎn)值a、b一般是固定的。當(dāng)圖像整體偏暗時,特征像素的直方圖向左平移,反之向右平移,導(dǎo)致特征像素與背景像素對比度被拉伸到更小,使特征更加難以區(qū)分。為解決這一問題,本文采用動態(tài)a、b值進(jìn)行直方拉伸。拉伸前先計算圖像的平均灰度G,利用其變化動態(tài)設(shè)置段點(diǎn)a、b的值。經(jīng)過實際測試分析,為突顯眼部的輪廓,設(shè)a、b的取值分別為:
基于John Canny[13]提出的邊緣檢測算法,采用Canny算子輪廓提取算法對預(yù)處理后的二值化圖像進(jìn)行輪廓提取,處理過程如圖6所示。
圖6 輪廓處理過程[13]
Canny算法的目標(biāo)是找到一個最優(yōu)的邊緣檢測[14],其含義主要包括:算法盡可能多地標(biāo)識出圖像中的實際邊緣;標(biāo)識出的邊緣盡可能與實際邊緣接近;圖像中的邊緣只能標(biāo)識一次,且可能存在的圖像噪聲不應(yīng)標(biāo)識為邊緣。在OpenCV中調(diào)用Canny邊緣檢測算法,即可實現(xiàn)眼部輪廓檢測,如圖7所示。
通過邊緣檢測,獲得具有較好邊緣梯度的黑白二值圖像,在此基礎(chǔ)上進(jìn)行輪廓提取與繪制,目的是獲得眼部圖像的外部輪廓特征,為判斷人眼狀態(tài)和求取面積做準(zhǔn)備。若圖中有一點(diǎn)為黑色,且其相鄰的8個像素點(diǎn)均為黑色,該點(diǎn)為內(nèi)部點(diǎn)。將所有內(nèi)部點(diǎn)置為背景點(diǎn),完成輪廓的提取。
OpenCV中輪廓提取應(yīng)用程序編程接口(Application Programming Interface,API)函 數(shù) 為 find Contours,輪廓繪制函數(shù)為Draw Contours。輪廓提取時找到的輪廓存放在RETR_LIST參數(shù)中,以備輪廓繪制使用。輪廓提取測試效果如圖8所示。
圖7 邊緣檢測
圖8 眼部輪廓提取
PERCLOS是Walt Wierwille提出的一種疲勞狀態(tài)評定方法,指人眼完全閉合的時間占規(guī)定時間的比例。目前,PERCLOS是公認(rèn)的最有效的疲勞狀態(tài)評價標(biāo)準(zhǔn)。本文以P80準(zhǔn)則為測試標(biāo)準(zhǔn),其原理如圖9所示[15]。圖9顯示了眼睛從完全睜開到完全閉合再完全睜開的整個過程。
圖9 PERCLOS P80準(zhǔn)則原理
結(jié)合圖9所示原理,通過攝像頭實時捕獲駕駛員每一幀圖像,計算出一段時間內(nèi)眼睛閉合80%以上狀態(tài)的幀數(shù)為m,總幀數(shù)為N,用圖像幀數(shù)百分比替換時間百分比來表達(dá)PERCLOS的值fp:
首先由上述所提取的人眼輪廓以及OpenCV中提供的Contour Area()輪廓面積計算函數(shù),可得到輪廓中的像素數(shù)量X,帶入式(11)得到人眼開度:
此外,眨眼頻率是指單位時間內(nèi)完成完整的眨眼過程的次數(shù)。一般情況下,人每分鐘眨眼10~15次。如果眨眼頻率偏離正常值較遠(yuǎn),可能的原因主要有:駕駛員處于疲勞狀態(tài),長時間閉眼;駕駛員眼睛睜開,但是目光呆滯,注意力渙散。前者可以通過PERCLOS方法計算單位時間內(nèi)閉眼幀數(shù)來檢測,當(dāng)fp>40%,眼睛持續(xù)閉合時間大于3 s時,判定駕駛員處于疲勞駕駛狀態(tài);后者fp較小,PERCLOS方法無法判斷駕駛員狀態(tài)是否異常,此時可用眨眼頻率判斷,眨眼頻率過低,則說明駕駛員眼睛狀態(tài)異常,需要給予預(yù)警。
為進(jìn)一步驗證所設(shè)計的算法及疲勞檢測系統(tǒng)的有效性和抗干擾性,開展實車驗證。選擇有午睡習(xí)慣的駕駛員在午餐后晴朗天氣下進(jìn)行測試。測試時間段為13:00~15:00,以某SUV作為測試車輛,測試路段為廣州大學(xué)城內(nèi)環(huán)中心湖附近車道。配置的攝像頭型號為羅技C930e,帶CMOS彩色傳感器;采集圖像分辨率為640像素×480像素,圖像幀頻為15幀/s。
基于Haar-like特征的人臉、人眼級聯(lián)分類器的驗證如圖10所示,正常駕車過程中,對于不同姿態(tài)的人臉,在不同光照條件下,均獲得了很好的檢測效果,檢測準(zhǔn)確率可達(dá)94.1%。提取圖10強(qiáng)光和弱光環(huán)境下圖像進(jìn)行眼部直方拉伸分析,對比測試結(jié)果如圖11所示。
圖10 人臉、人眼檢測驗證
圖11 強(qiáng)、弱光照下直方拉伸測試
由圖11可知,動態(tài)直方拉伸算法通過圖片的明暗信息實時地調(diào)整段點(diǎn)值,優(yōu)化了眼部圖像的灰度區(qū)間,有效抑制了噪聲,提高了圖像的對比度。圖像顯示效果較靜態(tài)直方拉伸更好,使得后續(xù)過程的眼部輪廓提取更加精確,也反映了經(jīng)動態(tài)直方拉伸處理后AdaBoost算法在不同光照下均具有較強(qiáng)的抗干擾能力。
為驗證改進(jìn)算法的檢測準(zhǔn)確性,從動態(tài)行車駕駛過程中提取20 s圖像視頻,與OpenCV庫自帶AdaBoost算法比較進(jìn)行人眼定位數(shù)據(jù)統(tǒng)計分析,結(jié)果如表1所示。
表1 光照因素對算法人眼定位對比分析 幀
由表1可知,在行車方向變化以及樹陰間斷造成的光源強(qiáng)度變化工況下,改進(jìn)AdaBoost能很好地克服光照因素的影響,檢測準(zhǔn)確率得到提高。
駕駛一段時間后駕駛員出現(xiàn)了短時輕度疲勞駕駛,使fp達(dá)到閾值觸發(fā)報警蜂鳴器。駕駛員不同狀態(tài)下測試結(jié)果如圖12所示,測試過程中駕駛員的人眼開度信息及駕駛狀態(tài)實時顯示。
圖12 實時駕駛狀態(tài)
本文以不同光照強(qiáng)度下眼睛開度信息的檢測分析為切入點(diǎn),提出基于AdaBoost算法的光照自適應(yīng)疲勞駕駛檢測系統(tǒng)的總體方案設(shè)計,加入大量不同光照和佩戴眼鏡條件下的駕駛圖像進(jìn)行分類器訓(xùn)練,并引入了動態(tài)直方拉伸進(jìn)一步增強(qiáng)不同光照下的眼部圖像顯示效果,輔助提高AdaBoost算法的抗光照干擾能力。結(jié)果表明,所設(shè)計的檢測系統(tǒng)能夠很好地實現(xiàn)光照自適應(yīng)環(huán)境下的疲勞檢測,較OpenCV庫檢測自帶AdaBoost算法人眼檢測精度提高3.96個百分點(diǎn)。此外,本文提出的三級疲勞預(yù)警方案實施簡單、成本低,能根據(jù)疲勞駕駛狀態(tài)實現(xiàn)不同級別預(yù)警,具有較強(qiáng)的可實施性。