涂超 趙波
(上海工程技術(shù)大學(xué) 上海 201600)
據(jù)統(tǒng)計,我國由疲勞駕駛造成的交通事故大約占交通事故的25%~30%,由此造成大量人員傷亡[1]。因此,研究出一種能夠?qū)崟r檢測疲勞的系統(tǒng)不僅能夠減少人員傷亡,還能避免由交通事故所造成的經(jīng)濟損失。
目前疲勞檢測的方法的研究大致可以分為三類:基于駕駛員生理信號的檢測方法,基于駕駛員駕駛行為及車輛參數(shù)信息的檢測方法,基于視覺特征的檢測方法[2]?;隈{駛員生理信號的監(jiān)測方法,主要是利用專門的生理傳感器檢測駕駛員生理信號,通過對這些信號的分析來實現(xiàn)對駕駛員疲勞狀態(tài)的檢測與判別。如牛琳博[3]通過對心率變異性和R-R間期的分析,確定了R-R間期的提取方法,并結(jié)合采集的被試心電和行為數(shù)據(jù)來判斷駕駛員是否處于疲勞狀態(tài)?;隈{駛員行為及車輛參數(shù)信息的檢測方法,主要是利用車載傳感器采集駕駛員在駕駛狀態(tài)下對方向盤、加速踏板及離合等設(shè)備的操作信息和車輛的行駛速度、側(cè)向及橫向加速度、車身的橫擺角及車輛軌跡等信息。如胡宏宇[4]利用轉(zhuǎn)向盤轉(zhuǎn)角速度時序分析對來對駕駛員的疲勞狀況進行判斷?;谝曈X的檢測方法,主要是車載攝像機來監(jiān)控駕駛員的行為信息,包括閉眼、眨眼、打哈欠、頭部姿勢等。通過一定的算法對駕駛員眨眼頻率、打哈欠等特征進行分析,來對駕駛員疲勞進行檢測。
研究表明,利用生理信號檢測駕駛員疲勞的方法有非常好準(zhǔn)確性和可靠性,但是提取生理信號需要接觸性器材,這給駕駛員的駕駛帶來較大的不便。而對于基于車輛參數(shù)的駕駛員疲勞檢測方法,檢測速度太慢,無法達到實時性的要求?;谝曈X的檢測方法,利用攝像頭獲取駕駛員面部信息,不會對駕駛員駕駛產(chǎn)生影響,并且隨著科技的發(fā)展,人類在計算機硬件制造工藝的提高以及軟件開發(fā)水平的快速進步,該方法能夠達到實時性的要求。因此,本文使用基于視覺的疲勞檢測方法。
為了增加圖像中人臉與駕駛環(huán)境的對比度,需要對圖像進行直方圖均衡化處理[5~6]。對于灰度級在[0,L-1]范圍內(nèi)的圖像的直方圖定義的離散函數(shù)為
其中rk是第k級灰度值,nk是圖像中灰度值為rk的像素個數(shù)。對于灰度圖像來說L的值為256。對于一幅灰度圖像直方圖對應(yīng)關(guān)系如圖1所示。
圖1 灰度圖像直方圖
對于離散的灰度級,其均衡變變換為
由于在計算過程中對圖像的直方圖進行了歸一化處理,所以最后均衡化的結(jié)果還需要還原直方圖的表示范圍,對于灰度圖像來說,直方圖均衡化的公式為
對于圖1(a)中的灰度圖像進行直方圖均衡化的結(jié)果如圖2所示。
圖2 均衡化后的圖像與直方圖
Haar-like特征也叫矩形特征,是一種常用的特征描述算子,最早由Papageorigiou[7]等用于人臉描述的?;镜腍aar-Like特征包括四種形式,如圖3所示。對于Haar-Like特征值可以表示為白色區(qū)域像素和與黑色區(qū)域像素和的差值。
圖3 Haar-like特征
對于人臉的一些特征可以用矩形特征簡單地描繪,在一幅圖像中,眼睛區(qū)域所表現(xiàn)出的顏色要比周圍的顏色更深,鼻梁區(qū)域的顏色要比兩側(cè)的淺。對于一張24×24的圖像來說,其Haar-Like特征的數(shù)量大約有160000個,遠遠超過了圖像本身的像素數(shù),增加了很多的計算量。因此,需要一種簡單的運算方法來降低運算量,由此引出了積分圖的概念[8~9],構(gòu)造的積分圖如圖4所示。
圖4 積分圖
圖中ii(x,y)表示灰色區(qū)域內(nèi)圖像中所有像素的和,用f(x,y)表示圖像在點(x,y)處的像素值則:
則任意區(qū)域D的像素和表示為
Adaboost(Adaptive Boosting)人臉檢測算法是由Viola和Jones提出的,它是基于boost算法的改進[10~11]。該算法首先進行弱分類器的訓(xùn)練,然后通過不斷更新弱分類器的權(quán)重,來構(gòu)造一個強的分類器,最后通過多個強分類器的級聯(lián)來構(gòu)造出分類能力更強的級聯(lián)分類器。具體算法如下:
2)設(shè)置初始化樣本權(quán)重,當(dāng)yi=0,w1,i=1/2p;當(dāng)yi=1,w1,i=1/2q。w1,i表示在循環(huán)開始時第i個樣本的權(quán)重。
3)對t=1,…,T(t表示當(dāng)前循環(huán)次數(shù),T表示循環(huán)總次數(shù)),樣本權(quán)重進行歸一化處理,公式如下;
4)對于每個特征j,訓(xùn)練一個相應(yīng)的弱分類器hj,計算當(dāng)前權(quán)重下的分類錯誤率:
選擇錯誤率εt最小的弱分類器ht。
5)令βt=εt/1-εt更新樣本權(quán)重:
6)最后將將弱分類器進行組合得到強分類器為
7)然后由多個強分類器構(gòu)成級聯(lián)分類器。
SDM(Supervised Descent Method,監(jiān) 督 下 降法)[12~14]算法是一種逼近函數(shù),從最小二乘函數(shù)出發(fā),尋找一個遞減的下降函數(shù)序列。它提出的背景就是為了更好地解決非線性優(yōu)化問題,計算機視覺領(lǐng)域的很多問題可轉(zhuǎn)化為優(yōu)化非線性最小二乘的問題。本文在Adaboost人臉檢測算法檢測到人臉區(qū)域的情況下,使用SDM算法對駕駛員面部進行特征點定位。算法的主要分為兩個階段,訓(xùn)練階段和測試階段,算法的具體流程如圖5所示。
圖5 SDM算法流程
PERCLOS(Percentage of Eyelid Closure Over the Pupil Over time)準(zhǔn)則是指單位時間眼睛閉合時間所占的百分比。在20世紀70年代,由Walt Wier?wille提出的,主要是通過對眼睛閉合狀態(tài)來分析駕駛員的疲勞狀態(tài)[15~16]。主要有P70標(biāo)準(zhǔn),P80標(biāo)準(zhǔn)和EM標(biāo)準(zhǔn)分別是指一定時間內(nèi)眼睛睜開面積占瞳孔面積的70%,80%和50%所占時間的百分比。通過大量實驗表明P80是三個標(biāo)準(zhǔn)中效果最好的,因此本文選擇P80標(biāo)準(zhǔn)來判別駕駛員疲勞,其原理圖如圖6所示。
圖6 PERCLOS原理圖
由圖6可知,在P80的標(biāo)準(zhǔn)下,眼睛閉合時間所占百分比也就是眼睛閉合程度高于80%所用的時間占眼睛從睜開到閉合再到睜開的時間的百分比,公式如下:
對于視頻序列當(dāng)中的PERCLOS值為
首先通過SDM算法對駕駛員眼部特征點精確定位,定位結(jié)果如圖7所示。
圖7 眼部關(guān)鍵點信息
通過SDM算法可以得到每個眼部關(guān)鍵點的位置(xi,yi),則眼部平均高度為
則眼睛的睜開度為
通過式(12)和(13)實時計算駕駛員的眼部的睜開度,然后通過P80標(biāo)準(zhǔn)進行眼部睜開或閉合判斷,當(dāng)P小于0.8時則表示駕駛員眼睛閉合。通過計算一段時間內(nèi)的眼睛閉合時間占總時間的比例來判斷疲勞狀況。本文對15名測試者正常狀態(tài)和疲勞狀態(tài)下分別采集600幀視頻,實時計算他們的眼部睜開度。其中一名測試者的正常狀態(tài)和疲勞狀態(tài)下的眼睛睜開度如圖8(a)(b)所示。
圖8 疲勞狀態(tài)測試
最后對測試者兩種狀態(tài)下的PERCLOS進行計算,計算結(jié)果如圖8(c)所示。從圖中可以看出駕駛員在正常狀態(tài)下的PERCLOS值的范圍為[0.08,0.3],當(dāng)處于疲勞狀態(tài)時,駕駛員的PERCLOS值的范圍為[0.45,0.75],因此,當(dāng)駕駛員的PERCLOS值超過0.45時,就判斷駕駛員處于疲勞狀態(tài)。
為了驗證本文提出的疲勞檢測算法的準(zhǔn)確度,對該算法進行了實驗,軟件編寫采用Python語言,開發(fā)平臺為PyCharm 2019,硬件環(huán)境采用Intel(R)Core(TM)i5-4200 CPU、GTX750顯 卡 和6GB內(nèi)存。實驗使用自己采集的8名測試者的視頻圖像對算法的準(zhǔn)確性記性檢測,計算他們的PERCLOS值與實際進行對比,來判斷算法的準(zhǔn)確性和駕駛員疲勞狀況,實驗結(jié)果如表1所示。
表1 實驗結(jié)果
本文首先利用Adaboost算法對視頻圖像中人臉區(qū)域進行精確定位,然后利用SDM算法對駕駛員面部特征點進行定位,最后使用眼部的特征點,來計算駕駛員的PERCLOS值,通過分析正常狀態(tài)和疲勞狀態(tài)下的PERCLOS值來判斷駕駛員是否疲勞。實驗結(jié)果表明,該算法能夠準(zhǔn)確地判斷出駕駛員的疲勞狀態(tài)。