黃志超 趙紅梅 陳奕迅 湯耀森
摘要:為了有效降低駕駛員疲勞駕駛、短時間未看道路等危險駕駛的概率,設計了以面部特征為研究對象的人臉識別的檢測系統(tǒng)。該系統(tǒng)通過對面部識別以及眼睛和嘴的定位跟蹤,提取面部疲勞信息,將跟蹤的圖像信息傳輸?shù)?OpenCV視覺庫進行圖像處理,通過一系列的算法對駕駛員疲勞、危險駕駛行為進行判斷、疲勞值計算,最后通過安全警報模塊對駕駛員給予警報提示。經(jīng)實驗測試,該系統(tǒng)滿足車載、實時性、準確性的要求,能夠快速的檢測駕駛員的危險駕駛狀態(tài),具有一定的實用性。
關鍵詞:面部識別;疲勞駕駛;危險駕駛
中圖分類號:TP274???????????? 文獻標志碼:A??????? 文章編號:1009-9492(2021)12-0143-04
Driver Fatigue and Dangerous Driving Detection System Based on Facial Recognition
Huang Zhichao ,Zhao Hongmei ,Chen Yixun ,Tang Yaosen
(Huali College, Guangdong University of Technology, Guangzhou 511325, China)
Abstract: In order to effectively reduce the probability of dangerous driving such as driver fatigue driving and not looking at the road for a short time, a face recognition detection system based on facial features was designed. The system extracts facial fatigue information through face recognition and positioning and tracking of eyes and mouth, transmits the tracked image information to OpenCV visual library for image processing, judges the driver′s fatigue and dangerous driving behavior and calculates the fatigue value through a series of algorithms, and finally gives an alarm to the driver through the safety alarm module. The experimental test shows that the system meets the requirements of on-board, real-time and accuracy, can quickly detect the dangerous driving state of drivers, and has certain practicability.
Key words: facial recognition; fatigue driving; dangerous driving
0 引言
根據(jù)中國質(zhì)量新聞網(wǎng)數(shù)據(jù)顯示,2020年中國汽車保有量已達2.81億輛,駕駛?cè)藛T達到4.18億人。隨著我國汽車保有量的持續(xù)增加,駕駛員人群的日益龐大,交通事故頻發(fā)的風險隨之增高,而疲勞駕駛和看手機、短時間未看道路等危險駕駛行為是交通事故發(fā)生的主要原因。
面部識別技術從20世紀60年代的早期研究階段,到現(xiàn)在的深度學習的突破階段,發(fā)生了巨大的轉(zhuǎn)變,廣泛應用于各個領域?;诿娌孔R別的疲勞駕駛檢測方法,因為實時性好,準確度高等特點,受到了廣泛的關注。本文將面部識別技術和駕駛員疲勞檢測融合起來,在汽車環(huán)境中,搭建以面部識別為核心的系統(tǒng)硬件平臺。通過對駕駛員面部的掃描,找到人臉的位置并跟蹤,提取眼睛和嘴巴的狀態(tài)信息,將跟蹤的圖像信息傳輸?shù)?OpenCV視覺庫進行圖像處理,通過一系列的算法對駕駛員疲勞、危險駕駛行為進行判斷、疲勞值計算,并將檢測出來的疲勞值與已經(jīng)設置好的疲勞閾值進行比較,最后通過安全警報模塊對駕駛員給予警報提示,減少或者終止駕駛員疲勞駕駛的行為,從而降低因疲勞、危險駕駛而引發(fā)的交通事故的發(fā)生率,保證駕駛員及同行車輛駕駛員的生命安全[1]。本文主要通過對面部識別算法的研究,采用了基于一種神經(jīng)網(wǎng)絡的68面度特征點檢測算法,在此基礎上構建殘差樹對人臉關鍵點提取疲勞信息,給出了 OpenCV的面部識別的硬件構成以及對駕駛員疲勞、危險駕駛行為判斷、疲勞值計算、預警測試的軟件實現(xiàn)方法。經(jīng)實驗測試,該系統(tǒng)滿足車載、實時性、準確性的要求,能夠快速地檢測駕駛員的危險駕駛狀態(tài),具有一定的實用性。
1 系統(tǒng)總體方案
本系統(tǒng)將面部識別的疲勞駕駛危險駕駛檢測方法與識別算法用到以樹莓派4B微處理器為核心的硬件平臺上。樹莓派又稱卡片式電腦,世界上最小的臺式機,外形只有信用卡大小,卻具有電腦的視頻、音頻等所有基本功能。系統(tǒng)包括面部識別功能、語音播報功能、數(shù)據(jù)顯示功能三大模塊。系統(tǒng)使用的微處理器是搭載了博通 BCM2711的樹莓派4B ,選擇了4G 內(nèi)存。面部識別由封裝于 Dlib計算機視覺開源庫中的面部識別算法來完成。由于普通攝像頭在夜晚無光的環(huán)境下拍攝受限,所以在本系統(tǒng)中選擇了樹莓派 NolR camera V2夜視攝像頭,其中搭載索尼 IMX219感光芯片,在夜晚無光、弱光拍攝以及識別模塊中起到強大的作用。
當車輛啟動時系統(tǒng)自動啟動,樹莓派4B開機并初始化各個模塊:紅外攝像頭開始采集實時圖像,語音播報模塊播報啟動語音。樹莓派4B 運行 Dlib 中的預訓練模型,將采集到的實時紅外圖像進行特征提取并記錄,配合 PERCLOS疲勞檢測算法檢測當前疲勞值,同時監(jiān)測頭部動作是否存在危險駕駛行為。當疲勞值達到預設閾值或頭部未保持正向前方達一定時間時,會進行相應的語音播報提醒駕駛員。若駕駛員仍未停止疲勞駕駛或危險駕駛行為,會更換另一套警告語音,并縮短播報間隔,直至駕駛員停止行車或面部正視前方。系統(tǒng)框圖如圖1所示。
2 系統(tǒng)硬件設計
系統(tǒng)硬件部分有微處理器、識別模塊、語音播報模塊、顯示模塊組成。駕駛員進入車輛后通過電容屏啟動該系統(tǒng),攝像頭隨之啟動并向樹莓派傳輸視頻信息。檢測駕駛員疲勞與危險駕駛判斷部分由樹莓派4B完成,樹莓派將判斷結(jié)果所需的語音播報信息傳給語音播報模塊進行播報,整個系統(tǒng)由電源模塊進行供電。
微處理器采用的是搭載博通 BCM2711(1.5 GHz 四核64位 ARM Cortex-A72)處理器的樹莓派4B ,擁有4GB 的內(nèi)存;雙頻802.11ac無線網(wǎng)絡,全吞吐量千兆以太網(wǎng)端口,藍牙5.0和2個 USB 3.0、2個 USB 2.0端口。
識別模塊采用樹莓派 Nola camera V2夜視攝像頭,搭載索尼 IMX219感光芯片; 800萬像素;視頻支持1080p30/720p60/640x480p90,圖片分辨率為3280×2464。通過攝像頭接口與樹莓派連接。紅外保證黑夜時系統(tǒng)還起作用,實時采集人臉圖像供樹莓派處理。
語音播報模塊[2]采用樹莓派喇叭(揚聲器)用 XFS5152CE語音合成芯片,內(nèi)置多種播報人聲,支持語速、語調(diào)、音量調(diào)節(jié)。使用杜邦線與樹莓派 GPIO 引腳相連,可使用3.3 V、5 V供電。當疲勞值達到預設閾值或頭部未保持正向前方達一定時間時,會進行相應的語音播報提醒駕駛員。
顯示模塊采用7寸jetson nano英偉達顯示屏,1 024×600px 分辨率。通過樹莓派上接口轉(zhuǎn)換線與樹莓派連接。能夠?qū)崟r顯示人臉和 P80、MAR 指標。硬件原理如圖2所示。
3 面部識別算法研究
本文使用的是 Dlib庫中封裝好的68面度特征點檢測算法,是基于一種神經(jīng)網(wǎng)絡的算法,該算法的基礎是梯度提升樹,在此基礎上再構建殘差樹對人臉關鍵點進行提取[3]。Dlib 和 OpenCV 用到跨平臺計算機視覺開源庫,內(nèi)置了面部識別函數(shù),非常適合用于借助攝像頭實時進行面部識別。使用 Dlib 來識別攝像頭拍攝圖片中的人臉,調(diào)用內(nèi)置函數(shù)獲得人臉關鍵點后由 OpenCV進行圖像化處理,在人臉上畫出人臉的特征點并清楚地標明特征點的序號。
3.1 人臉檢測
本系統(tǒng)使用 Python中 Dlib庫中的正向人臉檢測器對人臉進行檢查,接著使用 Dlib庫官方訓練好的面部68特征點檢測模型對人臉面部特征點進行提取。68面度特征點檢測算法可以匹配出人臉上68個特征點(包括眼睛、眉毛、鼻子、嘴巴等)。利用 Pycharm開發(fā),先檢測人臉的位置,讓后通過檢測的位置摳出人臉圖片,使用 Dlib 官方已經(jīng)訓練好的神經(jīng)網(wǎng)絡模型進行識別,利用 Dlib庫自帶的人臉預測器、特征提取器,然后計算128d特征來完成人臉識別,最后計算得出人臉的特征點,同時返回在輸出畫面上,并加以標注[3]。68特征點如圖3所示。? 3.2 面部疲勞值判別和計算
關于人臉面部的疲勞檢測[4],最直觀的兩個部分別是眨眼和哈欠[5]。本系統(tǒng)分別利用這兩個個部分的對駕駛員進行疲勞、危險檢測。
(1) 對于眼部,本文使用的是公認的最有說服力的 PERCLOS方法[6]和眼睛縱橫比 EAR 。目前檢測疲勞的方法最有效的是 PERCLOS系統(tǒng),從該算法得到 P80疲勞指標計算公式。P80是指眼瞼遮住瞳孔的面積的80%以上判別為眼睛閉合,以此作為時間統(tǒng)計指標。通過圖3中左右眼睛上的特征點的坐標可以計算出雙眼的縱橫比,可以計算出眨眼次數(shù)和疲勞值[7]。P1~P6分別對應左眼點36~點41,右邊和左邊同樣道理。
對于嘴部,本文使用的是 MAR 指標[8]。人在疲勞時往往會不自覺的打哈欠,通過對比研究,人在在正常說話時嘴部張開的連續(xù)幀時間是不超過3 s的,一旦連續(xù)幀超過3 s即被判為打哈欠。利用圖中嘴部的8個特征點,可以計算出嘴部疲勞 MAR 指標。M1~ M8分別對應左眼點60~點67。
4 系統(tǒng)軟件設計
樹莓派4B使用 Dlib中的疲勞駕駛預訓練模型,將采集到的實時紅外圖像進行特征提取并記錄,配合 PER? CLOS疲勞檢測計算當前疲勞值,若 P80≥40%,EAR ≤30%,MAR ≥75%則判定為疲勞駕駛[10-12]。同時監(jiān)測頭部動作是否存在危險駕駛行為,若面部偏移幅度過大則判定為危險駕駛。樹莓派4B 向語音播報模塊發(fā)出響應信號信號進行對應語音播報并持續(xù)監(jiān)測駕駛狀態(tài)和車輛行駛狀態(tài)。若駕駛員仍未停止疲勞駕駛或危險駕駛行為,系統(tǒng)會一直發(fā)出警報直至駕駛員面部正視前方。
軟件部分在樹莓派4B 上安裝 Pycharm ,創(chuàng)建項目,然后用 import導入 numpy 、cv2、Dlib等必要的包。numpy 部分負責疲勞數(shù)值計算,cv2部分負責畫圖、Dlib部分負責檢測人臉并得到68特征點。系統(tǒng)流程如圖4所示。
系統(tǒng)的關鍵就是對駕駛員的面部進行識別,然后計算并統(tǒng)計出疲勞值,通過顯示屏把數(shù)據(jù)顯示在屏幕上給駕駛員看,如果駕駛員被判定為疲勞駕駛或者危險駕駛系統(tǒng)就會立即進行語音提醒。想要成功獲得人臉面部的68個特征點,就必須先檢測到人臉的存在。調(diào)用 Dlib中的正向人臉檢測器 API ,如果沒有檢測到人臉就會在屏幕上顯示“No Face”,控制臺輸出“沒有檢測到人臉”,這里用手遮住臉、臉轉(zhuǎn)向左右兩邊的幅度太大、人臉不在攝像頭的攝像范圍里、人臉距離攝像頭太遠都算沒有檢測到人臉。面部識別流程如圖5所示。
面部識別模塊裝載了樹莓派 NolR camera V2夜視攝像頭,紅外攝像彌補了普通攝像頭在黑夜里拍攝效果不好的不足,使本系統(tǒng)在夜晚也能正常識別人臉提供了基礎。經(jīng)過紅外攝像頭拍攝的圖片會實時的傳給樹莓派4B ,面部識別模塊會提取圖片中駕駛員的面部的疲勞數(shù)據(jù),經(jīng)過數(shù)據(jù)累計對比之后,如果超過已經(jīng)設定好的閾值,語音播報模塊就會對駕駛員發(fā)出預警。語音播報流程如圖6所示。
5 系統(tǒng)實驗測試
5.1 測試結(jié)果
(1) 人臉檢測測試。想要成功獲得人臉面部的68個特征點,就必須先檢測到人臉的存在。調(diào)用 Dlib中的正向人臉檢測器 API ,如果沒有檢測到人臉就會在屏幕上顯示“No face detected”,控制臺輸出“沒有檢測到人臉”,這里用手遮住臉、臉轉(zhuǎn)向左右兩邊的幅度太大、人臉不在攝像頭的攝像范圍里、人臉距離攝像頭太遠都算沒有檢測到人臉。
(2) 特偵點顯示測試。在能檢測到人臉之后就是面部特征點的標記了。檢測到人臉之后調(diào)用68特征點檢測模型進行檢測,并由 OpenCV把得到的68個面部特征點標號序號后實時的顯示在屏幕上。屏幕的右上角會顯示 EAR、MAR、P80的值。
(3) 警報測試。檢測不到人臉時會被定義為危險駕駛并發(fā)出安全警告,疲勞值超過一定閾值則會被判定為疲勞駕駛也會觸發(fā)安全警報;當 P80≥40%或 EAR ≤30%或MAR ≥75%時,系統(tǒng)會發(fā)出安全警報。
5.2 結(jié)果分析
測試中實現(xiàn)面部識別功能可以在燈光較暗的情況下正常使用,人臉在一定范圍內(nèi)可以穩(wěn)定的、正常的使用;特偵點顯示功能完善,可以正常計算并顯示 EAR、 MAR、P80的值;警報功能正常,能在駕駛員疲勞時及時發(fā)出警報提醒駕駛員。
6 結(jié)束語
本文提出了一種基于面部識別的基于面部識別的駕駛員疲勞、危險駕駛檢測系統(tǒng),采用免費的 Dlib、 OpenCV 跨平臺計算機視覺開源庫、搭載了博通 BCM2711的樹莓派4B、樹莓派 NolR camera V2夜視攝像頭等模塊,實現(xiàn)了面部識別、疲勞檢測、危險檢測、安全警報等功能。測試結(jié)果表明本系統(tǒng)具有良好的可行性,可以在車里面使用本系統(tǒng)對駕駛員進行疲勞檢測,可以準確的檢測出人臉,并計算出駕駛員的疲勞值,疲勞值超過設定好的閾值會發(fā)出警報。本文提出的設計方案可用于駕駛方面的疲勞、危險檢測,具有實用性。
參考文獻:
[1]涂鑫.基于卷積神經(jīng)網(wǎng)絡的課堂人臉打卡算法[J].現(xiàn)代計算機, 2019(29):39-43.
[2]金谷香,張宏偉.基于防疲勞駕駛下的智能語音播報系統(tǒng)[J].電子世界,2018(6):157-158.
[3]李瑩.基于特征點分析的人臉疲勞狀態(tài)及身份識別[D].西安:西安電子科技大學,2015.
[4]王筱薇倩.面部識別技術及其在汽車行駛中的應用研究[D].安徽:安徽工程大學,2013.
[5]陳旭, 肖洪兵.基于面部綜合信息的疲勞駕駛判別研究[J].科學技術與工程,2014,14(11):226-230.
[6]黃斌.基于人臉特征的駕駛員疲勞檢測算法與實現(xiàn)[D].南京:南京航空航天大學,2017.
[7]汪磊,孫瑞山.基于面部特征識別的管制員疲勞監(jiān)測方法研究[J].中國安全科學學報,2012,22(7):6671.
[8]龔淑娟.基于面部多指標的貨運司機疲勞駕駛檢測[J].物流技術,2020,39(9):74-81.
[9]韓懷陽,王秀麗.機動車駕駛員疲勞駕駛檢測系統(tǒng)研究[J].內(nèi)燃機與配件,2016(10):6-7.
[10]趙琳.基于人臉識別的疲勞駕駛監(jiān)控方法研究[D].長春:長春工業(yè)大學,2015.
[11]徐歡.基于紅外視頻的駕駛員疲勞檢測研究[D].北京:中國計量學院,2013.
[12]于興玲,王民,張立材.基于 PERCLOS的駕駛員眼睛狀態(tài)檢測方法[J].汽車電子,2007,23(5):251-253.
作者簡介:
黃志超(2000-),男,廣東湛江人,大學本科,研究領域為計算機科學與技術。
趙紅梅(1979-),女,廣州增城人,碩士,高級講師,高級技師,研究領域為自動控制。
(編輯:刁少華)