莫長(zhǎng)江 李俊宏 駱綺健 陳明波
摘要:針對(duì)系統(tǒng)對(duì)實(shí)時(shí)圖像處理的需求,本文提出了一種基于ZYNQ AP SoC的安全駕駛系統(tǒng)設(shè)計(jì)方案。本系統(tǒng)由ZYNQ架構(gòu)中的PL(FPGA)部分負(fù)責(zé)驅(qū)動(dòng)CMOS攝像頭,將采集的圖像進(jìn)行灰度轉(zhuǎn)換,傳給PS(ARM)部分運(yùn)行Adaboost算法,對(duì)圖像進(jìn)行人臉檢測(cè),從而獲取駕駛員的眼睛和嘴巴的坐標(biāo)值、面積值和張開度,并利用OpenCV的PERCLOS算法制定疲勞狀態(tài)標(biāo)準(zhǔn),給出預(yù)警信息。同時(shí),ARM通過(guò)USB驅(qū)動(dòng)攝像頭,實(shí)現(xiàn)行車記錄,并通過(guò)酒精濃度傳感器采集車內(nèi)酒精濃度,實(shí)現(xiàn)酒駕預(yù)警。通過(guò)實(shí)驗(yàn)表明,本系統(tǒng)性能穩(wěn)定,實(shí)現(xiàn)了保障安全駕駛的目的。
關(guān)鍵詞:ZYNQ AP SoC;OpenCV;疲勞檢測(cè);行車記錄
DIO:10.3969/j.issn.1005-5517.2017.2.011
引言
疲勞駕駛和酒駕是嚴(yán)重的交通違法行為,駕駛員疲勞行車時(shí),會(huì)造成反應(yīng)遲鈍、困倦、四肢無(wú)力,不能及時(shí)發(fā)現(xiàn)路面交通情況以采取準(zhǔn)確的駕駛操控措施,極易發(fā)生交通事故。據(jù)交通部統(tǒng)計(jì),2015年間,由于駕駛員疲勞駕駛導(dǎo)致的交通事故占總數(shù)的10.64%,在重特大交通事故中約占45%。在美國(guó),每年與疲勞駕駛相關(guān)的車禍奪去了15000人的生命。而酒后的駕駛員會(huì)出現(xiàn)視覺(jué)障礙、運(yùn)動(dòng)反射神經(jīng)遲鈍、判斷力降低。有數(shù)據(jù)顯示,在中國(guó),每年因酒駕導(dǎo)致的交通事故占40%-50%,可見(jiàn),車輛裝備具有疲勞檢測(cè)和酒駕提醒的安全駕駛系統(tǒng)的必要性。
1 硬件系統(tǒng)架構(gòu)及方案
基于ZYNQ AP SoC(ZYNQ All Prog rammable 50C)的安全駕駛系統(tǒng)的硬件系統(tǒng)如圖1所示,系統(tǒng)主要由高速CMOS圖像傳感器Ov7725、130萬(wàn)像素USB網(wǎng)絡(luò)攝像頭、Zynq-7000可擴(kuò)展處理芯片、數(shù)據(jù)存儲(chǔ)單元DDR3、HDMI顯示屏、酒精傳感器和喇叭等組成。Xilinx公司的Zynq-7000可擴(kuò)展處理芯片是整個(gè)系統(tǒng)的核心,其包含處理系統(tǒng)(ProcessingSystem,PS)和可編程邏輯(Prog rammable Logic,PL)兩部分,PS部分集成了最高頻率為667GHz的高性能雙核ARMCortex-A9處理器,而PL部分包含28nm工藝的FPGA(Field-Programmable Gate Array)邏輯單元和DSP資源。
PL端通過(guò)I2C協(xié)議驅(qū)動(dòng)Ov7725攝像頭,將攝像頭采集的圖像數(shù)據(jù)緩存于一個(gè)異步時(shí)鐘FIFO(First Input First Output)隊(duì)列中,而FIFO的寫時(shí)鐘由Ov7725攝像頭模塊提供,異步讀時(shí)鐘由VDMA Engine提供,并在讀過(guò)程進(jìn)行灰度圖轉(zhuǎn)換,后將數(shù)據(jù)讀入VDMA Engine。
PS端通過(guò)AMBA高速總線AXI_HP接口,驅(qū)動(dòng)DDR3控制器,并讀取一幀圖片數(shù)據(jù),并對(duì)圖片進(jìn)行臉部識(shí)別等圖像處理,得到人臉五官特征值。(3)PS端同時(shí)通過(guò)USB-Host總線對(duì)網(wǎng)絡(luò)攝像頭進(jìn)行配置,并得到圖像數(shù)據(jù),在Linux系統(tǒng)下將圖像通過(guò)H DM l顯示器顯示,并將圖像數(shù)據(jù)存儲(chǔ)到SD存儲(chǔ)卡中。(4)PS端在Linux系統(tǒng)下驅(qū)動(dòng)內(nèi)部集成的12位精度ADC轉(zhuǎn)換器,將酒精傳感器采集的模擬信號(hào)進(jìn)行數(shù)字轉(zhuǎn)換。
預(yù)警提示最終通過(guò)調(diào)用程序預(yù)設(shè)的語(yǔ)音組合,由H DM l接口輸出到帶功放或者音頻接口的HDMI顯示設(shè)備,達(dá)到提醒駕駛員的目的。
2 軟件系統(tǒng)設(shè)計(jì)
軟件系統(tǒng)架構(gòu)如圖2,采用Linaro系統(tǒng),其是在Linux系統(tǒng)基礎(chǔ)下,由ARM、飛思卡爾、IBM、samsung、ST-Ericsson及德州儀器(T1)等半導(dǎo)體廠商聯(lián)合為嵌入式SoC架構(gòu)平臺(tái)而設(shè)計(jì)的開源系統(tǒng)。其次,本系統(tǒng)使用開源的OpenCV(Open Source Computer Vision Library)進(jìn)行圖像的高級(jí)處理,并采用具有跨平臺(tái)優(yōu)勢(shì)、易擴(kuò)展的Qt圖形界面開發(fā)框架作為軟件APP的界面設(shè)計(jì)與產(chǎn)品封裝。如果說(shuō)系統(tǒng)硬件是骨架和軀體,那么軟件算法就是思想和靈魂。編寫程序之前,需要搭建好軟件開發(fā)環(huán)境,步驟如圖3。
3 疲勞檢測(cè)算法分析
本系統(tǒng)的疲勞檢測(cè)流程如圖4,系統(tǒng)啟動(dòng)后會(huì)對(duì)駕駛員的臉部信息進(jìn)行獲取,因?yàn)轳{駛員在圖像中的位置相對(duì)固定,通過(guò)基于Haar特征的AdaBoost級(jí)聯(lián)分類器,對(duì)駕駛員進(jìn)行人臉檢測(cè),得到駕駛員的臉坐標(biāo),并提取檢測(cè)的臉部作為ROI(region of interes),圖像繼續(xù)對(duì)人眼和嘴巴進(jìn)行定位,得到人眼和嘴巴的特征值圖像后,進(jìn)而進(jìn)行二值化處理,再經(jīng)過(guò)形態(tài)學(xué)濾波器,對(duì)二值化圖像先腐蝕后膨脹,消除小物體,在纖細(xì)點(diǎn)處分離物體,然后通過(guò)OpenCV里面的findcontours算子尋找并標(biāo)記輪廓,從而去除圖片中的噪聲和圖片邊緣無(wú)關(guān)物體,精確得到眼睛和嘴巴的輪廓,然后對(duì)該輪廓計(jì)算收斂的面積、高度和寬度。經(jīng)過(guò)上述步驟后,便得到了駕駛員的臉部五官坐標(biāo)之間的距離比例關(guān)系。之后,實(shí)時(shí)地對(duì)獲取攝像頭的圖像數(shù)據(jù),按照得到的臉部坐標(biāo)對(duì)圖像進(jìn)行分割,并進(jìn)行AdaBoost人臉識(shí)別處理,再根據(jù)初始化時(shí)得到的人眼坐標(biāo),進(jìn)一步分割圖像,提高運(yùn)算速度,進(jìn)行人眼識(shí)別,得到實(shí)時(shí)的人眼坐標(biāo),通過(guò)人臉五官的分布比例,定位到嘴巴,然后計(jì)算人眼和嘴巴的睜開度、打哈欠數(shù)、閉眼持續(xù)時(shí)間,根據(jù)PERCLOS算法制定的標(biāo)準(zhǔn),對(duì)駕駛員進(jìn)行疲勞提醒。
具體算法分析:
(1)本系統(tǒng)的臉部采集算法采用基于Haar特征的AdaBoost級(jí)聯(lián)分類器,其具有精度和速度較快的優(yōu)點(diǎn),在Ada Boost算法中,核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的弱分類器,然后聚合起來(lái),構(gòu)成強(qiáng)分類器。它根據(jù)每次訓(xùn)練集中的每個(gè)樣本進(jìn)行分類判決,以及上一次的總體分類的準(zhǔn)確度來(lái)決定每個(gè)樣本的權(quán)值,最后將每次訓(xùn)練得到的分類器融合起來(lái),作為最終的判決分類器,運(yùn)行在ARM嵌入式系統(tǒng)上,檢測(cè)速度較慢。而因?yàn)轳{駛位置相對(duì)固定,當(dāng)系統(tǒng)啟動(dòng)時(shí),通過(guò)detectMultiScale函數(shù)對(duì)駕駛員位置和臉部五官進(jìn)行初定位,這樣可以通過(guò)駕駛員坐標(biāo),分割圖像,降低分類器級(jí)數(shù),提高檢測(cè)速度。而且,駕駛員駕駛機(jī)動(dòng)時(shí)候,位置基本無(wú)變化,可采取隔2幀圖像檢測(cè)一次人臉位置,并更新的駕駛員位置坐標(biāo)值。另外,由于人臉五官在臉部中的位置分布是固定的,可采用初始化時(shí)得到的五官坐標(biāo)分布與五官之間的距離,提取檢測(cè)圖像的ROI部分,進(jìn)一步降低運(yùn)算量。部分程序如下:
pFaceCas->detectMultiScale(dstlmFulI,faceRectInit,1.1,2,0,Size(30,30));
pEyesCas->detectMultiScale(dstGlmeyes,eyeRectInit,1.1,4,0|CV_HAAR_SCALE_IMAGE,Size(5,5));
faceRectlnitV=ReCt(faceRectlnitVX,faceRectlnitVY,faceRectInitVW,faceRectlnitVH*6/5);
dstGImface=dstlmFull(faceRectlnitV);
檢測(cè)效果如圖5,檢測(cè)統(tǒng)計(jì)結(jié)果如表1。
(2)采用morphologyEx函數(shù),對(duì)識(shí)別提取的眼和嘴巴ROI圖像進(jìn)行開運(yùn)算形態(tài)學(xué)濾波。開運(yùn)算算法實(shí)際是對(duì)圖像先進(jìn)性腐蝕后膨脹,而形態(tài)學(xué)圖象處理表現(xiàn)為一種鄰域運(yùn)算形式,一種特殊定義的鄰域稱之為“結(jié)構(gòu)元素”(structure Element),它在每個(gè)像素位置上與二值圖象對(duì)應(yīng)的區(qū)域進(jìn)行特定的邏輯運(yùn)算,邏輯運(yùn)算的結(jié)果為輸出圖象的相應(yīng)像素。開運(yùn)算能達(dá)到消除小物體、在纖細(xì)點(diǎn)處分離物體、平滑較大物體的邊界的同時(shí)并不明顯改變其面積的效果,假設(shè)給定二值圖象B(x,y)和作為結(jié)構(gòu)元素的二值模板x(i,j)。
腐蝕運(yùn)算:
膨脹運(yùn)算:
開運(yùn)算:
開運(yùn)算效果如圖6。
(3)openCV里面的findcontou s算子能標(biāo)記并提取臉部五官輪廓,通過(guò)提取出來(lái)的輪廓,計(jì)算得到眼睛、嘴巴的最大逼近張開度,然后通過(guò)比較,可判斷出駕駛員的眼睛開閉狀態(tài)、打哈欠次數(shù)。處理效果如圖7,代碼實(shí)現(xiàn)如下:
4 行車記錄與酒精檢測(cè)
隨著道路上機(jī)動(dòng)車數(shù)量的增多,在開車的路上難免有小刮小碰,遇到撞車黨和碰瓷黨的事件常有發(fā)生,所以本系統(tǒng)集成有行車記錄儀功能,記錄每一個(gè)行車過(guò)程的細(xì)節(jié),維護(hù)司機(jī)的合法權(quán)益。如圖8,系統(tǒng)具有清除內(nèi)存、內(nèi)存剩余量、續(xù)航時(shí)間報(bào)時(shí)和回播功能。同時(shí),系統(tǒng)集成了12位精度的數(shù)模轉(zhuǎn)換器和酒精傳感器,實(shí)時(shí)對(duì)酒駕行為提出警報(bào)。
5 結(jié)論
本系統(tǒng)在ZYNQ ApSoC平臺(tái)下,集成疲勞檢測(cè)、行車記錄、酒駕判斷功能,對(duì)人臉檢測(cè)算法進(jìn)行了嵌入式架構(gòu)移植,對(duì)Ada Boost算法進(jìn)行了嵌入式優(yōu)化,利用ZYNQ的ARM+FPGA的架構(gòu)優(yōu)勢(shì),在(PL)FPGA端對(duì)圖像進(jìn)行了灰度轉(zhuǎn)換預(yù)處理,在PS(ARM)端,對(duì)來(lái)自PL端的圖像進(jìn)行了降噪和人臉檢測(cè)、人臉五官特征值提取。
本系統(tǒng)的運(yùn)行圖如圖9,通過(guò)實(shí)驗(yàn),參考表1,識(shí)別率較高,達(dá)到了預(yù)定的功能,適用于車輛防止交通事故的發(fā)生等一體化行車安全場(chǎng)景,加以完善,有廣泛的應(yīng)用前景。