張志文,張沛晨
(西安工業(yè)大學(xué) 電子信息工程學(xué)院,陜西 西安 710021)
疲勞工作是引發(fā)惡性事故諸如交通事故的重要原因之一。由于工作人員長(zhǎng)時(shí)間工作會(huì)出現(xiàn)疲勞狀態(tài),如注意力不集中、頻繁眨眼、閉眼時(shí)間過(guò)長(zhǎng)等,導(dǎo)致人員反應(yīng)變慢,極易引發(fā)事故。如果能提供一個(gè)實(shí)時(shí)檢測(cè)系統(tǒng)在人們剛出現(xiàn)疲勞現(xiàn)象時(shí)就發(fā)出報(bào)警,就能降低事故,有效的提高安全性。
目前識(shí)別疲勞狀態(tài)的指標(biāo)大致包括:生理信號(hào),如心率、呼吸頻率、腦電圖等;物理反應(yīng),如眨眼頻率、睜閉眼時(shí)間、打瞌睡等;還有與工作環(huán)境的人機(jī)行為等。而基于這些特征研究人員開(kāi)發(fā)了很多不同的疲勞狀態(tài)檢測(cè)系統(tǒng),非接觸式的眼狀態(tài)的檢測(cè)系統(tǒng)能很大的反映出當(dāng)前疲勞狀態(tài)[1]。
本文設(shè)計(jì)了一個(gè)基于眼運(yùn)動(dòng)的疲勞預(yù)警系統(tǒng),即攝像頭監(jiān)控眼睛的疲勞狀態(tài)的預(yù)警機(jī)制。采用Haar特征分類器從圖像中檢測(cè)出人臉區(qū)域和人眼區(qū)域,用幀差分跟蹤人眼區(qū)域;并統(tǒng)計(jì)其差分特征,判斷其疲勞狀態(tài);最后進(jìn)行相關(guān)的預(yù)警工作。
人臉、人眼檢測(cè)屬于計(jì)算機(jī)視覺(jué)范疇,目前的檢測(cè)方法有兩大類:基于知識(shí)和基于統(tǒng)計(jì)?;谥R(shí)的方法主要利用先驗(yàn)知識(shí)將人臉看做器官特征的組合,根據(jù)眼睛的特征以及眼睛在臉部的幾何位置關(guān)系來(lái)檢測(cè)。基于統(tǒng)計(jì)的方法則將人臉看做一個(gè)二維像素矩陣,從統(tǒng)計(jì)的觀點(diǎn)通過(guò)大量的圖像樣本構(gòu)造目標(biāo)模式空間,根據(jù)相似度來(lái)判斷人臉、人眼是否存在。
Viola和Jones提出的基于Haar-like小波特征和積分圖方法是目前較好的一種人臉檢測(cè)算法,該算法有較好的檢測(cè)性能,檢測(cè)速度比較快。在此基礎(chǔ)上發(fā)展的人眼檢測(cè)算法仍具有較好的適應(yīng)性。Haar分類器=Haar-like特征+積分圖方法+AdaBoost+級(jí)聯(lián)。其要點(diǎn)如下:
1)使用Haar-like特征做檢測(cè)。Haar-like是一種規(guī)定的用以被訓(xùn)練好的級(jí)聯(lián)分類器篩選的特征。就是把人臉區(qū)域特征化,加以區(qū)分。
2)使用積分圖對(duì)Haar-like特征求值進(jìn)行加速。積分圖是一種能夠描述全局信息的矩陣表示方法,即只遍歷一次圖像就可以快速求出圖像中所有區(qū)域像素和。
3)使用AdaBoost算法訓(xùn)練出所需的強(qiáng)分類器。AdaBoost是一種具有一般性的分類器提升算法,在Haar中可以幫助選擇更好的矩陣特征組合,即分類器。
4)使用篩選式級(jí)聯(lián)把強(qiáng)分類器級(jí)聯(lián)到一起,提高準(zhǔn)確率[2]。
在系統(tǒng)的算法中,是利用Adaboost算法,訓(xùn)練出合適的分類器模板,進(jìn)行匹配來(lái)得到我們感興趣的人眼區(qū)域。這其中,比較重要的環(huán)節(jié)是訓(xùn)練出人臉、人眼分類器。在圖像處理方面選用了 OpenCV(Open Source Computer Vision Library)開(kāi)源的第三方跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù)。其是由Interl公司支持,包含了超過(guò)500個(gè)函數(shù)來(lái)實(shí)現(xiàn)用于圖形處理和計(jì)算機(jī)視覺(jué)方面的算法,并可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。
OpenCV視覺(jué)庫(kù)中有很多訓(xùn)練好的分類器。它既可以使Haar(Haar-like)特征描述算子,也可以使 LBP(Local Binary Pattern)圖像紋理特征算子的分類器[3]。這些分類器都經(jīng)過(guò)了優(yōu)化,檢測(cè)精度高,速度快,而且在實(shí)際應(yīng)用中得到了驗(yàn)證。識(shí)別的流程圖可如圖1所示。
圖1 眼睛識(shí)別流程圖Fig.1 Eye recognition flow chart
利用 load開(kāi)加載haarcascade_frontalface_alt.xml和haarcascade_eye_tree_eyeglasss.xml分類器,cvCapture打開(kāi)攝像頭,detecMultiScale函數(shù)來(lái)進(jìn)行圖像的多尺度檢測(cè)。經(jīng)過(guò)上述處理,得到圖2所示是眼睛識(shí)別的效果圖。
圖2 眼睛識(shí)別效果圖Fig.2 Eyes identification renderings
圖2 所示的分別是左向轉(zhuǎn)臉、右向轉(zhuǎn)臉、正面人臉的眼睛識(shí)別圖。采用的Adaboost算法結(jié)合OpenCV中的分類器,在實(shí)驗(yàn)室理想的條件下進(jìn)行眼睛的識(shí)別有著不錯(cuò)的適應(yīng)性。
在完成檢測(cè),下一步就是做到實(shí)時(shí)的圖像處理,得到有用的信息。具體為:對(duì)攝像頭采集到的圖像進(jìn)行不斷的循環(huán)處理,如背景擦除,平滑濾波,二值化等進(jìn)行實(shí)時(shí)圖像處理。以臉部運(yùn)動(dòng)的幀圖像處理為例。其處理的流程圖可如圖3所示。
圖3 實(shí)時(shí)幀處理流程圖Fig.3 Real-time frame processing flow chart
先對(duì)圖像進(jìn)行高斯濾波,防止圖像模糊,出現(xiàn)細(xì)小斑點(diǎn)等,以平滑圖像。采用幀差法是為了獲取較好的實(shí)時(shí)性。由于相鄰兩幀間的時(shí)間間隔非常短,用前一幀圖像接可以作為當(dāng)前幀的背景圖像,因此背景并不積累,更新速度較快。計(jì)算量也比較小,可以保證實(shí)時(shí)性。之后的形態(tài)學(xué)濾波是利用形態(tài)學(xué)運(yùn)開(kāi)、閉運(yùn)算進(jìn)行濾波操作,去掉噪聲,保證圖像結(jié)構(gòu)。
為了快速的定位人眼,提高精度,避開(kāi)一些遮擋物如眼鏡等對(duì)定位的影響,可以采用基于知識(shí)的方法,利用先驗(yàn)知識(shí),根據(jù)人眼在臉部中比例位置近似定位人眼。水平方向上,人眼區(qū)域位于臉部區(qū)域的1/6~5/6處;垂直方向,人眼區(qū)域位于臉部區(qū)域的1/4~2/4處[4]。結(jié)合分類器方法,可以得到圖4的人眼的跟蹤檢測(cè)效果圖。
圖4 眼睛的定位與跟蹤Fig.4 Eye positioning and tracking
通過(guò)眼睛識(shí)別與跟蹤,可以得到一些特征信息如:睜閉眼的判斷、眨眼的時(shí)間,眼睛內(nèi)部像素、眼球與眼角相對(duì)位置變化等。利用這些參數(shù)可以得到人的疲勞狀況。
1)眨眼頻率:一般情況下,正常人每分鐘眨眼頻率在10~20次,每一次眨眼的時(shí)間約0.2~0.4 s[5]。則正常情況下,人每3~ 6 s眨眼一次,而在疲勞狀態(tài)下,頻率會(huì)變慢。
2)人眼閉合時(shí)間:研究表明,一般情況下,人眼閉合是間在0.2~0.4 s之間,如果眼睛持續(xù)閉合時(shí)間達(dá)到3 s左右時(shí),則人已處在疲勞狀態(tài)。
3)Perclos值:Perclos(Percentage of Eyelid Closure over the Pupil,over Time)是美國(guó)卡內(nèi)基隆研究所提出的度量疲勞的物理量。定義為單位時(shí)間內(nèi)(一般取一分鐘)眼睛閉合一定比例(70%或80%)所占時(shí)間。若測(cè)得的Perclos值大于40%,則可判定處于疲勞狀態(tài)。其值可由公式(1)求出。
選取PERCLOS方法的標(biāo)準(zhǔn)P70(眼睛閉合程度超過(guò)70%就為眼睛閉合)為疲勞判定標(biāo)準(zhǔn)。在眼睛檢測(cè)、跟蹤與特征提取時(shí),遍歷幀圖像中眼睛內(nèi)部的像素,就可以求出相應(yīng)的Perclos值。
1)眨眼頻率
在采集到的視頻圖像中,由于每一幀的眼睛可以分為兩種狀態(tài),即睜眼狀態(tài)記為1,閉眼狀態(tài)記為0。可以統(tǒng)計(jì)眼睛內(nèi)部的黑色像素來(lái)判斷眼睛開(kāi)閉狀態(tài)。從圖像當(dāng)中檢測(cè)到眼睛睜開(kāi)的狀態(tài)到下一次檢測(cè)到眼睛睜開(kāi)的狀態(tài),且中間必須有眼睛閉的狀態(tài),即由1到0,在回到1的狀態(tài),記為一次眨眼過(guò)程[6]??梢越y(tǒng)計(jì)出一段時(shí)間內(nèi)的眨眼次數(shù),計(jì)算眨眼頻率。
圖5 實(shí)驗(yàn)cmd窗口Fig.5 Experimental cmd window
圖5 記錄在實(shí)驗(yàn)室中VC運(yùn)行的實(shí)時(shí)視頻圖像進(jìn)行眼睛識(shí)別、跟蹤、特征處理的結(jié)果窗口。其中detection time表示處理當(dāng)前幀圖像所用時(shí)間,firstcountnumber表示當(dāng)前幀是第幾幀,AreaPercent表示的是黑色像素百分比,可以確認(rèn)睜閉眼情況。統(tǒng)計(jì)結(jié)果如表1所示。
表1 睜閉眼統(tǒng)計(jì)表Tab.1 Open eyes and closed eyes
表1中的數(shù)據(jù)是一分鐘左右,程序處理的視頻圖像的相關(guān)數(shù)據(jù)。則可以得出這段視頻圖像的眨眼頻率是14次/分鐘。同樣的可以進(jìn)行多次上述處理,得出眨眼頻率分別是16次/分鐘、11次/分鐘等。正常人的眨眼頻率在10~20次/分鐘,選擇眨眼頻率的極限值為不低于10次/分鐘來(lái)作為疲勞狀態(tài)的閾值。眨眼頻率小于10的即可判定為處于疲勞狀態(tài)。
2)眼睛閉合時(shí)間
由圖5可以看出,系統(tǒng)處理一幀視頻圖像約為650 ms左右。若測(cè)得連續(xù)5幀以上圖像,是閉眼狀態(tài)且中間沒(méi)有睜眼狀態(tài)。則眼睛持續(xù)閉合時(shí)間達(dá)到了3 s左右,人已處于疲勞狀態(tài)。
3)Perclos值
通過(guò)實(shí)驗(yàn)及其數(shù)據(jù)分析,設(shè)定眨眼頻率小于10次/分鐘這個(gè)閾值為人處于疲勞狀態(tài)的
閾值。而正常人的眨眼頻率在10~20次/分鐘??紤]到人在處于輕度疲勞時(shí),眼睛會(huì)不自主地眨眼來(lái)緩解疲勞,此時(shí)人的連續(xù)眨眼頻率可能會(huì)比正常眨眼頻率高,而對(duì)于不同的人,眨眼頻率在10次左右/分鐘,可能處于輕度疲勞狀態(tài),也可能處于正常清醒狀態(tài),因此在這里可以通過(guò)Perclos方法來(lái)判斷是否處于疲勞。
由表1可以近似得到Perclos值為22.82%,小于40%這一閾值。則可說(shuō)明處于正常清醒狀態(tài),與用眨眼頻率得到的結(jié)果相符。
目前疲勞監(jiān)測(cè)系統(tǒng)中可分為兩類:一類是采用PC機(jī)的機(jī)器視覺(jué)系統(tǒng),優(yōu)點(diǎn)是處理速度快、有操作系統(tǒng),可以只考慮軟件算法而不用太多關(guān)注硬件,缺點(diǎn)是造價(jià)高、功耗大、體積龐大、靈活性差;另一類是采用處理速度較快的專用處理芯片(如DSP,F(xiàn)PGA等)構(gòu)成的機(jī)器視覺(jué)系統(tǒng),其優(yōu)點(diǎn)是成本低、功耗低、性能指標(biāo)較高,缺點(diǎn)是開(kāi)發(fā)復(fù)雜,移植操作系統(tǒng)困難,擴(kuò)展性不足??紤]到成本以及系統(tǒng)的產(chǎn)品化、商業(yè)化用途。選用了一種基于ARM的疲勞監(jiān)測(cè)系統(tǒng)。該系統(tǒng)具有成本低、功耗低、體積小等特點(diǎn),還具有可移植操作系統(tǒng)、網(wǎng)絡(luò)功能強(qiáng)大、擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。該系統(tǒng)通過(guò)實(shí)時(shí)監(jiān)測(cè)眼部運(yùn)動(dòng)狀況,判斷疲勞狀態(tài)并給出預(yù)警。
本系統(tǒng)是以嵌入式Linux系統(tǒng)和嵌入式微控制器ARM為核心平臺(tái),通過(guò)建立的相關(guān)圖像處理平臺(tái),將攝像頭采集來(lái)的視頻圖像信號(hào),進(jìn)行相關(guān)的圖像處理,提取人眼疲勞特征,完成疲勞判定及預(yù)警。具體設(shè)計(jì)思想是使用嵌入式ARM系統(tǒng),采用USB攝像頭或CMOS攝像頭模塊,在ARM+Linux系統(tǒng)上,利用Video for Linux接口,構(gòu)建QT圖像處理平臺(tái),通過(guò)第三方OpenCV視覺(jué)庫(kù),運(yùn)行攝像頭的驅(qū)動(dòng)和相應(yīng)的視頻圖像采集、處理程序,對(duì)采集的一幀幀圖片進(jìn)行處理,得到人眼疲勞特征,進(jìn)而進(jìn)行判定,并進(jìn)行相應(yīng)的預(yù)警措施[7]。
系統(tǒng)采用三星公司的S3C2440嵌入式芯片為核心,其主要硬件構(gòu)成如圖6所示。攝像頭采集的視頻圖像通過(guò)USB攝像頭送入ARM處理器;系統(tǒng)采用64M Flash存放Linux系統(tǒng)和應(yīng)用軟件,采用64M SDRAM存放數(shù)據(jù)和處理結(jié)果,蜂鳴器用于疲勞時(shí)發(fā)出報(bào)警。
圖6 系統(tǒng)硬件結(jié)構(gòu)圖Fig.6 System hardware structure
文中設(shè)計(jì)出了一個(gè)基于嵌入式ARM的疲勞預(yù)警系統(tǒng),旨在用最少的硬件,完成高質(zhì)量的圖像采集和實(shí)時(shí)處理功能。結(jié)合了3個(gè)判定準(zhǔn)則提高了疲勞了判定的準(zhǔn)確性,對(duì)于靜態(tài)、準(zhǔn)靜態(tài),如辦公室等工作環(huán)境有較好的適應(yīng)性,但對(duì)于高速運(yùn)動(dòng)環(huán)境的疲勞預(yù)警在實(shí)時(shí)性上可能較為不足,但可作為必要補(bǔ)充。盡管測(cè)試是在實(shí)驗(yàn)室環(huán)境下進(jìn)行的,但還是具有較好的實(shí)驗(yàn)。為滿各種實(shí)際環(huán)境和應(yīng)用要求,仍需要進(jìn)行深入研究。
[1]朱振華,吳曉娟,王磊,等.基于眨眼持續(xù)時(shí)間的司機(jī)疲勞檢測(cè)方法[J].計(jì)算機(jī)工程,2008,34(5):201-203.ZHU Zhen-hua,WU Xiao-juan,WANG Lei,et al.Detection method of driver fatigue based on blink duration[J].Computer Engineering,2008,34(5):201-203.
[2]鄭夜星,林其偉.基于AdaBoost人臉檢測(cè)的改進(jìn)FGS視頻編碼[J].電視技術(shù),2010,34(2):85-87.ZHENG Ye-xing,LIN Qi-wei.Improved FGS video coding based on adaBoost face detection[J].Video Engineering,2010,34(2):85-87.
[3]王磊,吳曉娟,俞夢(mèng)孫.駕駛疲勞/瞌睡檢測(cè)方法的研究進(jìn)展[J].生物醫(yī)學(xué)工程學(xué)雜志,2007,24(1):245-248.WANG Lei,WU Xiao-juan,YU Meng-sun.Review of diver fatigue/drowsiness detection methods[J].Journal of Biomedical Engineering,2007,24 (1):245-248.
[4]陳守明.駕駛員疲勞檢測(cè)中人眼定位算法的研究[D].長(zhǎng)沙:中南大學(xué),2010.
[5]向本科.基于人眼檢測(cè)的駕駛員疲勞檢測(cè)研究 [D].重慶:西南大學(xué),2010.
[6]張淑鳳.基于多個(gè)疲勞參數(shù)的駕駛員疲勞檢測(cè) [D].合肥:合肥工業(yè)大學(xué),2009.
[7]李外云,王淑仙,劉錦高.基于嵌入式Linux的便攜式自動(dòng)人臉檢測(cè)與跟蹤系統(tǒng)的應(yīng)用研究[J].微型電腦應(yīng)用,2008,24(1):28-31.LIWai-yun,WANG Shu-xian,LIU Jin-gao.Applications based on embedded Linux portable automatic face detection and tracking system[J].Microcomputer Appllcations,2008,24(1):28-31.