?

基于嵌入式平臺人眼疲勞檢測終端的設計與實現

2017-01-19 14:26李春杰王春王全虎
現代電子技術 2016年24期

李春杰+王春+王全虎

摘 要: 設計并實現一套基于Android平臺的人眼疲勞檢測終端。從攝像頭中獲取駕駛員的臉部圖像數據,快速識別并定位到人臉部。再進行人眼部的定位,利用最大類間法Otsu對人眼進行目標提取以及Robert Cross邊緣檢測獲得人眼的輪廓,從而進行人眼狀態分析;利用PERCLOS原理進行疲勞的狀態判斷,并且借助開源視覺庫Android?OpenCV提高了系統的開發效率。在室內環境的實驗結果表明該終端的表現良好。

關鍵詞: 人眼疲勞檢測; 人眼狀態分析; 人臉定位; 人眼輪廓獲??; Android

中圖分類號: TN911.23?34; TP391 文獻標識碼: A 文章編號: 1004?373X(2016)24?0006?03

Design and implementation of human?eye fatigue detection terminal based on

Android platform

LI Chunjie, WANG Chun, WANG Quanhu

(School of Software Engineering of USTC, Suzhou 215123, China)

Abstract: A human?eye fatigue detection terminal based on Android platform was designed and implemented. It can acquire the driver′s face image data from the camera, recognize and locate quickly the face, and then locate the eyes. The Otsu is used to extract the human?eye target and the Robert Cross edge detection is used to acquire the outline of the human?eye to analyze the eye status. The PERCLOS principle is adopted to judge the fatigue status of human?eye. The development efficiency of the system is improved by means of the open?source vision library Android?OpenCV. The results of experiment in the indoor environment show that the terminal behaves well.

Keywords: human?eye fatigue detection; human?eye state analysis; face location; human?eye outline acquisition; Android

隨著汽車的不斷普及,交通事故也隨之增多,全球每年約有1 800萬人在交通事故中受傷或者喪生,經濟的損失更是高達千億美元計,交通安全事故極大地威脅著社會公眾的安全和財產。僅2011年,我國交通事故發生總數超過210 000起,共造成62 000多人死亡,統計表明,疲勞駕駛造成的交通事故占總數的8%左右,因此開發一套實時的駕駛員疲勞檢測系統具有深刻的社會意義和經濟價值。

1 系統方案設計

1.1 系統層次框圖

本文設計并實現的人眼疲勞檢測系統是基于Android操作系統,采用開源的Android?OpenCV庫進行的,其系統層次框圖如圖1所示。

1.2 疲勞判斷原理

PERCLOS(Percentage of Eyelid Closure Over the Pupil Time)指眼睛閉合時間占某一特定時間的百分比[1?4],其數據能真正估計出疲勞,是疲勞評估測定的最好方法之一,其包含三種評價標準[5?8]:P70,P80以及EM,其中又以P80標準最優[5,7?8],P80標準:當人眼部瞳孔面積閉合超過80%作為判定閉合的標準。其示意圖如圖2所示。

圖2中t1表示最大睜開到閉合20%所用的時間,t2表示最大睜開到閉合80%所用時間,t3表示最大睜開到睜開20%所用時間,t4表明最大睜開到睜開80%所用的時間。PERCLOS值的計算公式如下:

1.3 人眼狀態判斷

根據攝像頭采集的人臉部圖像進行實時處理,首先需要進行人臉部的檢測和定位;隨后將該區域設置成為感興趣區域進行人眼部的定位,根據圖像分割技術進行人眼的形狀分離,二值化處理主要是將目標從背景中分離出來,而邊緣檢測是為了檢測出圖像的邊緣信息,根據分離出的形狀判斷眼睛是否處于閉合狀態。該過程的示意過程如圖3所示。

1.4 系統實現流程圖

根據以上的分析,系統通過攝像頭采集圖像,對每一幀的圖像進行分析。其主要解決兩個問題:一是人眼的狀態判斷;二是疲勞的狀態判斷。當PERCLOS值大于固定的閾值時,系統發出預警提示。整個過程的實現流圖如圖4所示。

2 系統實現過程

2.1 預處理階段

在正常的駕駛條件下,由于諸多因素的影響,通過攝像頭采集的圖像可能包含噪聲或者由于分辨率、背景突變等原因對后續的圖像運算帶來干擾,為了消除這些影響,需要對圖像進行預處理:包含了去噪處理和直方圖均衡化。Android?OpenCV中對應的接口分別是:Imgproc.medianBlur(Mat src,Mat des,int ksize)以及Imgproc.equalizeHist(Mat src,Mat des)。

2.2 人眼的狀態判斷

系統的人眼狀態判斷實現包含了人臉檢測過程、人眼定位過程、人眼分離過程(二值化處理和邊緣檢測)。

2.2.1 人臉檢測

傳統的檢測人臉方法有很多種:基于膚色的分離、基于統計模型、PCA方法,但是這些方法識別的時間較長,并且準確率不高。在本文中,采用的是OpenCV中非常成功的基于Haar?Like特征的Adaboost算法。人臉檢測分成兩步:首先訓練過程產生分類器文件;再利用分類器進行人臉檢測過程[9]。訓練過程:準備正負樣本,正樣本是需要檢測的目標(正臉),負樣本是不含正樣本特征的任何目標;利用CreatSample程序準備正樣本集;利用Haar?Training程序訓練得到分類器特征XML文件。檢測過程:利用Android?OpenCV中的分類器構建函數去加載該特征XML文件,利用分類器本身的成員函數[9?10]:detectMultiScale(Mat image,List objects,double scaleFactor,int minNeighbors,int flags,Size minSize)對指定的image進行檢測。其函數各參數的意義為:Image,需要進行目標檢測的區域;Object,將檢測到的目標標記在矩形框中;scaleFactor,代表圖像的縮放因子;Minneighbors,指定每個候選矩陣至少包含的鄰近元素個數;Flag,標志位,默認為0;Minsize,最小的檢測窗口,如果該值設置過小,將會導致圖像的計算量較大。

2.2.2 人眼定位

同樣的,人臉的檢測和定位同樣采用該Adaboost算法,加載的分類器文件為自帶的haarcascade_mcs_eyepair_big.xml,其檢測的成功率達到95%以上。關于人臉和人眼的檢測效果圖如圖5所示。

2.2.3 基于Otsu的灰度二值化

當系統成功標記處人眼部的區域后,需要進行二值化處理,從而實現眼部提取。但是由于圖像的灰度值對光線很敏感,固定的閾值勢必無法滿足要求,本文采用的是基于Otsu算法的二值化處理。Otsu算法,又被稱為最大類間法,是一種自適應的圖像分割技術。它是根據最小二乘原理推導出來的,根據光線強度的不同,閾值會隨之變化,能得到最優的閾值[11]。其基本原理為:將直方圖在某一閾值分割成兩組,稱為“前景”和“背景”,當被分成的兩組的方差最大時,該閾值就是最佳分割閾值。方差是灰度均勻分布的一種度量,值越大說明構成圖像兩部分的差別越大,當部分“前景”錯分為“背景”或者“背景”錯分為“前景”時,都會導致方差變小,因此最大類間法意味著錯分的概率最小。對于圖像直方圖,不妨假設其灰度級為0~m,像素點個數為N,針對某一個分割閾值t,那么整個圖像被分割成兩部分,0~t稱為“前景”,而t+1~m稱為“背景”?!扒熬啊钡臋嘀貫閇Wf],均值設為[Mf],方差為[Df],“背景”的權重為[Wb],均值設為[Mb],方差為[Db]。圖像的整體的方差公式如下:

[D=Wf*Df+Wb*Db] (2)

Otsu的最終目的就是要求出D的最大值來,從而得到最優的分割閾值。

2.2.4 基于Robert Cross 的邊緣檢測

邊緣是圖像灰度值變化劇烈的位置,因此包含了大量的有用信息,常用的邊緣檢測包含很多,比如:Robert Cross邊緣檢測、Canny邊緣檢測、Prewitt邊緣檢測、Sobel檢測。但是這些方法中惟有Robert Cross計算方便簡單、快速,容易在實時系統中實現,本系統中采用的就是該檢測方法,根據任意一對互相垂直方向上像素點的差分來計算梯度的原理[12?13],采用對角線方向相鄰像素灰度差,如下:

式中:G是計算之后的灰度值;f是原始圖像的灰度值。雖然Robert檢測速度很快,但是其缺點也是很明顯的,對噪聲敏感,并且邊緣不是很光滑。當成功提取出邊緣輪廓之后,根據邊緣的最大垂直距離,進行眼睛的狀態判斷,多次試驗結果表明,該系統中當最大的垂直邊緣距離小于眼睛標記矩形區域高度的40%的時候,判斷是閉合狀態。對于眼睛的提取在不同光線下的效果圖如圖6~圖8所示。

2.3 疲勞狀態判斷

系統采用的是PERCLOS原理進行疲勞的判斷,當PERCLOS值大于40%之后將會進行疲勞判定,并且會進行預警提示。針對每一幀圖像的人眼邊緣信息,可以判斷出人眼的閉合狀態。本文中對幀狀態Ni的設置:當人眼處于閉合狀態時,Ni的值為1,睜開狀態Ni的值為0。因此PERCLOS的計算公式可以轉換為:

[PERCLOS=i=0NNiN] (4)

對連續的N=30幀進行檢測,當PERCLOS的值大于40%的時候表明駕駛員處于疲勞狀態,進行預警提示。

3 系統實驗

在實驗室的環境下,測試平臺為三星GT?9100G,邀請了同組的成員進行疲勞模擬,然后利用該系統進行疲勞檢測。一共進行了5組實驗,其中檢測出4組,未被檢測的那一組,原因在于其眼睛較小,張開和閉合的狀態不是很明顯,導致系統無法進行確切的識別。另外,還邀請2組同學帶著眼鏡進行測試,發現系統能有效地標記出人眼,但是由于眼鏡的部分邊框也被標記在了邊緣提取區域內,造成了邊緣的最大垂直距離較大,不能有效地判斷人眼狀態,對PERCLOS值的計算造成了影響。圖9和圖10是其中一個同學的實驗效果圖。

4 結 語

本文實現的基于Android平臺的人眼疲勞檢測終端,在實驗室的環境下表現良好,從實驗結果可以看出:系統能快速地定位到人臉和人眼,采用的是攝像頭進行圖像采集,能有效地避免和監測者的接觸,提高了監測系統的適用性,適合駕駛條件下的疲勞檢測。Otsu二值化方法和Robert Cross邊緣檢測相結合的人眼分割技術能有效地使系統不受光線強弱的變化,快速提取出人眼的形狀和邊緣分布,提高了PERCLOS值的計算精度。系統目前也同樣存在一些限制:實時性不是很好,目前僅能做到7 f/s的處理水平,因為嵌入式平臺本身的限制和開發環境本身的原因,以及各類算法優化程度不夠造成圖像的處理速度不夠;不能有效地排除眼鏡邊框造成的邊緣信息提取,需要進一步地提高眼睛的定位精度。這些都是后續要對系統進行改進的方向。

參考文獻

[1] 劉洪榛.基于機器視覺的疲勞駕駛檢測算法研究[D].廣州:華南理工大學,2012.

[2] 趙團.基于機器視覺的駕駛員疲勞檢測技術的研究與實現[D].遼寧:東北大學,2010.

[3] 焦波波.基于眼睛狀態的駕駛人疲勞檢測技術的研究[D].長沙:中南大學,2012.

[4] 倪小鵬.基于視覺的駕駛員疲勞狀態檢測方法研究[D].上海:華東理工大學,2012.

[5] 吳康華.基PERCLOS的駕駛疲勞檢測系統設計[D].杭州:浙江大學,2008.

[6] 夏芹,宋義偉,朱學峰.基于PERCLOS的駕駛疲勞監控方法進展[J].自動化技術與應用,2008,27(6):43?46.

[7] 郭永彩,李文濤,高潮.基于PERCLOS的駕駛員疲勞檢測算法[J].計算機系統應用,2009,18(8):54?57.

[8] 劉江偉.基于人眼檢測的駕駛員疲勞狀態識別技術[D].哈爾濱:哈爾濱工業大學,2008.

[9] 劉瑞禎.OpenCV教程?基礎版[M].北京:北京航天航空大學出版社,2007.

[10] 王宏彬,李燈熬,趙菊敏,等.利用OpenCV實現在Android系統下的人臉檢測[J].軟件工程與技術,2011,32(12):4?7.

[11] 曹亮.基于Otsu理論的圖像分割算法研究[D].武漢:武漢理工大學,2008.

[12] 趙芳,欒曉明,孫越.數字圖像幾種邊緣檢測算子檢測比較[J].自動化技術與應用,2009,28(3):68.

[13] 管宏蕊,丁輝.圖像邊緣檢測經典算法研究綜述[J].首都師范大學學報(自然科學版),2009(z1):66?69.

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合