申家冰 許 鋒
(中國刑事警察學(xué)院公安信息技術(shù)與情報(bào)學(xué)院,遼寧 沈陽 110854)
目前,國內(nèi)外駕駛員疲勞檢測方法分為基于車輛行為特征、駕駛員生理特征、駕駛員面部特征三種方法[1]。基于車輛行為特征的方法所用儀器價(jià)格昂貴,市場規(guī)模小,難以推廣,且隨著使用時(shí)間的增長,設(shè)備會(huì)因老化造成疲勞檢測準(zhǔn)確度下降[2]?;隈{駛員生理特征的方法可以實(shí)時(shí)檢測且精度高,但因特征信號(hào)的侵入性采集,駕駛員會(huì)產(chǎn)生一定程度的不適感[3]。基于駕駛員面部特征的方法只需采集駕駛員的面部信息,精度高且成本低,不會(huì)使駕駛員產(chǎn)生不適感。綜合上述分析,基于人臉面部特征的疲勞檢測方法在精確度、實(shí)時(shí)性、成本方面有著更為明顯的優(yōu)勢,值得進(jìn)一步深入研究。
目前基于人臉面部特征的疲勞檢測方法仍存在許多不足,許多情況下駕駛員開車需佩戴口罩,因面部遮擋造成收集的駕駛員面部特征減少,增添了駕駛員疲勞檢測的難度。通過查閱文獻(xiàn)及分析研究,發(fā)現(xiàn)國內(nèi)外對(duì)駕駛員疲勞檢測研究雖多,但對(duì)駕駛員面部遮擋情況下進(jìn)行疲勞檢測的方法較少,也缺乏針對(duì)性的總結(jié)。本文基于此設(shè)計(jì)了一套基于Yolov5s 和Dlib 的面部遮擋駕駛員疲勞檢測預(yù)警系統(tǒng),對(duì)駕駛員疲勞程度進(jìn)行實(shí)時(shí)監(jiān)測并及時(shí)給予提醒。
Yolov5s 模型作為Yolo 系列的最新版本,具有更優(yōu)的檢測精度和更快的推理速度。其中Yolov5s 的網(wǎng)絡(luò)最小,雖然精度略低于其他三種,但檢測速度最高[4]。因此,使用Yolov5s 符合本文的設(shè)計(jì)理念。Yolov5s 網(wǎng)絡(luò)結(jié)構(gòu)圖,如圖1所示。
圖1 YOLOv5s 網(wǎng)絡(luò)結(jié)構(gòu)圖
Yolov5s 模型由輸入(Input)、特征提取網(wǎng)絡(luò)(Backbone)、特征融合網(wǎng)絡(luò)(Neck)、檢測網(wǎng)絡(luò)(Prediction)四部分組成[5]。Input 層負(fù)責(zé)控制輸入圖片的大小,Backbone 部分對(duì)目標(biāo)的特征進(jìn)行提取,Neck 部分主要負(fù)責(zé)增強(qiáng)主干網(wǎng)絡(luò)所提取的特征,Prediction 部分使用GIoU Loss 函數(shù)對(duì)真實(shí)框和預(yù)測框之間的差距程度進(jìn)行預(yù)測[6]。
Dlib 庫是一個(gè)機(jī)器學(xué)習(xí)的開源庫,包含了機(jī)器學(xué)習(xí)的很多算法,使用方便且不依賴于其他庫[7]。本文利用其中的shape_predictor_68_face_landmarks.dat 模型標(biāo)注人臉的68 個(gè)面部特征點(diǎn),獲取人臉框架以及人臉特征點(diǎn)坐標(biāo),如圖2 所示。根據(jù)獲得的信息可以更好地判斷駕駛員面部狀態(tài)的變化,根據(jù)變化幅度大小進(jìn)行眼部、頭部、嘴部疲勞參數(shù)的計(jì)算。
圖2 人臉68 個(gè)面部特征點(diǎn)
具體綜合檢測流程如圖3 所示。首先讀取攝像頭中的畫面,通過訓(xùn)練好的Yolov5s 模型判斷駕駛員是否佩戴口罩,如果檢測到佩戴口罩,通過計(jì)算EAR、HPE 數(shù)值以及設(shè)定的條件閾值來檢測每分鐘駕駛員眨眼次數(shù)、點(diǎn)頭次數(shù);如果檢測到未佩戴口罩,在檢測每分鐘駕駛員眨眼、點(diǎn)頭次數(shù)的基礎(chǔ)上,計(jì)算MAR 數(shù)值以及設(shè)定的條件閾值,檢測每分鐘駕駛員打哈欠次數(shù)進(jìn)行判斷,其他判斷條件與駕駛員佩戴口罩時(shí)疲勞檢測一致。
圖3 綜合檢測流程圖
相關(guān)研究顯示,當(dāng)人們處于疲勞狀態(tài)時(shí)面部會(huì)出現(xiàn)以下明顯特征:眼睛眨眼頻率降低、開合度變小,嘴巴張大打哈欠,頭部開始點(diǎn)頭打瞌睡。因此利用單位時(shí)間內(nèi)眼睛眨眼次數(shù)、嘴巴打哈欠次數(shù)以及頭部瞌睡點(diǎn)頭次數(shù),可以判斷駕駛員的疲勞程度。此外,當(dāng)人們疲勞時(shí)他們的眼睛會(huì)很難睜開,并且會(huì)比平時(shí)閉上更長的時(shí)間,這是人們在疲勞時(shí)出現(xiàn)的共性特征,所以利用人眼的疲勞特征進(jìn)行駕駛員疲勞檢測具有很強(qiáng)的通用性和可靠性。相比之下,人們疲勞時(shí)打哈欠嘴巴的開合程度和點(diǎn)頭打瞌睡姿態(tài)變化的特征存在較大的個(gè)體差異,這會(huì)影響疲勞檢測的準(zhǔn)確性,因此本文將其作為輔助條件來判斷駕駛員的疲勞狀態(tài)。
本文使用人眼縱橫比EAR 參數(shù)來計(jì)算單位時(shí)間內(nèi)的眨眼次數(shù),使用Dlib 庫可以提取到左右眼的12 個(gè)特征點(diǎn)(37 ~42 為左眼,43 ~48 為右眼)。以左眼為例,利用眼部特征點(diǎn)的橫、縱坐標(biāo)計(jì)算EAR 值,EAR 值計(jì)算公式如下:
當(dāng)人眼正常睜開時(shí),EAR 值在短時(shí)間內(nèi)變化幅度較小,在0.2 附近波動(dòng)。當(dāng)人眼閉合時(shí),EAR 值迅速下降,完全閉合時(shí)EAR 值接近于零,為此國內(nèi)外許多眼部疲勞檢測算法將初始閾值設(shè)定為0.2,然后通過計(jì)算單位時(shí)間內(nèi)眨眼次數(shù)來檢測疲勞程度,沒有將正常狀態(tài)與疲勞狀態(tài)的眨眼動(dòng)作區(qū)分開。本文通過多次仿真實(shí)驗(yàn)對(duì)比,發(fā)現(xiàn)將初始閾值設(shè)置為0.18 可以滿足實(shí)驗(yàn)要求,為此對(duì)于攝像頭捕捉到的每一幀EAR 值,將其與閾值0.18 進(jìn)行比較。當(dāng)EAR 由某個(gè)值迅速下降至小于0.18,再迅速上升至大于0.18,則判斷為一次眨眼。當(dāng)駕駛員在正常狀態(tài)下開車時(shí),每分鐘眨眼次數(shù)在15 ~30 次之間,而當(dāng)駕駛員處于疲勞狀態(tài)時(shí),眼睛會(huì)長時(shí)間閉合,單位時(shí)間內(nèi)的眨眼次數(shù)減少,通過計(jì)算單位時(shí)間內(nèi)駕駛員的眨眼次數(shù)可以很好地判斷駕駛員疲勞與否。
本文使用嘴巴的長寬比 MAR 值來計(jì)算單位時(shí)間內(nèi)的打哈欠次數(shù),首先從Dlib 庫中提取嘴部的6 個(gè)特征點(diǎn)(縱向62、68、64、66 四個(gè)坐標(biāo)、橫向61、65 兩個(gè)坐標(biāo)),通過這6 個(gè)特征點(diǎn)的坐標(biāo)差值變化來判斷打哈欠時(shí)嘴巴的張開程度。MAR 值計(jì)算公式如下:
通過計(jì)算MAR 值來判斷是否打哈欠,當(dāng)人們打哈欠時(shí)張口幅度明顯大于人們平時(shí)說話時(shí),但由于打哈欠時(shí)嘴部的開合程度存在很大的個(gè)體差異,因此本文將該特征作為疲勞特征的次要檢測點(diǎn)。由于打哈欠的特征與正常說話、吃東西有明顯不同,通過多次實(shí)驗(yàn)對(duì)比分析,發(fā)現(xiàn)將MAR 的閾值設(shè)定為0.8 能與之相區(qū)分。因此本文設(shè)定檢測到MAR 值大于閾值0.8 且1min內(nèi)超過10 次判定為疲勞,仿真結(jié)果準(zhǔn)確率較高。
現(xiàn)實(shí)生活中,駕駛員在疲勞狀態(tài)下頭部姿態(tài)變化主要體現(xiàn)為點(diǎn)頭,搖頭和晃頭出現(xiàn)頻率較少,因此本文通過檢測單位時(shí)間內(nèi)的點(diǎn)頭次數(shù)來判斷疲勞程度。HPE 算法是通過檢測2D人臉的關(guān)鍵點(diǎn),利用三維形變模型擬合不同人對(duì)應(yīng)的3D 人臉模型,接著求解3D 點(diǎn)和對(duì)應(yīng)2D 點(diǎn)之間的轉(zhuǎn)換關(guān)系,然后使用Open CV 中的函數(shù)solvePnP(),根據(jù)旋轉(zhuǎn)矩陣求解歐拉角,根據(jù)得到的低頭歐拉角數(shù)據(jù)以及面部特征點(diǎn)的位置綜合判斷頭部狀態(tài)[8]。但由于點(diǎn)頭時(shí)頭部的變化幅度存在很大的個(gè)體差異,因此本文將該特征作為疲勞特征的次要檢測點(diǎn)。為了將瞌睡點(diǎn)頭與正常頭部轉(zhuǎn)動(dòng)相區(qū)分,通過多次實(shí)驗(yàn)對(duì)比分析發(fā)現(xiàn),將低頭歐拉角| Pitch |≥25°作為頭部疲勞特征能夠與正常頭部轉(zhuǎn)動(dòng)相區(qū)分。因此本文設(shè)定檢測到低頭歐拉角| Pitch|≥25°且1min 內(nèi)超過15 次判定為疲勞,準(zhǔn)確率較高。
本文實(shí)驗(yàn)電腦操作系統(tǒng)為Windows10,16G內(nèi)存,顯卡型號(hào)為NVIDIA GeForce GTX 1080,CPU 型號(hào)為Intel Core i7 - 6700 CPU @ 3.40GHz處理器,使用pytorch1.10.0 作為深度學(xué)習(xí)框架。
本實(shí)驗(yàn)從網(wǎng)絡(luò)上爬取到2800 張各種未佩戴口罩和佩戴口罩的人臉圖片作為數(shù)據(jù)集。使用Labelimg 對(duì)人臉圖片進(jìn)行分類標(biāo)注,數(shù)據(jù)集中佩戴口罩的人臉照片標(biāo)注為mask,未佩戴口罩的人臉照片標(biāo)注為face。按照 6: 1 的比例劃分為訓(xùn)練集、驗(yàn)證集,其中訓(xùn)練集包含2400 張圖片,驗(yàn)證集包含400 張圖片。
本文模型訓(xùn)練過程中設(shè)置參數(shù)如表1所示。
表1 模型訓(xùn)練參數(shù)
利用 Yolov5s 模型在口罩佩戴識(shí)別訓(xùn)練100個(gè)epochs 后,按照上述模型評(píng)估指標(biāo)對(duì)該模型進(jìn)行評(píng)估,評(píng)估結(jié)果如圖4 所示。從圖4 中可以看出,模型在訓(xùn)練中其準(zhǔn)確率和召回率穩(wěn)定提升。當(dāng)達(dá)到飽和狀態(tài)后,精準(zhǔn)率可以穩(wěn)定在80%以上;召回率可以穩(wěn)定在80%左右;平均精度均值也保持在較高水平,可以穩(wěn)定在0.8左右;模型在實(shí)際應(yīng)用中的識(shí)別速度較快,基本滿足實(shí)時(shí)檢測的要求。
圖4 YOLOV5s 模型的評(píng)估結(jié)果
本文采集了6 位志愿者分別在上午、夜晚兩個(gè)時(shí)間段,以及是否佩戴口罩和眼鏡4 種不同狀態(tài)模擬駕駛汽車的視頻,共采集到60 段視頻。每段視頻各測試2 次,每次測試時(shí)間都是60 s?;趯?duì)所有實(shí)驗(yàn)數(shù)據(jù)的分析,代碼運(yùn)算判斷結(jié)果基本準(zhǔn)確。
目前,國內(nèi)外面部疲勞檢測常用的方法是結(jié)合眼部眨眼和嘴部打哈欠進(jìn)行判定,設(shè)置單位時(shí)間內(nèi)眨眼或打哈欠次數(shù)超過一定數(shù)值即判定為疲勞,閾值設(shè)定沒有充分考慮到和正常人體活動(dòng)區(qū)分開,導(dǎo)致疲勞檢測準(zhǔn)確率不高,在駕駛員佩戴口罩情況下會(huì)因嘴部特征點(diǎn)缺失極易導(dǎo)致誤判。表2 為佩戴口罩情況下傳統(tǒng)疲勞檢測方法與本文提出的面部遮擋疲勞檢測方法對(duì)比結(jié)果;表3 為未佩戴口罩情況下傳統(tǒng)疲勞檢測方法與本文提出的面部遮擋疲勞檢測方法對(duì)比結(jié)果。
表2 駕駛員佩戴口罩情況下兩種方法對(duì)比結(jié)果
表3 駕駛員未佩戴口罩情況下兩種方法對(duì)比結(jié)果
表2、表3 判定結(jié)果表明,本文提出的面部遮擋駕駛員疲勞檢測方法比傳統(tǒng)疲勞駕駛檢測方法疲勞檢測準(zhǔn)確性更高,更貼近實(shí)際,實(shí)用性更強(qiáng)。
針對(duì)駕駛員佩戴口罩導(dǎo)致疲勞檢測困難的問題,本文利用深度學(xué)習(xí)訓(xùn)練好的Yolov5s 模型判斷駕駛員是否佩戴口罩,如果檢測到佩戴口罩,以眼部疲勞特征為主,頭部疲勞特征為輔進(jìn)行檢測;如果檢測到未佩戴口罩,在眼部、頭部疲勞特征的基礎(chǔ)上加上嘴部疲勞特征進(jìn)行檢測。通過計(jì)算EAR、MAR、HPE 數(shù)值以及設(shè)定的條件閾值來檢測每分鐘駕駛員眨眼次數(shù)、打哈欠次數(shù)、點(diǎn)頭次數(shù),最終綜合判斷駕駛員疲勞狀態(tài)。結(jié)果顯示此系統(tǒng)疲勞檢測準(zhǔn)確率較高,可以在駕駛員疲勞時(shí)給予及時(shí)的提醒。但由于夜晚光線較暗且駕駛員面部被遮擋可能會(huì)導(dǎo)致誤判,如果增強(qiáng)攝像頭的夜間拍攝性能或者車輛內(nèi)部增加照明設(shè)施,可以更好地提高面部遮擋駕駛員疲勞檢測的準(zhǔn)確率。