董玉霞,蘇榮聰
(泉州信息工程學(xué)院 軟件學(xué)院,福建 泉州 352000)
隨著社會(huì)的不斷進(jìn)步和經(jīng)濟(jì)的繁榮發(fā)展,汽車已經(jīng)成為人們重要的交通工具,逐漸成為家庭的必需品[1].汽車在給人們提供便利出行條件的同時(shí),也面臨著交通安全問(wèn)題,汽車交通事故給人們的生命安全和財(cái)產(chǎn)安全造成了巨大威脅.疲勞駕駛是常見(jiàn)的汽車安全事故發(fā)生的起因,汽車駕駛員由于長(zhǎng)時(shí)間駕車行駛導(dǎo)致心理和生理到達(dá)了極限,造成機(jī)能失調(diào)從而導(dǎo)致操作技能下降等問(wèn)題,最終導(dǎo)致交通事故的發(fā)生[2].在汽車駕駛的過(guò)程中,駕駛員長(zhǎng)期獨(dú)自處于封閉的環(huán)境,容易產(chǎn)生疲憊心理,機(jī)械式的操作讓駕駛員容易感覺(jué)發(fā)困,在注意力分散的情況下,容易造成操控機(jī)能減弱,使汽車偏移正常軌道,非常容易導(dǎo)致交通事故的發(fā)生[3].但是疲勞駕駛不同于酒駕和超速駕駛,疲勞駕駛不容易被發(fā)現(xiàn),最終導(dǎo)致慘劇的發(fā)生,成為當(dāng)今道路交通安全的一個(gè)重大的交通隱患.
徐柱等[4]為了提高汽車在交通道路行駛的安全性,提出了一種基于人眼開(kāi)度特征的汽車疲勞駕駛檢測(cè)系統(tǒng),首先基于數(shù)據(jù)挖掘技術(shù)對(duì)汽車駕駛員的人臉特征和人眼特征進(jìn)行定位和采集,根據(jù)駕駛員行駛過(guò)程中的動(dòng)態(tài)拉伸人眼開(kāi)度特征,獲取人眼周圍的像素特征點(diǎn),實(shí)現(xiàn)對(duì)汽車駕駛員人眼開(kāi)度特征的采集,并通過(guò)行駛過(guò)程中駕駛員的人眼開(kāi)度特征與標(biāo)準(zhǔn)的人眼開(kāi)度信息進(jìn)行對(duì)比,通過(guò)駕駛員的眨眼頻率確定駕駛員的駕駛狀態(tài),對(duì)于疲勞駕駛的人員進(jìn)行及時(shí)預(yù)警,實(shí)驗(yàn)結(jié)果表明了該方法的實(shí)用性,但是無(wú)法準(zhǔn)確檢測(cè)出疲勞駕駛的人員.李照等[5]針對(duì)汽車疲勞駕駛問(wèn)題,提出了一種基于數(shù)字處理信號(hào)DSP的疲勞駕駛檢測(cè)系統(tǒng),該系統(tǒng)通過(guò)搭載TMS320紅外光源,結(jié)合處理模型對(duì)駕駛員的疲勞程度進(jìn)行實(shí)時(shí)檢測(cè),并根據(jù)數(shù)據(jù)挖掘技術(shù)對(duì)采集的駕駛員錄像進(jìn)行甄別,利用浮點(diǎn)代碼對(duì)不滿足駕駛標(biāo)準(zhǔn)的駕駛圖像預(yù)警,經(jīng)過(guò)大量反復(fù)實(shí)驗(yàn),驗(yàn)證了該系統(tǒng)可以在任何環(huán)境下采集駕駛員的駕駛狀態(tài),但是實(shí)時(shí)性較差,無(wú)法廣泛應(yīng)用于汽車駕駛過(guò)程中.
基于以上研究背景,本文利用OpenCV編程函數(shù)庫(kù),設(shè)計(jì)了駕駛員實(shí)時(shí)疲勞檢測(cè)系統(tǒng),從而提高系統(tǒng)的功能和性能.
實(shí)時(shí)疲勞檢測(cè)系統(tǒng)主要是通過(guò)傳感器對(duì)駕駛員狀態(tài)進(jìn)行采集,并利用固定的參數(shù)對(duì)處理器進(jìn)行運(yùn)算處理[6],最后通過(guò)計(jì)算結(jié)果判斷駕駛員是否疲勞駕駛.用搭載語(yǔ)音驅(qū)動(dòng)模塊和駕駛員進(jìn)行實(shí)時(shí)互動(dòng),對(duì)疲勞駕駛?cè)藛T進(jìn)行預(yù)警信息提示,實(shí)現(xiàn)對(duì)駕駛員實(shí)時(shí)疲勞檢測(cè).實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的硬件結(jié)構(gòu)如下圖1所示.
圖1 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的硬件架構(gòu)圖
實(shí)時(shí)疲勞檢測(cè)系統(tǒng)硬件架構(gòu)中的核心處理器,由主控電路STM34H723構(gòu)成,并通過(guò)攝像頭OV12544進(jìn)行駕駛員狀態(tài)采集,核心處理電路采用64位的ADM內(nèi)核對(duì)駕駛員駕駛圖像進(jìn)行處理.將薄膜壓力傳感器附著在方向盤(pán)上,實(shí)時(shí)對(duì)駕駛員的握力進(jìn)行檢測(cè),再根據(jù)相關(guān)軟件進(jìn)行計(jì)算,并通過(guò)測(cè)量汽車的百公里速度判斷是否存在疲勞駕駛狀態(tài).
實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的對(duì)外通信模塊主要采用NB-LOT模塊,通過(guò)該模塊與硬件電路的連接實(shí)現(xiàn)駕駛員實(shí)時(shí)駕駛狀態(tài)信息的遠(yuǎn)端同步,有利于及時(shí)進(jìn)行數(shù)據(jù)處理.
實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的語(yǔ)音交互主要通過(guò)集成電路實(shí)現(xiàn)的.LD3325電路與主電路相連實(shí)現(xiàn)駕駛員語(yǔ)音提醒工程,并通過(guò)識(shí)別模塊對(duì)語(yǔ)音信號(hào)進(jìn)行及時(shí)處理,從而確定駕駛員是否接收到相關(guān)信息.
圖像傳感器的選擇在實(shí)時(shí)疲勞檢測(cè)系統(tǒng)中是非常重要的環(huán)節(jié),因?yàn)閳D像傳感器的分辨率直接影響實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的最終結(jié)果[7],經(jīng)過(guò)多種考慮,本文選擇PO3030K圖像傳感器作為系統(tǒng)的圖像傳感器,其引腳功能如表1所示.
表1 PO3030K圖像傳感器的引腳功能
PO3030K圖像傳感器的結(jié)構(gòu)如圖2所示,該圖像傳感器主要由1080×1080的像素列陣構(gòu)成,用于駕駛員駕駛過(guò)程中面部圖像的采集.PO3030K圖像傳感器的引腳功能主要用于復(fù)位電位[8],減少噪音對(duì)實(shí)時(shí)疲勞檢測(cè)系統(tǒng)準(zhǔn)確度的影響,然后通過(guò)固定采集信號(hào),在不同光線條件下對(duì)駕駛員的狀態(tài)進(jìn)行采集.
圖2 圖像傳感器的結(jié)構(gòu)圖
PO3030K圖像傳感器的主要功能是通過(guò)編程實(shí)現(xiàn)的,通過(guò)I2C與總線接口相連,即可實(shí)現(xiàn)對(duì)于寄存器的修改.I2C總線是構(gòu)成圖像傳感器的核心部分,主要用于數(shù)據(jù)的分析與處理[9],可以處理攝像頭拍攝的駕駛員面部表情,并對(duì)采集的圖像進(jìn)行處理,將結(jié)果分配到相關(guān)的電路模塊上.在信息傳輸過(guò)程中,I2C總線上的每一塊傳感器模塊都是接收器,并通過(guò)控制電路實(shí)現(xiàn)對(duì)控制量類別和大小的調(diào)整.
駕駛員實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的攝像頭電路如圖3所示.
圖3 攝像頭接口電路圖
攝像頭電路設(shè)計(jì)的過(guò)程中芯片主要采用SCCB接片設(shè)計(jì)原理,利用八位的電源接口將FIFO的各個(gè)攝像頭接觸與控制解控相連[10],根據(jù)合適的汽車選擇相應(yīng)的攝像頭,并使用編程程序結(jié)合SCCB協(xié)議完成實(shí)時(shí)疲勞檢測(cè)系統(tǒng)中攝像頭電路的設(shè)計(jì).
通過(guò)內(nèi)置攝像頭拍攝的駕駛員駕駛狀態(tài)圖像,可以確定駕駛員面部初始狀態(tài).假設(shè)駕駛員的面部圖像內(nèi)含有n個(gè)像素,并用{ai},i=1,…,n表示其所在的位置,那么對(duì)于駕駛員面部圖像進(jìn)行劃分[11],得到m個(gè)相等的像素圖,則駕駛員面部圖像的目標(biāo)模型概率分布為
(1)
在第t幀時(shí),以t-1幀駕駛員面部圖像的位置f0為中心,得到候選駕駛員面部位置坐標(biāo)f的位置,獲取駕駛員面部跟蹤直方圖,面部圖像區(qū)域內(nèi)的像素用{ai},i=1,…,n表示,則駕駛員面部圖像候選模型的概率密度為
(2)
其中,ξ為目標(biāo)函數(shù)的大小.
利用相似函數(shù),確定駕駛員面部圖像的目標(biāo)模型與候選模型之間的關(guān)系[12],公式為
(3)
經(jīng)過(guò)上述過(guò)程,確定了駕駛員面部圖像每個(gè)像素點(diǎn)的位置,如此重復(fù),完成對(duì)駕駛員面部圖像的跟蹤.
基于OpenCV設(shè)計(jì)駕駛員瞳孔識(shí)別程序進(jìn)行軟件編程,將瞳孔識(shí)別程序應(yīng)用在OpenCV的固定模塊上[13],實(shí)現(xiàn)對(duì)駕駛員瞳孔的識(shí)別.基于OpenCV設(shè)計(jì)駕駛員瞳孔識(shí)別程序如下圖4所示.
圖4 駕駛員瞳孔識(shí)別程序
Step1 內(nèi)置攝像頭初始化.對(duì)駕駛員瞳孔識(shí)別前,對(duì)駕駛室內(nèi)的內(nèi)置攝像頭進(jìn)行重置[14],使其滿足車內(nèi)拍攝條件;
Step2 設(shè)置拍攝的分辨率.將內(nèi)置攝像頭的分辨率調(diào)至最佳,使其分辨率為1080×1080使拍攝圖像達(dá)到最優(yōu)化;
Step3 圖像的拍攝.內(nèi)置攝像頭調(diào)試完畢后,可以進(jìn)行初始化處理[15],完成拍攝工作;
Step4 圖像處理.對(duì)拍攝完的駕駛員瞳孔圖像進(jìn)行灰度處理,得到最終所需的灰度處理圖;
Step5 OpenCV計(jì)算.根據(jù)數(shù)據(jù)挖掘處理技術(shù)對(duì)處理完的灰度處理圖進(jìn)行二進(jìn)制處理;
Step6 駕駛員瞳孔識(shí)別.通過(guò)上一步數(shù)據(jù)挖掘處理技術(shù)的處理后,用haar算子對(duì)駕駛員的瞳孔圖像進(jìn)行識(shí)別,識(shí)別后的駕駛員瞳孔灰度圖的規(guī)格和大小分別設(shè)置為(x,y,w,h),即得到駕駛員瞳孔識(shí)別結(jié)果所在的坐標(biāo)系,如果識(shí)別失敗返回空白的單元組;
Step7 對(duì)駕駛員瞳孔進(jìn)行定位.通過(guò)上述識(shí)別后的駕駛員瞳孔的元組(x,y,w,h)對(duì)駕駛員瞳孔進(jìn)行定位,定位完成后可確定駕駛員的駕駛狀態(tài).
基于OpenCV的駕駛員瞳孔識(shí)別流程根據(jù)瞳孔的具體位置可以獲取最終的識(shí)別結(jié)果,如果識(shí)別過(guò)程中不存在空元組說(shuō)明識(shí)別完成,如果存在空元組說(shuō)明識(shí)別失敗,需要重新進(jìn)行識(shí)別.通過(guò)駕駛員瞳孔識(shí)別程序可確定駕駛員的眨眼頻率,如果駕駛員的眨眼狀態(tài)處于非正常范圍內(nèi),說(shuō)明駕駛員處于疲勞狀態(tài).
利用OpenCV編程函數(shù)庫(kù)設(shè)計(jì)了駕駛員實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的硬件和軟件之后,需要結(jié)合系統(tǒng)測(cè)試,驗(yàn)證系統(tǒng)的軟硬件配置是否符合預(yù)期設(shè)計(jì)要求.
汽車駕駛員實(shí)時(shí)疲勞檢測(cè)系統(tǒng)測(cè)試平臺(tái)是以O(shè)penCV編程函數(shù)庫(kù)為開(kāi)發(fā)平臺(tái),采用CB770攝像頭采集駕駛員的面部圖像,利用C_PLR接口與顯示器連接,將圖像采集結(jié)果顯示在界面中,音頻接口與揚(yáng)聲器連接在一起,實(shí)現(xiàn)音頻報(bào)警功能,實(shí)時(shí)疲勞檢測(cè)系統(tǒng)是以PM_9352NL芯片為處理核心,對(duì)駕駛員的圖像進(jìn)行采集、疲勞時(shí)的視覺(jué)提醒以及音頻報(bào)警.
基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)在測(cè)試過(guò)程中,相關(guān)的實(shí)驗(yàn)參數(shù)設(shè)置如下.Windows 7操作系統(tǒng);4.0GB的內(nèi)存環(huán)境;W90_E800 6.4GHz的中央處理器;編程環(huán)境選擇Visual C++ 5.0 .
在測(cè)試駕駛員的眨眼頻率時(shí),需要駕駛員長(zhǎng)時(shí)間駕駛汽車,但是由于駕駛員長(zhǎng)時(shí)間駕駛存在一定危險(xiǎn)性,因此本文采用主動(dòng)控制駕駛員眨眼頻率的方式進(jìn)行測(cè)試,測(cè)試時(shí)間點(diǎn)分別選擇高亮度環(huán)境的12∶00,中等亮度環(huán)境的17∶00和低亮度環(huán)境的20∶00,采用手動(dòng)記錄的方式,記錄駕駛員的眨眼次數(shù),并利用基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)計(jì)算出駕駛員的眨眼頻率,從計(jì)算結(jié)果中抽取部分典型數(shù)據(jù),結(jié)果如表2所示.
從表2的結(jié)果可以看出,采用基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)對(duì)駕駛員的眨眼頻率進(jìn)行測(cè)試時(shí),影響駕駛員眨眼頻率的因素有兩個(gè),其一是駕駛員眨眼頻率的快慢,當(dāng)駕駛員的眨眼頻率比較快時(shí),可能是由于瞳孔識(shí)別程序正在處理其他識(shí)別任務(wù),錯(cuò)過(guò)了駕駛員閉眼動(dòng)作的識(shí)別,駕駛員的眨眼頻率變快,說(shuō)明閉眼的時(shí)間變短了,但是當(dāng)駕駛員的眨眼頻率低于40次/min時(shí),基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的準(zhǔn)確率可以達(dá)到97.5%;其二是測(cè)試環(huán)境亮度對(duì)基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)測(cè)量精度的影響,當(dāng)駕駛員的眨眼頻率相同時(shí),隨著測(cè)試環(huán)境亮度逐漸變亮,基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)對(duì)駕駛員眨眼頻率的檢測(cè)誤差越來(lái)越小,但是駕駛員眨眼頻率的檢測(cè)準(zhǔn)確率可以達(dá)到96.5%以上.
表2 駕駛員眨眼頻率測(cè)試結(jié)果
表2的結(jié)果表明,基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)在測(cè)試過(guò)程中,雖然檢測(cè)準(zhǔn)確率會(huì)受到駕駛員眨眼頻率和測(cè)試環(huán)境亮度的影響,但是仍然可以滿足系統(tǒng)的設(shè)計(jì)要求.
在測(cè)試駕駛員的打哈欠頻率時(shí),不同的亮度條件下駕駛員的打哈欠頻率也存在一定差異,本文選取不同亮度環(huán)境下進(jìn)行測(cè)試,實(shí)驗(yàn)條件與3.3相同,打哈欠頻率測(cè)試結(jié)果如表3所示.
從表3的結(jié)果可以看出,采用基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)對(duì)駕駛員的打哈欠頻率進(jìn)行測(cè)試時(shí),發(fā)現(xiàn)打哈欠頻率的快慢和環(huán)境中的亮度是影響駕駛員打哈欠頻率的兩個(gè)主要因素,如果駕駛員在駕駛過(guò)程中的打哈欠頻率越來(lái)越快,可能是由于圖像傳感器和駕駛員面部圖像跟蹤算法正在處理其他圖像的識(shí)別任務(wù),錯(cuò)過(guò)了駕駛員打哈欠動(dòng)作的識(shí)別,駕駛員的打哈欠頻率變快,說(shuō)明打哈欠的時(shí)間變短了,但是當(dāng)駕駛員的打哈欠頻率低于8次/min時(shí),基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的準(zhǔn)確率可以達(dá)到97%;在測(cè)試環(huán)境亮度對(duì)基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)測(cè)量精度的影響中,當(dāng)駕駛員的打哈欠頻率相同時(shí),隨著測(cè)試環(huán)境亮度逐漸變亮,基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)對(duì)駕駛員打哈欠頻率的檢測(cè)誤差越來(lái)越小,但是駕駛員打哈欠頻率的檢測(cè)準(zhǔn)確率可以達(dá)到97.3%以上.
表3 駕駛員的打哈欠頻率測(cè)試結(jié)果
表3的結(jié)果表明,采用基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)在測(cè)試過(guò)程中,雖然打哈欠頻率檢測(cè)準(zhǔn)確率會(huì)受到駕駛員打哈欠頻率和測(cè)試環(huán)境中亮度因素的影響,但是仍然可以滿足系統(tǒng)的設(shè)計(jì)要求.
將文獻(xiàn)[4]系統(tǒng)和文獻(xiàn)[5]系統(tǒng)以及本文系統(tǒng)作為實(shí)驗(yàn)對(duì)比系統(tǒng),以此對(duì)比不同系統(tǒng)對(duì)于疲勞檢測(cè)時(shí)間來(lái)驗(yàn)證不同方法的檢測(cè)效率.疲勞檢測(cè)時(shí)間對(duì)比結(jié)果如圖5所示.
圖5 三種系統(tǒng)疲勞檢測(cè)時(shí)間對(duì)比
由圖5中的數(shù)據(jù)可知,本文系統(tǒng)的疲勞檢測(cè)時(shí)間始終在0.7s以下,而文獻(xiàn)[4]系統(tǒng)的疲勞檢測(cè)時(shí)間在1.2 s~1.7%,而文獻(xiàn)[5]系統(tǒng)的疲勞檢測(cè)時(shí)間在1.8%~2.6%,遠(yuǎn)高于本文系統(tǒng),所以說(shuō)明了本文系統(tǒng)可以快速檢測(cè)出疲勞駕駛問(wèn)題,實(shí)際應(yīng)用效果好.
將文獻(xiàn)[4]系統(tǒng)和文獻(xiàn)[5]系統(tǒng)以及本文系統(tǒng)作為實(shí)驗(yàn)對(duì)比系統(tǒng),以此對(duì)比不同系統(tǒng)對(duì)于疲勞檢測(cè)正確率.疲勞檢測(cè)正確率是指正確檢測(cè)出的疲勞事件量占疲勞駕駛事件總量的比率,對(duì)比結(jié)果如圖6所示.
圖6 三種系統(tǒng)檢測(cè)時(shí)間對(duì)比
由圖6中的數(shù)據(jù)可知,本文系統(tǒng)的疲勞檢測(cè)正確率始終在95%以上,而文獻(xiàn)[4]系統(tǒng)的疲勞檢測(cè)正確率在55%~81%,而文獻(xiàn)[5]系統(tǒng)的疲勞檢測(cè)正確率在53%~82%,遠(yuǎn)低于本文系統(tǒng),所以說(shuō)明了本文系統(tǒng)可以正確檢測(cè)出疲勞駕駛問(wèn)題,實(shí)際應(yīng)用效果更好.
本文提出了基于OpenCV 實(shí)時(shí)疲勞檢測(cè)系統(tǒng)的研究,經(jīng)過(guò)測(cè)試發(fā)現(xiàn),該系統(tǒng)在駕駛員疲勞檢測(cè)中,可以準(zhǔn)確判斷駕駛員是否處于疲勞駕駛狀態(tài).但是本文的研究還存在很多不足,在今后的研究中,希望可以進(jìn)一步優(yōu)化駕駛員佩戴眼鏡對(duì)系統(tǒng)的檢測(cè)干擾,增強(qiáng)系統(tǒng)的適用性.