齊偉 張來剛 劉朝陽
摘 要:本文通過對人臉追蹤和疲勞特征分析的研究設(shè)計(jì)了一個疲勞駕駛預(yù)警系統(tǒng),通過特征人臉識別器來進(jìn)行駕駛?cè)松矸莸尿?yàn)證;通過坐標(biāo)解算來獲取駕駛?cè)说念^部姿態(tài)。電腦端將駕駛?cè)说恼Q垲l率、PERCLOS值、哈欠頻率、困意點(diǎn)頭頻率和連續(xù)駕駛時長通過一定的評判標(biāo)準(zhǔn)形成疲勞駕駛預(yù)警信號,并將最終結(jié)果通過socket與樹莓派端進(jìn)行數(shù)據(jù)通信,由樹莓派端執(zhí)行預(yù)警操作。
關(guān)鍵詞:嵌入式系統(tǒng) 人臉追蹤 特征分析 疲勞駕駛預(yù)警
1 基礎(chǔ)人臉識別及關(guān)鍵算法
1.1 基于特征臉的人臉識別算法
特征人臉識別算法是一種在主成分分析(PCA)中進(jìn)行人臉辨識的技術(shù)。
a.采集駕駛?cè)藞D像作為訓(xùn)練樣本
令駕駛?cè)吮3殖S玫鸟{駛坐姿,采集期間目視前方,將采集到的圖像作為訓(xùn)練樣本數(shù)據(jù)。
b.處理訓(xùn)練數(shù)據(jù)
假設(shè)采集到M張人臉圖像信息,把每張圖像拉成一列(假設(shè)圖片像素個數(shù)是N),將這些向量放在一個矩陣S中作為訓(xùn)練樣本:
將待檢測的人臉圖像輸入后做主成分分析后,求和的歐氏距離得到:
其中Ω表示待檢測人臉圖像的權(quán)重,Ωk表示訓(xùn)練集中某個人臉的權(quán)重,當(dāng)εk小于設(shè)定閾值時,則判斷待檢測人臉與訓(xùn)練樣本中第k個人臉是同一人的。
1.2 基于Dlib的人臉特征點(diǎn)提取算法
本設(shè)計(jì)基于OpenCV-Python中Dlib訓(xùn)練好的人臉68特征點(diǎn)數(shù)據(jù)庫進(jìn)行人臉眼部、嘴部關(guān)鍵的提取和分析計(jì)算。該算法是基于ERT(ensemble of regression trees)級聯(lián)回歸算法,即梯度提高學(xué)習(xí)的回歸樹方法。其中人臉檢測的方法是對正負(fù)樣本提取Hog描述因子后,利用支持向量機(jī)(SVM)算法進(jìn)行分類訓(xùn)練,過程與2.1節(jié)中Haar級聯(lián)分類器的訓(xùn)練類似。
檢測到人臉后,利用訓(xùn)練好的人臉68特征關(guān)鍵點(diǎn)數(shù)據(jù)庫(shape_predictor_68_face_landmarks.dat)和Python中的dlib.shape_predictor函數(shù)對駕駛?cè)说哪槻窟M(jìn)行特征關(guān)鍵點(diǎn)標(biāo)記。
從這68個特征關(guān)鍵點(diǎn)中提取出眼部、嘴部特征點(diǎn)的位置坐標(biāo),來為接下來EAR(眼部縱橫比)和MAR(嘴部縱橫比)提供計(jì)算數(shù)據(jù)。
1.3 頭部姿態(tài)獲取算法
首先通過Dlib庫得到2D人臉68個特征關(guān)鍵點(diǎn)),再通過3D Morphable Model等模型匹配算法擬合3D人臉特征點(diǎn)。
由世界坐標(biāo)系0w-XwYwZw到像素坐標(biāo)系uv的轉(zhuǎn)換公式由得到:
其中相機(jī)的內(nèi)參只由相機(jī)本身決定,由張正友標(biāo)定法等標(biāo)定出來;相機(jī)的外參會隨著世界坐標(biāo)系中物體的位置而變化,當(dāng)計(jì)算出相機(jī)畸變后,把3D參考點(diǎn)、2D關(guān)鍵點(diǎn)、相機(jī)內(nèi)參和相機(jī)畸變輸入到OpenCV的solvePnP函數(shù)中求解出旋轉(zhuǎn)矩陣R和平移矩陣T,最后通過歐拉角的計(jì)算出頭部運(yùn)動姿態(tài),得到駕駛?cè)说念^部pitch(俯仰角)、yaw(偏航角)和roll(翻滾角)。
2 基于人臉特征分析的疲勞駕駛檢測方法
2.1 基于眼部特征分析的疲勞檢測方法
2.1.1 基于眼部特征分析的疲勞指標(biāo)
(1)眨眼頻率指標(biāo)
本設(shè)計(jì)采用EAR(Eye Aspect Ratio,眼睛縱橫比)值來作為眨眼頻率檢測的方法。EAR的表示圖片如下,其中P1-P6代表人眼6個特征點(diǎn)在圖像中的坐標(biāo)位置,EAR的本質(zhì)就是求距離之比。
EAR實(shí)時判斷眨眼的驗(yàn)證圖片:
由圖2可以看出用EAR=0.2來檢測睜眼、閉眼的實(shí)現(xiàn)效果非常好。由文獻(xiàn)[11]知,人在清醒的狀態(tài)下眨眼頻率約為10~20次/min,當(dāng)處于疲勞狀態(tài)時眨眼的頻率將提高約64%,故設(shè)置當(dāng)每分鐘眨眼次數(shù)大于20時則認(rèn)為駕駛?cè)颂幱谄隈{駛狀態(tài)。
2.1.2 眼部特征分析檢測的實(shí)現(xiàn)
a.眨眼頻率檢測實(shí)現(xiàn)
在每次程序循環(huán)過程中檢測駕駛?cè)说腅AR值,如果EAR小于0.2則眨眼計(jì)數(shù)器blink_counter自加1,若某次循環(huán)中檢測到EAR大于0.2則清零blink_counter。當(dāng)連續(xù)3次循環(huán)中EAR都小于0.2則判斷為眨眼一次且清零眨眼計(jì)數(shù)標(biāo)志blink_counter。若在每60秒內(nèi)眨眼次數(shù)達(dá)到20次及以上則發(fā)出相應(yīng)的疲勞駕駛預(yù)警信號。
b.PERCLOS實(shí)現(xiàn)
本設(shè)計(jì)的操作方法為先通過遍歷文件夾中采集好的每張駕駛?cè)说膱D像,計(jì)算出每個駕駛?cè)搜劬Φ拈]眼時最小EAR值I1和睜眼時平均EAR值I2,由此得出得出眼睛閉合20%時的EAR值為T1=I1+(I2-I1)*0.2,眼睛閉合80%時的EAR值為T2=I1+(I2-I1)*0.8。如對本人采集的T1=0.151,T2=0.192。
實(shí)時采集的EAR計(jì)算圖像為:
根據(jù)PERCLOS的計(jì)算公式先初始化計(jì)數(shù)標(biāo)志P80_count1和閉眼標(biāo)志位P80_flag1為零,閉眼標(biāo)志位P80_flag1=0的作用是控制程序僅在從睜眼到閉眼時刻開啟計(jì)時。在每次程序循環(huán)中檢測駕駛?cè)说腅AR值,當(dāng)EAR小于T1、駕駛?cè)四恳暻胺綍r且P80_flag1為0時,計(jì)數(shù)標(biāo)志P80_counter1自加1,否則清空P80_count1。當(dāng)連續(xù)3次檢測到EAR 2.2 基于嘴部特征分析的疲勞檢測方法 2.2.1 基于嘴部特征分析的疲勞指標(biāo) 嘴部疲勞特征即為在一定時間內(nèi)打哈欠的次數(shù),其判斷依據(jù)是根據(jù)嘴部特征點(diǎn)的距離運(yùn)算。與眼部開閉特征EAR類似,嘴部特征點(diǎn)采用MAR(Mouth Aspect Ratio,嘴部縱橫比)算法。 MAR判斷哈欠的驗(yàn)證圖片: 從上圖可以看出哈欠檢測的實(shí)現(xiàn)效果非常好。由于目前沒有統(tǒng)一的嘴巴開度閾值檢測實(shí)驗(yàn),故根據(jù)文獻(xiàn)]取MAR的閾值為0.75,當(dāng)MAR>0.75時即認(rèn)為打哈欠一次,當(dāng)每分鐘內(nèi)打哈欠次數(shù)達(dá)到3次即判斷為疲勞駕駛狀態(tài)。 2.2.2 嘴部特征分析檢測的實(shí)現(xiàn) 首先初始化哈欠標(biāo)志位yawn_flag和哈欠計(jì)數(shù)器yawn_counter為0,當(dāng)檢測到嘴巴張開(MAR>0.75)時,yawn_counter自加1,當(dāng)連續(xù)3次檢測到MAR>0.75即認(rèn)為駕駛?cè)苏趶堊?,開始計(jì)時并將yawn_counter置1。當(dāng)檢測到駕駛?cè)俗彀烷]合時,若張嘴持續(xù)時間大于等于2秒,則認(rèn)為打了一次哈欠,哈欠次數(shù)yawns自加1。每60秒統(tǒng)計(jì)一次哈欠次數(shù),當(dāng)達(dá)到規(guī)定的3次/min時觸發(fā)警報。 2.3 基于頭部姿態(tài)特征分析的疲勞檢測方法 2.3.1 基于頭部姿態(tài)特征分析的疲勞指標(biāo) 在長時間駕車出現(xiàn)較大的疲勞困意后,駕駛?cè)藭霈F(xiàn)困意點(diǎn)頭的行為。下圖為計(jì)算出的pitch(俯仰角)、yaw(偏航角)和roll(翻滾角)在頭部轉(zhuǎn)動時的變化情況: 根據(jù)文獻(xiàn)[15]為防止把駕駛?cè)说皖^看儀表盤、尋物等誤認(rèn)為困意點(diǎn)頭,所以設(shè)置當(dāng)pitch低于閾值持續(xù)3秒時判定為困意點(diǎn)頭一次,每分鐘內(nèi)困意點(diǎn)頭次數(shù)大于3次則認(rèn)為駕駛?cè)颂幱谄隈{駛狀態(tài)。 3 總結(jié)與展望 本設(shè)計(jì)用特征人臉識別器進(jìn)行駕駛?cè)说纳矸葑R別,該方法要求必須是駕駛?cè)说恼鎴D像,因此在轉(zhuǎn)頭的過程中可能出現(xiàn)誤判,且待識別人臉圖像的尺寸應(yīng)該接近訓(xùn)練集的圖像尺寸,因此在縮放的過程中可能會丟失一些信息造成誤判。用EAR來模擬PERCLOS的P80標(biāo)準(zhǔn),該方法稍微背離了PERCLOS的眼瞼遮住瞳孔面積的定義,可能造成對前人實(shí)驗(yàn)復(fù)現(xiàn)的準(zhǔn)確率下降。針對該問題未來可以采用神經(jīng)網(wǎng)絡(luò)等算法進(jìn)行優(yōu)化改進(jìn),提高魯棒性和準(zhǔn)確率。 參考文獻(xiàn): [1]國家統(tǒng)計(jì)局.2019年國民經(jīng)濟(jì)和社會發(fā)展統(tǒng)計(jì)公報[DB/OL].http://www.stats.gov.cn/tjsj/zxfb/202002/t20200228_1728913.html,2020.2.28. [2]王暢.駕駛員疲勞行為研究綜述[C].中國科學(xué)技術(shù)協(xié)會、中華人民共和國交通運(yùn)輸部、中國工程院:中國公路學(xué)會,2019:1039-1044. [3]張琦. 機(jī)動車駕駛?cè)似诔潭葧r變特性及規(guī)律研究[D].武漢理工大學(xué),2018. [4]陳軍. 車載嵌入式平臺疲勞駕駛檢測系統(tǒng)研究與設(shè)計(jì)[D].西南科技大學(xué),2016. [5]DINGES D F,GRACE R.PERCLOS:A Valid Psycho physiological Measure of Alertness as Assessed by Psychomotor vigilance[R].Washington:Federal Highway Administration,Office of Motor Carriers,1998. [6]江水郎.基于視覺的駕駛員疲勞檢測研究[D].上海交通大學(xué),2008. [7]鄭培,宋正河,周一鳴.基于PERCLOS的機(jī)動車駕駛員駕駛疲勞的識別算法[J].中國農(nóng)業(yè)大學(xué)學(xué)報,2002(02):104-109. [8]史瑞鵬,錢屹,蔣丹妮.基于卷積神經(jīng)網(wǎng)絡(luò)的疲勞駕駛檢測方法[J/OL].計(jì)算機(jī)應(yīng)用研究:1-7[2020-04-21].