宋佳堯, 尉 斌, 安姝潔, 張涔嘉, 楊 瑋
(天津商業(yè)大學(xué)信息工程學(xué)院, 天津 300134)
目前,對(duì)于疲勞狀態(tài)的主要測量方法分為生理特征、視覺特征和語音特征等類型[1]。其中,基于生理特征[2]的疲勞檢測大多情況下會(huì)使用侵入式的傳感器,高昂的價(jià)格及侵入式設(shè)備可能引起佩戴者的不適,是影響其普及推廣的兩大因素;基于語音特征[3]的疲勞檢測只適用于采用標(biāo)準(zhǔn)呼叫應(yīng)答的場景且語音標(biāo)記樣本數(shù)據(jù)較為稀缺;基于視覺特征[4]的疲勞檢測具有非接觸性、可直接根據(jù)人的面部關(guān)鍵點(diǎn)坐標(biāo)的變化(如頭部位置的偏移、眼睛閉合時(shí)長、打哈欠等)反映其疲勞狀態(tài)等優(yōu)勢,成為目前研究的主流方法。在駕駛環(huán)境、云自習(xí)室等情境下,基于面部視覺特征的疲勞狀態(tài)檢測,可以幫助人們對(duì)駕駛員的疲勞狀態(tài)、學(xué)生注意力不集中的狀態(tài)發(fā)出預(yù)警。
目前,應(yīng)用較為廣泛的基于面部特征的疲勞檢測度量參數(shù)有PERCLOS(眼睛閉合時(shí)間占單位時(shí)間的百分率)參數(shù)和PMOT(張嘴時(shí)間占單位時(shí)間的百分率)參數(shù)。PERCLOS是卡內(nèi)基梅隆研究所提出的度量疲勞的物理量[5]。美國聯(lián)邦公路管理局開展了在駕駛情境下,對(duì)PERCLOS、眨眼頻率、打哈欠等9種疲勞參數(shù)進(jìn)行相關(guān)性分析研究,得出PERCLOS參數(shù)與疲勞駕駛狀態(tài)相關(guān)性最高的結(jié)論[6]。
PERCLOS參數(shù)表示閉眼時(shí)長在單位時(shí)間內(nèi)所占的百分比,使用閉眼幀數(shù)與單位時(shí)間內(nèi)視頻總幀數(shù)n的比值表示,其計(jì)算公式如下:
(1)
根據(jù)參考文獻(xiàn)[7],將眼瞼遮住瞳孔的面積達(dá)到80%,判定為閉眼的P80標(biāo)準(zhǔn)對(duì)疲勞狀態(tài)的檢測是最準(zhǔn)確的。
PMOT參數(shù)的計(jì)算公式如公式(2)所示,它用來表示張嘴時(shí)長在單位時(shí)間內(nèi)所占的百分比,使用張嘴幀數(shù)與單位時(shí)間內(nèi)視頻總幀數(shù)m的比值表示。
(2)
值得注意的是,單獨(dú)使用PMOT參數(shù),有時(shí)會(huì)造成打哈欠的張嘴和說話張嘴的誤報(bào),實(shí)際進(jìn)行疲勞檢測時(shí),可以結(jié)合眨眼頻率和頭部姿態(tài)參數(shù)進(jìn)行閾值的確定。
Dlib是一種開源的、跨平臺(tái)的工具包,包含諸如圖像處理、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等眾多模塊。對(duì)比TensorFlow和PyTorch兩大框架,Dlib模型在圖像處理和特征點(diǎn)定位方面的通用性更強(qiáng),具有更大的優(yōu)越性。因此,Dlib模型在人臉檢測領(lǐng)域的應(yīng)用也非常廣泛。本文設(shè)計(jì)的Dlib面部疲勞狀態(tài)檢測模型,由人臉檢測器、關(guān)鍵點(diǎn)定位器、特征計(jì)算器和狀態(tài)預(yù)測器四個(gè)模塊構(gòu)成,面部疲勞狀態(tài)檢測模型框架如圖1所示。其中,人臉檢測器的任務(wù)是讀取視頻,并通過dlib.get_forntal_face_detector函數(shù)捕獲視頻流中的人臉,將人臉框發(fā)送給關(guān)鍵點(diǎn)定位器。關(guān)鍵點(diǎn)定位器的任務(wù)是通過dlib.shape_predictor函數(shù)獲取人臉的68個(gè)關(guān)鍵點(diǎn)的坐標(biāo),并將坐標(biāo)向量傳遞給特征計(jì)算器。特征計(jì)算器的任務(wù)是分別對(duì)眼部特征、嘴部特征和頭部姿態(tài)進(jìn)行計(jì)算,并將結(jié)果實(shí)時(shí)發(fā)送給狀態(tài)預(yù)測器。狀態(tài)預(yù)測器的任務(wù)是對(duì)疲勞狀態(tài)進(jìn)行判定,不依賴于單一參數(shù),而是結(jié)合眼部、嘴部和頭部姿態(tài)進(jìn)行綜合度量。例如,人在打瞌睡時(shí),除了會(huì)閉眼,頭部也會(huì)下垂;打哈欠時(shí),除了嘴部的張開角度比說話時(shí)大,還會(huì)出現(xiàn)閉眼的情況。
圖1 面部疲勞狀態(tài)檢測模型框架Fig.1 Framework of facial fatigue state detection model
Dlib庫提供了dlib.get_forntal_face_detector函數(shù),基于這個(gè)函數(shù)可以構(gòu)造人臉檢測器,人臉檢測器采用HOG算法(Histogram of Oriented Gradient,方向梯度直方圖)、線性分類器、金字塔圖像結(jié)構(gòu)和滑動(dòng)窗口檢測等技術(shù),Dlib模型中的HOG算法主要用于捕獲輪廓信息,首先對(duì)圖像進(jìn)行灰度化處理,其次進(jìn)行Gamma壓縮和歸一化圖像,以減少戶外光照對(duì)圖像的影響;其檢測效果如圖2所示。在本文的模型設(shè)計(jì)中,人臉檢測器可以針對(duì)攝像頭進(jìn)行實(shí)時(shí)的人臉捕獲。
圖2 人臉檢測器效果Fig.2 Face detector effect
面部關(guān)鍵點(diǎn)定位器是基于Dlib庫中的dlib.shape_predictor函數(shù)構(gòu)造的,該函數(shù)對(duì)面部的68個(gè)關(guān)鍵點(diǎn)(編號(hào)從1~68)進(jìn)行標(biāo)注。從圖3可以看出,左眼的關(guān)鍵點(diǎn)編號(hào)是37~42,右眼的關(guān)鍵點(diǎn)編號(hào)是43~48,嘴部的關(guān)鍵點(diǎn)編號(hào)是49~68。圖2和圖3中使用的測試圖片來自于WIDER FACE公開數(shù)據(jù)集。
圖3 關(guān)鍵點(diǎn)定位器效果Fig.3 Key locator effect
是否發(fā)生了疲勞狀態(tài)下的瞌睡行為主要通過“閉眼+頭部姿態(tài)變化”綜合判定。
在Dlib庫中,眼睛的位置是通過六個(gè)關(guān)鍵點(diǎn)進(jìn)行標(biāo)注的(圖4)。因此,眼睛縱橫比的計(jì)算方法如下[8]:
(3)
圖4 計(jì)算縱橫比的眼部關(guān)鍵點(diǎn)Fig.4 Key points for calculating eye aspect ratios
頭部姿態(tài)估計(jì)主要是獲得臉部朝向的角度信息,一般可以用旋轉(zhuǎn)矩陣、旋轉(zhuǎn)向量、四元數(shù)或歐拉角表示[9]。歐拉角的可讀性更好,使用較為廣泛,常用的三個(gè)歐拉角度是俯仰角Pitch、搖頭Yaw和滾轉(zhuǎn)角Roll。
為減少誤報(bào),提高模型判定的準(zhǔn)確率,要對(duì)正常狀態(tài)下的眨眼和疲勞時(shí)的閉眼進(jìn)行區(qū)分,正常狀態(tài)下眨眼的閉眼時(shí)間極短,而疲勞時(shí)閉眼時(shí)間相對(duì)較長。正常狀態(tài)下眨眼時(shí),眼睛縱橫比只在瞬時(shí)(1~3幀)處于0值,因此在判斷眼睛縱橫比的基礎(chǔ)上,還要檢測閉眼的持續(xù)時(shí)長[10]。
持續(xù)時(shí)長可通過計(jì)數(shù)器統(tǒng)計(jì)。在眼睛縱橫比小于0.2時(shí),認(rèn)為當(dāng)前幀處于閉眼狀態(tài),計(jì)數(shù)器加1。一旦計(jì)數(shù)器的值大于閾值,則結(jié)合頭部當(dāng)前的姿態(tài)進(jìn)行判定。例如,計(jì)數(shù)器的值大于48且頭部俯仰角Pitch大于15°,則判定為瞌睡行為。
是否發(fā)生了疲勞狀態(tài)下的打哈欠行為,主要通過嘴部的張開角度和持續(xù)時(shí)間判定。在Dlib庫中,嘴部的外部輪廓對(duì)應(yīng)12個(gè)關(guān)鍵點(diǎn),如圖3中的編號(hào)49~60,內(nèi)部輪廓對(duì)應(yīng)8個(gè)關(guān)鍵點(diǎn),如圖3中的編號(hào)61~68。
類似眼睛縱橫比的計(jì)算方法,選取嘴部外部輪廓的6個(gè)關(guān)鍵點(diǎn)(關(guān)鍵點(diǎn)的位置如圖5所示),進(jìn)行嘴部縱橫比的計(jì)算,具體計(jì)算方法如公式(4)所示:
(4)
圖5 計(jì)算縱橫比的嘴部關(guān)鍵點(diǎn)Fig.5 Key points for calculating mouth aspect ratios
一般情況下,人們在安靜、說話、唱歌等不同狀態(tài)時(shí),嘴部的縱橫比對(duì)應(yīng)不同的數(shù)值。例如,安靜時(shí)的嘴部是閉合的,正常說話和交談時(shí)嘴部是半張開狀態(tài)的,而在打哈欠時(shí),會(huì)把嘴張大且持續(xù)一定的時(shí)間。
為減少誤報(bào),提高模型判定的準(zhǔn)確率,要對(duì)正常狀態(tài)下的說話和疲勞時(shí)的張嘴打哈欠行為進(jìn)行區(qū)分,人在正常說話時(shí),他的嘴巴張開和閉合是非常頻繁的,而打哈欠時(shí),嘴部縱橫比數(shù)值大且持續(xù)時(shí)間長(大于4 s)。持續(xù)時(shí)間的計(jì)算與“3.1”小節(jié)的計(jì)算方法類似,可通過計(jì)數(shù)器統(tǒng)計(jì)。在嘴部縱橫比大于0.3時(shí),認(rèn)為當(dāng)前幀處于張嘴狀態(tài),計(jì)數(shù)器加1。當(dāng)計(jì)數(shù)器的值大于96,則判定為打哈欠。
實(shí)驗(yàn)環(huán)境為OpenCV3.4.9.3+Dlib-19.17.99,開發(fā)環(huán)境為Python3.7.3,Harr分類器選用haarcascade_frontalface_alt.xml。眼睛縱橫比的閾值為0.2,嘴部縱橫比的閾值為0.3。
本文使用YawDD數(shù)據(jù)集作為測試數(shù)據(jù)集,YawDD數(shù)據(jù)集是一個(gè)公開的視頻數(shù)據(jù)集,共收集了90名汽車駕駛員的駕駛視頻,其中女性駕駛員為43名,男性駕駛員為47名。視頻總數(shù)有351條,其中內(nèi)后視鏡角度的視頻合計(jì)320條(女性駕駛員為156條,男性駕駛員為164條);儀表板角度的視頻合計(jì)29條(女性駕駛員為13條,男性駕駛員為16條)。部分視頻中,駕駛員佩戴了普通眼鏡或太陽眼鏡。圖6展示了YawDD數(shù)據(jù)集中有代表性的視頻數(shù)據(jù),分為男性戴普通眼鏡、男性戴太陽眼鏡、男性未戴眼鏡、女性戴普通眼鏡、女性戴太陽眼鏡、女性未戴眼鏡六種類型。
(a)男性戴普通眼鏡
針對(duì)上述六種類型的視頻數(shù)據(jù),模型在測試時(shí)均成功捕獲到駕駛員打哈欠的狀態(tài),并實(shí)時(shí)預(yù)警提示信息,如圖7所示。
(a)男性戴普通眼鏡
觀察模型測試過程,發(fā)現(xiàn)佩戴普通眼鏡或太陽眼鏡,均未影響模型對(duì)眼部關(guān)鍵點(diǎn)的定位,但在佩戴太陽眼鏡時(shí),有時(shí)會(huì)因光線照射角度的不同影響對(duì)眼部關(guān)鍵點(diǎn)坐標(biāo)的實(shí)時(shí)跟蹤,進(jìn)而產(chǎn)生計(jì)算延遲,對(duì)疲勞狀態(tài)的檢測造成了一定影響。模型在YawDD數(shù)據(jù)集中測試統(tǒng)計(jì)結(jié)果如表1所示,平均查全率約為94.2%,平均準(zhǔn)確率約為93.3%。
表1 測試統(tǒng)計(jì)結(jié)果
以下針對(duì)查全率低于100%的情況進(jìn)行分析。從表1的數(shù)據(jù)來看,存在漏報(bào)導(dǎo)致查全率低的情況主要集中在男性戴太陽眼鏡、女性戴普通眼鏡和女性戴太陽眼鏡三種情況。但通過對(duì)模型的檢測發(fā)現(xiàn),是否佩戴眼鏡不是影響測試的重要因素,駕駛員的肢體移動(dòng)、手勢變化才是影響測試的主要因素。如圖8所示,女性駕駛員在打哈欠的同時(shí),用右手捂住了嘴巴,導(dǎo)致模型無法跟蹤嘴部關(guān)鍵點(diǎn)坐標(biāo)而產(chǎn)生了漏報(bào)。這些情況也為下一步對(duì)模型進(jìn)行優(yōu)化提供了方向。
圖8 漏報(bào)舉例Fig.8 Misreporting examples
疲勞檢測在日常學(xué)習(xí)、生活的很多方面都有著廣泛的應(yīng)用。例如,隨著我國汽車保有量的不斷攀升,疲勞駕駛引發(fā)的交通事故數(shù)量也逐年升高。在疲勞駕駛行為導(dǎo)致交通事故前,駕駛員往往會(huì)有明顯的先前疲勞特征,因此對(duì)疲勞駕駛狀態(tài)進(jìn)行檢測并做出相應(yīng)的預(yù)警,對(duì)于保障交通運(yùn)輸安全至關(guān)重要。本文提出的基于Dlib的模型通過人臉檢測器、關(guān)鍵點(diǎn)定位器、特征計(jì)算器和狀態(tài)預(yù)測器四個(gè)模塊,能夠快速有效地識(shí)別出人物打哈欠、瞌睡等疲勞狀態(tài)。通過實(shí)驗(yàn)結(jié)果可知,模型能夠滿足實(shí)時(shí)性、魯棒性和準(zhǔn)確率的要求。