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