浙江大學城市學院信息與電子工程系 尚麗娜 石晴瑤 方 健
引言:個人駕駛出行所具備的高自由度以及私家車的大范圍普及給人們提供了便利的同時也帶來了很多安全隱患。車輛駕駛者特別是長途貨運司機和客運司機若是沒有得到良好且充沛的休息時間,就很有可能會引發疲勞駕駛。而在公路尤其是高速公路上駕駛員必須時時刻刻保持警惕清醒的駕駛狀態,一恍惚的走神都有可能引發交通事故從而造成嚴重的后果甚至危及人命,與此相比疲勞駕駛更是可怕。人處在疲勞狀態中是不會有平時那么快的反應時間和平時那么敏捷的反應能力的,在車來車往的馬路上這種狀態更是可能造成嚴重的交通事故,且根據相關統計,疲勞駕駛所引發的交通事故的數量占事故總數的一大部分,而在日常生活中因疲勞而導致的工作效率降低以及不必要的麻煩也十分常見。而疲勞駕駛以及各項因疲勞狀態而導致的事故所發生的大部分原因是參與者并未意識到自己已經身處疲勞狀態,所以在意識到自己已處于疲勞狀態之前及時讓自己得到提醒可以讓許多因疲勞而帶來的后果避免發生,從而大大降低各種因疲勞而導致的事故發生。基于此種現狀,設計了疲勞檢測系統,可以對被測者進行疲勞程度檢測,并進行相應提醒,從而避免很多事故的發生。

圖1 設計流程框圖
人眼檢測率離不開人眼檢測算法和多次定時獲取當前幀圖像的操作,這一切又都是以圖像數據的獲取作為前提的。該人眼檢測及疲勞檢測系統的主要流程劃分為六個,分別是“獲取圖像”部分,“人臉檢測”部分,“人眼區域計算”部分,“人眼檢測”部分,“單位時間人眼檢測率計算”部分以及“結果判定”部分,如圖1所示。
單單使用現成的人眼檢測算法會帶來很大的誤判率,既影響成果的使用效率,也影響結果的正確率。先進行人臉檢測后再通過坐標的方式進行區域劃分和人眼長度與寬度的預測來確定人眼區域,使用這種方式大大提高了人臉人眼檢測的準確率和效率。
在開始疲勞檢測之前需要先打開攝像頭來完成圖像數據的采集或是使用按鈕打開圖片獲取圖像,完成圖像數據采集之后需要完成圖像數據的傳輸,接下來使用已有的人臉檢測算法來檢測出人臉的所在位置,之后再通過對人臉長度人臉寬度進行計算來完成坐標的設置,再以程序編寫的形式實現人臉上人眼區域的位置預估及大小計算,并在通過預測計算得出的區域進行人眼檢測,從而提高人眼檢測的工作效率以及減少誤判概率。因為人處于疲勞狀態時人眼的張開力度會出現明顯的減小,現成的人眼檢測算法在人眼張開力度較小時檢測不到人眼,所以可以將單位時間內的人眼檢測率數值作為疲勞判斷的重要依據。同時檢測到人眼后以人眼的張開的寬敞比例進行人物疲勞程度的再次判斷。

圖2 級聯分類器
本系統中的人臉檢測使用Adaboost級聯分類器。haar分類器的結構如下。
Haar分類器 = Haar-like特征+積分圖方法+Adaboost+級聯

圖3 程序對話框界面

圖4 測試結果1

圖5 測試結果2
Haar分類器由Haar-like特征加積分圖加Adaboost再加級聯構成,具體強分類器的方式如下。

haar分類器可由多個強分類器進行級聯組合,級聯分類器圖像如圖2所示。
圖像數據的預先處理過程主要包括了“灰度化cvtColor”處理和“直方圖均衡化EqualizeHist”處理;因為在對物體的識別過程中,識別的關鍵就是對物體邊緣的認識程度,而影響對物體邊緣認知程度的本質在于梯度,可是計算梯度時所要求的處理對象必須是灰度圖,所以在進行檢測之前先對圖像進行灰度化處理是不可少的預備工作。經過這些處理之后再進行人臉檢測,可以獲得不錯的檢測效果。
圖像預處理的部分代碼實現如下所示。

因為直接采用現成的人眼檢測算法進行人眼檢測會因為檢測區域較大的因素而存在不小的誤判率,與此同時檢測效率也較低,會導致整個程序的響應變慢。而在進行人眼檢測模塊之前,先利用已經訓練好的結果進行人臉的檢測,再通過對人眼位置的預測而進行人眼區域的劃分,最后再在劃分出來的人眼區域內通過現成訓練好的XML文件進行人眼檢測。因此,在正式進行人眼檢測的工作前先進行人眼區域的預測劃分是具有實用特質的。
通過對人臉的長度采集以及人臉寬度采集,并對采集到的數據加以數據運算,可以得到人眼區域的大致位置以及區域大小。同時實現對人左眼位置和右眼位置的分別預測,在完成人眼區域的預測之后再針對預測出來的區域進行人眼檢測可以在很大程度上提高人眼檢測的準確率,并且在此同時可以大大提高工作效率,為實時輸出判斷結果打下基礎。
被測者在比較疲勞的時候,眼睛會張開比較小,甚至有可能偶爾閉上,這種情況下,用已有的人眼檢測算法不能檢測到人眼,所以可以通過最終能否檢測出人眼來判斷是否疲勞。在此基礎上再次在檢測到人眼后通過人眼的長寬比例來判定人物的疲勞程度。
為了實現實時輸出,需要先獲取當前的時間,函數GetTime()可以幫助我們實現這一功能,主要代碼如下。

系統最終實現的運行對話框界面如圖3所示。
人臉及人眼的區域在左側,通過矩形框了出來,在眼睛正常張開的情況下,檢測結果區(在后側)快速地輸出了檢測時間及檢測結果偏精神的結論,如圖4所示。
被測者減小了眼睛的張開力度,顯示出疲勞狀態,檢測結果變為偏疲勞,如圖5所示。
在被測者戴眼鏡和不戴眼鏡的不同情況下,該程序都能檢測出被測者的疲勞程度。
本系統能夠快速進行人眼區域劃分及疲勞判斷,并且檢測結果區迅速輸出檢測結果;在是否佩戴眼鏡的兩種情況下都能保持較為良好的工作效率和準確率。
經過測試,該程序性能穩定,效果良好。