周萬根 黃 雋
(江門職業技術學院,廣東 江門 529000)
疲勞駕駛作為影響駕駛安全的重要因素之一,已成為熱門研究課題。國內外對疲勞駕駛檢測的研究方法總體上可以分為兩大類:主觀檢測方法[1]和客觀檢測方法[2]。主觀檢測方法包括評價性檢測與生理反應檢測。然而,主觀方法存在自身的局限性,只能用于疲勞判定,難以用于汽車行駛環境。本文采用人臉識別分析人眼特征的疲勞檢測算法,適合于汽車行駛的場合,具有較高的便捷性、實用性和經濟性,可接受性強,并且檢測準確率高,因而具有較好的研究價值和社會價值。
如圖1 所示,在DSP 的硬件平臺,軟件利用OpenCV 提供的框架提取視頻文件,從視頻流循環中讀取圖像;對圖像做維度擴大,并進灰度化;提取幀圖像檢測人臉,用矩形框標注人臉,并對人臉圖像標識 68個關鍵特征點;將臉部位置特征信息轉換為數組格式,分別提取左右眼坐標,構造函數計算眼部特征EAR 值;根據EAR 值實時計算PERCLOS 值,再結合非疲勞時的EAR,兩者實時對比,即可判定為是否疲勞狀態,超過疲勞閾值則發出疲勞示警。

圖1 系統工作原理
采用DSP 芯片TMS320C6748 搭建圖像采集與處理的硬件系統,其中還有紅外CCD(DH-S10-1080P)、聲光預警電路和3.5 寸LCD 屏,組成了一套具備實時采集、處理、圖像顯示的系統。紅外攝像頭安裝在駕駛臺上前方,通過USB 把圖像傳輸給DSP,在夜晚也能采集駕駛員臉部圖像。硬件系統的組成如圖2所示,紅外攝像頭安裝在駕駛臺上前方,通過 USB 端口把圖像數據傳輸到DSP 芯片內部,在光線較差的夜晚也能較清楚的采集到駕駛員臉部的圖像信息。DSP 內部運行調用OpenCV 圖像識別開源庫,進行人臉識別,將采集的圖像顯示在3.5 寸的液晶屏上,其中可以根據參數設置選擇是直接顯示采集的圖像和帶有測試點的圖像信息,帶有測試點的顯示模式便于程序調試。SD 卡作為存儲元件,是保存駕駛員的人臉特征信息,尤其是精神飽滿時的特征值,以便于實時判別其疲勞狀態。

圖2 硬件系統結構
利用 OpenCV 讀寫視頻流,循環出圖像幀,初始化 DLIB 的人臉檢測器(HOG),然后創建面部標志物預測。引入并使用人臉識別算法應用中的開源檢測器工具dlib.get_frontal_face_detector 和 dlib.shape_predictor構建人臉位置檢測器[3],再獲取人臉特征關鍵點。對從視頻流中循環讀取出的幀圖像做維度擴大,并灰度化。使用 detector(gray,0)進行人臉位置檢測,使用predictor(gray,0)獲取人臉特征關鍵點的位置信息,參數gray 表示灰度圖。將獲取的信息轉換為array 數組格式。再使用 cv2.convexHull 獲取數組array 的凸包位置,畫出人臉輪廓位置,進行畫圖操作。使用 shape_predictor_68_face_landmarks.dat,可以得到 68 個特征點位置的坐標,其中人臉外輪庫的標記點的序號為0-16,共計17 點,右眉毛的特征點序號為17-21 共5 個點,左眉為22-25,鼻部的特征點的序號為27-35,右眼特征點序號36-41,左眼為42-47,48-67 均為嘴唇的特征點。這些特征點的坐標值就可以用于一些相關信息的計算,其中36-47 可以作為雙眼睜閉信息的識別。
根據已經得到的 68 個特征點位置的坐標,參照以上描述的人臉各個重點部位的特征點序號,右眼36-41或者左眼42-47 可獲得1 個眼長和2 個眼寬參數,以右眼為例眼長為36 與39 之間橫向差值,眼寬共有兩個,寬1 為37 與41 的縱向差值,寬2 為38 與40 的縱向差值,并計算眼睛長寬比EAR 值如式(1)所示:

用EAR 大小判定眼睛的睜閉狀態,還可以求得眼皮遮擋眼球率,用于計算一定時間內閉眼所占的比例值,即PERCLOS 值[4],從而進行疲勞判斷。如圖3 所示,圖中的t1為眼睛睜開最大程度至閉合眼度20%的時間,也稱為睜開程度80%的時間,t2是從最大睜開度到閉合度80%的時間,t3為從最大睜開度到閉合度100%,再到睜開度為20%的時間和,而t4則可以認為是整個閉眼動作的全周期的基礎上減去t1的值。

圖3 PERCLOS 原理圖
PERCLOS 疲勞檢測式通過計算人眼的睜開閉合程度,用來衡量疲勞的標準。PERCLOS 的具體概念為在規定的時間內人眼閉合某個程度的時間所占總時間的百分比,故有一個閾值用于判斷人眼是否閉合,對于這個閾值有三個標準,即P70、P80 和EM[5]等標準值。它們具體含義為:P70,遮擋眼球面積大于70%,判定為閉眼;P80,遮擋大于80%;EM,遮擋大于50%,即判定為閉眼。選擇任一標準,然后計算眼睛閉合時間比例。PERCLOS 的理論值f,需要計算時間值t1~t4,f 值的公式如式(2)所示:

在實際檢測中,時間的精準度難以保證,主控芯片需要實時讀取攝像頭的圖像數據,將圖像信息發送至液晶屏顯示,而且還需要運行OpenCV 庫代碼進行人臉識別,上述三個任務讓DSP 消費的時間很難精確到毫秒級甚至微秒級別,因此用直觀的時間概念來計算PERCLOS 的理論值f 有點不切實際,故采用檢測幀數的計數結果作為時間的參照替代參數,從而便有了PECLOS 實際值,或稱為PECLOS 近似值的計算,其計算方式以檢測幀數為參數進行描述,表示見式(3):

每次開啟系統,一般認為是駕駛員精神最佳狀態,此時人眼活動可以作為聚類學習的庫,采集3~5 分鐘的人眼信息后,進行聚類分析,可以得到眼睛的最大睜開特征值和固定眨眼頻率參數等,將其保存起來,再采集50 個眼睛睜開特征值,求得平均值作為疲勞判定閾值,就可以用于后續行駛過程中實時判斷駕駛員的疲勞狀態。
在室內自然光和黑暗無光環境均進行了測試,紅外攝像頭均可以采集到駕駛員的臉部圖像,在灰度顯示模式下,同一個駕駛員的臉部信息的采集受到外界光源的影響較小。在以DSP TMS320C6748 為主芯片的Analog Devices Visual DSP++平臺下,運行OpenCV 視頻流讀寫庫,能夠實時采集人臉信息,識別出人臉的68 個特征點,對于同一個駕駛員在疲勞和非疲勞狀態,在68 個特征點中的雙眼12 個特征點的相對位置變化較為頻繁,嘴部特征點也有一些細微變化,其他部位的36 個點均較為穩定,通過實時計算人眼的特征值,實現疲勞檢測的功能,并能發出警示聲光。實驗結果表明本系統能實現疲勞駕駛的檢測功能,能達到92%的準確率,檢測幀率普遍維持在24FPS 左右,完全滿足疲勞檢測對實時性的要求。
本文基于DSP 平臺,采用OpenCV 開源資源對駕駛人進行人臉識別,實現了實時疲勞告警的功能需求,因其設備便攜度高,可以廣泛應用于汽車出行。該系統具備良好的可維護性和可拓展性,經過進一步訓練與改進,能夠成為一個功能更加完備、人機交互更加舒適的疲勞駕駛檢測系統。