曾 強(qiáng),王 玉,趙 娟,王文廉,張志杰
(中北大學(xué) 信息與通信工程學(xué)院,山西 太原 030051)
根據(jù)目前疲勞監(jiān)測(cè)系統(tǒng)中所使用的處理器來劃分,大致可分為兩類:一類是采用專用計(jì)算機(jī)(例如工業(yè)PC)或普通計(jì)算機(jī)的機(jī)器視覺系統(tǒng)[1-4],它對(duì)數(shù)字圖像的獲取一般通過視頻采集卡得到,其優(yōu)點(diǎn)是處理速度快、結(jié)果直觀、有操作系統(tǒng),可以只考慮軟件算法而不用太多關(guān)注硬件,缺點(diǎn)是造價(jià)高、功耗大、體積龐大、靈活性差;另一類是采用處理速度較快的專用的處理芯片(例如DSP,F(xiàn)P?GA等)構(gòu)成的機(jī)器視覺系統(tǒng)[5-6],此類系統(tǒng)一般是直接通過AD轉(zhuǎn)換芯片將模擬視頻轉(zhuǎn)換為數(shù)字圖像,然后進(jìn)行處理,其優(yōu)點(diǎn)是成本低、功耗小、性能指標(biāo)較高,缺點(diǎn)是開發(fā)復(fù)雜,無法移植操作系統(tǒng),擴(kuò)展性不足。
針對(duì)前兩種方法的不足,筆者設(shè)計(jì)了一種基于ARM的疲勞監(jiān)測(cè)系統(tǒng),該系統(tǒng)具有成本低、功耗小、體積小等特點(diǎn),還具有可移植操作系統(tǒng)、網(wǎng)絡(luò)功能強(qiáng)大、擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。
基于Adaboost人臉檢測(cè)算法是一種精度和速度都比較快的一種算法,適合實(shí)時(shí)疲勞監(jiān)測(cè)的要求。Adaboost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構(gòu)成一個(gè)更強(qiáng)的最終分類器(強(qiáng)分類器)[7]。其算法本身是通過改變數(shù)據(jù)分布來實(shí)現(xiàn)的,它根據(jù)每次訓(xùn)練集當(dāng)中每個(gè)樣本的分類是否正確,以及上次的總體分類的準(zhǔn)確率,來確定每個(gè)樣本的權(quán)值。將修改過權(quán)值的新數(shù)據(jù)集送給下層分類器進(jìn)行訓(xùn)練,最后將每次訓(xùn)練得到的分類器最后融合起來,作為最后的決策分類器。但是,對(duì)于ARM等嵌入式系統(tǒng)來說,檢測(cè)速度依然很慢。為此,針對(duì)ARM平臺(tái)和具體應(yīng)用,提出了一些方法來加速系統(tǒng)的處理速度。
視頻圖像在采集過程中,受到環(huán)境噪聲的干擾和光照不均的影響,導(dǎo)致了視頻質(zhì)量的下降。為了提高人臉檢測(cè)的精度與速度,需要對(duì)原始圖像進(jìn)行預(yù)處理,如光照補(bǔ)償、圖像增強(qiáng)等技術(shù),達(dá)到消除噪聲、改善圖像質(zhì)量、突出有效信息的作用[8]。
本文光照補(bǔ)償采用的方法利用白平衡算法來調(diào)整整個(gè)圖像紅綠藍(lán)的強(qiáng)度,以修外部光線所造成的誤差,具體如下:
1)計(jì)算圖像的R,G,B分量的各自平均值R1,G1,B1,計(jì)算均值average=(R1+G1+B1)/3。
2)令R’=average/R1,G’=average/G1,B’=average/B1,調(diào)整每個(gè)像素點(diǎn)的RGB值R=R×R’,G=G×G’,B=B×B’,將大于255的值置為255。
圖像增強(qiáng)采用頻域?yàn)V波的方法,通過低通和高通濾波器濾除圖像噪聲及增強(qiáng)圖像邊緣。此外使用紅外線彩色攝像頭并加濾波器濾除圖像噪聲和非臉部圖像,減少了搜索臉部圖像的次數(shù),加快了系統(tǒng)處理速度。
在Linux操作系統(tǒng)下,C語言雖然是一種十分優(yōu)秀的中級(jí)語言,但在執(zhí)行效率上還是與匯編無法媲美。GCC編譯器的內(nèi)嵌式匯編提供了一種在C語言源程序中直接嵌入?yún)R編指令的接口。
在ARM體系結(jié)構(gòu)下的內(nèi)嵌匯編語法格式為:__asm__(輸出部分:輸入部分:破壞描述部分)。并不是說所有的語句都要匯編優(yōu)化,要提高優(yōu)化效率,需要優(yōu)化的地方往往是反復(fù)使用到的部分,所以需要在疲勞監(jiān)測(cè)系統(tǒng)中的循環(huán)程序進(jìn)行匯編優(yōu)化。
在Adaboost算法中,影響檢測(cè)速度的主要因素在于前幾級(jí)分類器的結(jié)構(gòu)和分類器的級(jí)數(shù),這就要求抽取更有代表性的特征,從而通過較少的分類器得到較好的檢測(cè)效果。一般采用的是增加Haar特征等方法進(jìn)行重新訓(xùn)練,犧牲訓(xùn)練速度,得到較好的訓(xùn)練結(jié)果。此外,通過降低圖片的背景復(fù)雜度也能顯著影響檢測(cè)的速度。但無論是哪種方法,運(yùn)算復(fù)雜度都比較高。
本文采用一種比較簡單的方法,跟據(jù)具體應(yīng)用環(huán)境調(diào)整Adaboost算法參數(shù)。駕駛員在車上的位置是基本固定的,攝像頭掃描到的人臉大小基本也是固定的,所以可以調(diào)整攝像頭焦距,使得人臉被全部掃描到的基礎(chǔ)上,盡可能大地顯示人臉,這樣就可以把最小檢測(cè)窗口這個(gè)參數(shù)設(shè)置得比較大,從而在不影響檢測(cè)精度的前提下,減少進(jìn)入級(jí)聯(lián)檢測(cè)器的窗口數(shù)目,提高檢測(cè)速度。
編譯器優(yōu)化是指編譯器在編譯程序時(shí)做的一些優(yōu)化,可提高程序的執(zhí)行速度。在基于Linux+ARM的平臺(tái)中,使用arm-linux-gcc交叉編譯器,CXXFLAGS=-O2是選擇編譯優(yōu)化等級(jí)的編譯項(xiàng),這里使用的是第二個(gè)等級(jí),并不是編譯優(yōu)化等級(jí)越高越好,太高會(huì)限制程序的編寫方法,而且程序往往會(huì)無法編譯成功。
此外,本文采用的交叉編譯器是arm-linux-gcc-4.3.2,它符合EABI標(biāo)準(zhǔn),對(duì)于浮點(diǎn)運(yùn)算會(huì)預(yù)設(shè)硬浮點(diǎn)(Float Point Architecture,F(xiàn)PA)運(yùn)算,而沒有FPA的ARM處理器,比如SAMSUNG S3C2410/S3C2440,會(huì)使用軟浮點(diǎn)(Float Point Emulation,F(xiàn)PE)運(yùn)算,在速度上會(huì)遇到極大的限制,然而在數(shù)字圖像處理中會(huì)用到大量的浮點(diǎn)運(yùn)算,所以在處理器的選擇上,應(yīng)選擇支持硬浮點(diǎn)運(yùn)算的處理器。
PERCLOS是眼睛閉合時(shí)間所占的比例[9-10]。眼睛閉合時(shí)間的長短與疲勞程度有密切關(guān)系,駕駛員眼睛閉合時(shí)間越長,疲勞程度越嚴(yán)重,因此通過測(cè)量眼睛閉合時(shí)間的長短就能確定駕駛疲勞的程度[11]。
在基于PERCLOS疲勞檢測(cè)算法中,首先要檢測(cè)人臉信息并根據(jù)人臉信息進(jìn)行人眼定位,然后對(duì)人眼圖像進(jìn)行灰度變化和二值處理,這樣就可以計(jì)算人眼圖像的黑色像素的百分比,通過這個(gè)百分比來判別人眼的閉合狀態(tài),進(jìn)而通過計(jì)算單位時(shí)間內(nèi)的閉合次數(shù)來判斷疲勞狀態(tài)。程序流程框圖如圖1所示。
在Adaboost算法中,比較重要的環(huán)節(jié)是訓(xùn)練人臉分類器,而在OpenCV視覺庫中有很多訓(xùn)練好的人臉分類器,這些分類器都經(jīng)過了優(yōu)化,檢測(cè)精度高,速度快,而且在實(shí)際應(yīng)用中得到驗(yàn)證,所以使用現(xiàn)成的人臉分類器。
使用cvHaarDetectObjects函數(shù)提取圖像中的人臉的矩形區(qū)域,并且將這些區(qū)域作為一系列的矩形框返回。函數(shù)以不同比例大小的掃描窗口對(duì)圖像進(jìn)行幾次搜索。每次都要對(duì)圖像中的這些重疊區(qū)域利用cvRunHaarClas?sifierCascade進(jìn)行檢測(cè)。有時(shí)候也會(huì)利用某些繼承技術(shù)以減少分析的候選區(qū)域,例如利用Canny邊緣檢測(cè)裁減的方法。函數(shù)在處理和收集到候選的方框(全部通過級(jí)聯(lián)分類器各層的區(qū)域)之后,接著對(duì)這些區(qū)域進(jìn)行組合,并且返回一系列足夠大的平均矩形。為了能對(duì)視頻圖像進(jìn)行更快的實(shí)時(shí)檢測(cè),最小檢測(cè)窗口設(shè)為60×60,程序如下:
檢測(cè)到人臉以后,根據(jù)人眼在人臉中的比例位置近似定位人眼。水平方向,人眼區(qū)域位于人臉區(qū)域的1/6~5/6處;垂直方向,人眼區(qū)域位于人臉區(qū)域的1/4~2/4處。該方法定位速度快,精度良好,而且一些遮擋物如眼鏡等對(duì)定位效果沒有影
響,檢測(cè)效果如圖2所示。
PERCLOS算法一般將閉合程度大于80%的眼睛狀態(tài)歸于閉合狀態(tài)。PERCLOS值的計(jì)算公式為
當(dāng)PERCLOS大于40%,就認(rèn)為駕駛員處于疲勞狀態(tài)[12]。通過人臉的檢測(cè)和人眼的定位,已經(jīng)將無用的圖像信息濾除掉,然后對(duì)檢測(cè)到的人眼圖像進(jìn)行灰度變化并進(jìn)行二值處理,如圖3所示,通過計(jì)算人眼圖像的黑色像素的百分比來判別疲勞狀態(tài)。
程序如下:
在判別疲勞前,首先要計(jì)算前100幀人眼圖像的黑色像素的百分比均值areapercent100,這100幀人眼圖像是在人正常情況下提取的,由于眉毛等人臉特征對(duì)黑色像素的干擾,把該值的60%作為后續(xù)判別疲勞的參照值,當(dāng)人眼圖像中的黑色像素的百分比均值小于人正常狀態(tài)下的60%時(shí),認(rèn)為人眼是閉合的。此后,每幀計(jì)算1次黑色像素的百分比,并與參考值作對(duì)比,如果在30幀內(nèi)出現(xiàn)13次黑色像素的百分比比參照值小,即PERCLOS值大于40%,則判定司機(jī)疲勞,發(fā)出警告。程序如下:
圖像采集設(shè)備使用紅外線彩色攝像頭K5231,視頻大小320×240,網(wǎng)卡芯片采用DM9000,系統(tǒng)處理器采用Philips公司ARM9微控制器LPC3180,支持硬浮點(diǎn)運(yùn)算。在ARM平臺(tái)上移植Linux操作系統(tǒng),并使用QT軟件編寫系統(tǒng)操作界面。
移植OpenCV視覺庫,到目前為止,OpenCV的最新版本是OpenCV2.10,在OpenCV 2.0版本以后的源程序要求使用Cmake軟件來編譯生成需要的動(dòng)態(tài)鏈接庫和靜態(tài)鏈接庫。為了提高運(yùn)行速度,這里使用靜態(tài)鏈接庫。在編譯應(yīng)用程序前需要添加OpenCV的頭文件路徑和靜態(tài)鏈接庫路徑:
在試驗(yàn)中,以20人作為實(shí)驗(yàn)的樣本,其中包含男、女、小孩、青年、中年、老人。在室內(nèi)環(huán)境下,要求他們分別在攝像頭前模仿疲勞狀態(tài)不停地眨眼,如圖4所示。
從實(shí)驗(yàn)結(jié)果來看,檢測(cè)效果良好且反應(yīng)速度很快。實(shí)驗(yàn)表明,本系統(tǒng)在室內(nèi)環(huán)境下檢測(cè)準(zhǔn)確率高達(dá)95%,能成功完成人眼疲勞監(jiān)測(cè)。
本文設(shè)計(jì)實(shí)現(xiàn)了基于ARM的人眼疲勞駕駛監(jiān)測(cè)系統(tǒng),滿足疲勞監(jiān)測(cè)系統(tǒng)車載、實(shí)時(shí)、非接觸、小型化等要求。雖然基于ARM的疲勞監(jiān)測(cè)系統(tǒng)的監(jiān)測(cè)速度與基于DSP的系統(tǒng)相比具有一定的差距,但通過各種優(yōu)化手段已大幅提高了處理速度。此外,由于ARM可以移植網(wǎng)絡(luò)功能十分強(qiáng)大的Linux操作系統(tǒng),該疲勞監(jiān)測(cè)系統(tǒng)可上網(wǎng)且易擴(kuò)展,如視音頻播放、電子地圖、GPRS以及與交通系統(tǒng)對(duì)接等,滿足人們的多種需要。
[1] 陳守明.駕駛員疲勞檢測(cè)中人眼定位算法的研究[D].長沙:中南大學(xué),2010.
[2] 向本科.基于人眼檢測(cè)的駕駛員疲勞檢測(cè)研究[D].重慶:西南大學(xué),2010.
[3] 張淑鳳.基于多個(gè)疲勞參數(shù)的駕駛員疲勞檢測(cè)[D].合肥:合肥工業(yè)大學(xué),2009.
[4] 胡越,郭延齊,程文化.基于Matlab的人眼疲勞度檢測(cè)[J].信息技術(shù),2009(8):64-67.
[5] 韓相軍,關(guān)永,王雪立.基于DSP的疲勞駕駛實(shí)時(shí)監(jiān)測(cè)系統(tǒng)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006(2):47-49.
[6] 李志春,何仁.模糊神經(jīng)網(wǎng)絡(luò)在駕駛員疲勞檢測(cè)中的應(yīng)用[J].江蘇大學(xué)學(xué)報(bào),2008(2):124-126.
[7] 鄭夜星,林其偉.基于AdaBoost人臉檢測(cè)的改進(jìn)FGS視頻編碼[J].電視技術(shù),2010,34(2):85-87.
[8] 曹煒.基于機(jī)器視覺的駕駛疲勞檢測(cè)研究[D].南京:東南大學(xué),2008.
[9] 李外云,王淑仙,劉錦高.基于嵌入式Linux的便攜式自動(dòng)人臉檢測(cè)與跟蹤系統(tǒng)的應(yīng)用研究[J].微型電腦應(yīng)用,2008,24(1):28-31.
[10] LAURENCE H,NICK M.Review of fatigue detection and prediction technologies[EB/OL].[2010-11-20].http://www.nrtc.gov.au.2000-09.
[11] 鄭培,宋正河,周一鳴.基于PERCLOS的機(jī)動(dòng)車駕駛員駕駛疲勞的識(shí)別算法[J].中國農(nóng)業(yè)大學(xué)學(xué)報(bào),2002,7(2):104-109.
[12]許建君.基于人臉特征的列車司機(jī)疲勞駕駛檢測(cè)與識(shí)別系統(tǒng)研究[D].西安:西安交通大學(xué),2010.
王文廉(1978-),博士,主要從事動(dòng)態(tài)測(cè)試技術(shù)、智能儀器研究;
張志杰(1965-),教授,博士生導(dǎo)師,主要從事動(dòng)態(tài)測(cè)試技術(shù)及信號(hào)處理的研究。