賈高祥,劉宇,祁蓁倬,陳紫涵,劉維紅
(西安郵電大學(xué)電子工程學(xué)院,陜西西安 710121)
隨著我國(guó)經(jīng)濟(jì)實(shí)力的不斷增強(qiáng),我國(guó)汽車保有量飛速增加,交通安全問題已經(jīng)成為了我國(guó)的社會(huì)熱點(diǎn)問題[1]。經(jīng)過大量的研究表明,在導(dǎo)致交通事故的原因中,占比最大的是疲勞駕駛[2]。因此,當(dāng)前駕駛行業(yè)亟需一種疲勞駕駛檢測(cè)技術(shù),當(dāng)駕駛員出現(xiàn)疲勞駕駛狀況時(shí)可以有效地向駕駛?cè)藛T預(yù)警并提供一定的輔助駕駛功能,應(yīng)用該技術(shù)將會(huì)大大減少交通事故發(fā)生的次數(shù)[3]。
目前實(shí)現(xiàn)算法優(yōu)化和加速的主流硬件平臺(tái)有三種:1)專用集成電路(Application-Specific Integrated Circuit,ASIC),雖然其具有高性能的特點(diǎn),但其制造成本高且只支持設(shè)計(jì)時(shí)設(shè)想的功能集,不能進(jìn)行現(xiàn)場(chǎng)升級(jí);2)圖形處理器(Graphics Processing Unit,GPU),其靈活且易于設(shè)計(jì),但因?yàn)闀r(shí)鐘頻率難以提升,并且因?yàn)槠滹@著的功耗使其難以集成到功耗受限的嵌入式平臺(tái);3)現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,FPGA),具有高性能低功耗和高靈活性的特點(diǎn),其設(shè)計(jì)周期短,成本相對(duì)ASIC較低,近年來在高速圖像處理領(lǐng)域得到了廣泛的應(yīng)用。基于以上分析,該設(shè)計(jì)采用基于FPGA 的硬件加速器方案來實(shí)現(xiàn)疲勞檢測(cè)技術(shù),通過并行處理優(yōu)勢(shì),使得疲勞檢測(cè)及預(yù)警更快更穩(wěn)定[4]。
系統(tǒng)方案設(shè)計(jì)框圖如圖1 所示,由豪威7725(OmniVision7725,OV7725)配置模塊、視頻流處理模塊、紅綠藍(lán)(Red Green Blue,RGB)轉(zhuǎn)亮藍(lán)紅(Luminance Chrominance Blue Chrominance Red,YCbCr)模塊、人臉識(shí)別算法模塊、疲勞檢測(cè)算法模塊組成。

圖1 系統(tǒng)方案設(shè)計(jì)框圖
各模塊的功能介紹如下。OV7725 配置模塊:將OV7725 攝像頭所需的參數(shù)通過集成電路總線(Inter-Integrated Circuit,IIC)配置進(jìn)OV7725 攝像頭內(nèi)部的寄存器,以驅(qū)動(dòng)OV7725 攝像頭實(shí)時(shí)采集視頻流數(shù)據(jù);視頻流處理模塊:先把RGB565 格式轉(zhuǎn)成視頻圖形陣列(Video Graphics Array,VGA)顯示所需的RGB444 格式,再將一幀圖像放進(jìn)塊隨機(jī)存取存儲(chǔ)器(Block Random Access Memory,BRAM)中緩存,然后將取出的RGB 數(shù)據(jù)轉(zhuǎn)成四位的R、G、B 數(shù)據(jù);RGB 轉(zhuǎn)YCbCr 模塊:把RGB 色彩數(shù)據(jù)格式轉(zhuǎn)為YCbCr 色彩數(shù)據(jù)格式,以便進(jìn)行膚色判斷;人臉識(shí)別算法模塊:在人臉識(shí)別模塊中完成二值化、濾波、人臉邊界搜索和人臉特征標(biāo)識(shí),把膚色閾值內(nèi)的部分變?yōu)榘咨⑦M(jìn)行三次濾波以消除噪聲,搜索人臉區(qū)域邊界,進(jìn)行人臉特征的標(biāo)識(shí);疲勞檢測(cè)算法模塊:通過人臉特征值觸發(fā)門限閾值的累計(jì)時(shí)長(zhǎng)來判斷疲勞的級(jí)別,以及控制疲勞檢測(cè)模式的進(jìn)入及退出。根據(jù)疲勞級(jí)別給出三級(jí)輔助駕駛策略,最終完成疲勞檢測(cè)硬件加速器的設(shè)計(jì)。
OV7725 的工作模式需要通過IIC 總線完成其內(nèi)部寄存器的配置[5]。在配置過程中,關(guān)鍵的兩個(gè)寄存器包括時(shí)鐘寄存器和用于設(shè)置RGB565 傳輸格式的寄存器,它們的地址分別為0x3100 和0x3206[6]。
一旦OV7725 成功配置為RGB565 模式,它將以該顏色格式工作,并將RGB565 格式的像素?cái)?shù)據(jù)按照選定的VGA幀率發(fā)送[7]。
為了將OV7725輸出的RGB565格式像素?cái)?shù)據(jù)轉(zhuǎn)換為VGA 顯示器所需的RGB444格式,首先需要將一幀圖像的像素?cái)?shù)據(jù)連續(xù)存儲(chǔ)到BRAM 中進(jìn)行緩存。然后從BRAM 中取出緩存的數(shù)據(jù),并將其轉(zhuǎn)換為3 個(gè)通道,每個(gè)通道包含4位的R、G、B 數(shù)據(jù)。同時(shí)需要產(chǎn)生適用于640×480分辨率的場(chǎng)同步和行同步信號(hào)[8]。
具體到同步信號(hào)的生成,本設(shè)計(jì)使用行計(jì)數(shù)器和場(chǎng)計(jì)數(shù)器來控制。行計(jì)數(shù)器的模設(shè)置為800,意味著每當(dāng)行計(jì)數(shù)器值達(dá)到799 時(shí),它將清零,并觸發(fā)場(chǎng)計(jì)數(shù)器開始計(jì)數(shù)。場(chǎng)計(jì)數(shù)器則在其計(jì)數(shù)值達(dá)到524時(shí)清零[9]。按照VGA 的時(shí)序標(biāo)準(zhǔn),在行計(jì)數(shù)器和場(chǎng)計(jì)數(shù)器對(duì)應(yīng)的范圍內(nèi)產(chǎn)生行同步和場(chǎng)同步信號(hào)。這樣就可以確保從BRAM 中正確地取出640×480 分辨率的數(shù)據(jù)[10],以供VGA 顯示器使用。
把RGB 色彩數(shù)據(jù)格式轉(zhuǎn)為YCbCr 色彩數(shù)據(jù)格式,以便進(jìn)行膚色的判斷[11]。
該設(shè)計(jì)的人臉識(shí)別是通過膚色來判斷的,YCbCr 這種數(shù)據(jù)格式容易判斷膚色的范圍,來區(qū)分膚色區(qū)域[12]。
YCbCr 中Y 是指亮度分量,Cb 指藍(lán)色色度分量,而Cr 指紅色色度分量[13]。RGB 轉(zhuǎn)YCbCr 的公式:
式中:R為紅色;G為綠色;B為藍(lán)色;Y 為亮度;Cb 為藍(lán)色色度;Cr 為紅色色度。
RGB 轉(zhuǎn)YCbCr模塊框圖如圖2 所示,為提高電路性能,采用三級(jí)流水線電路完成乘法加法運(yùn)算。根據(jù)流水線的設(shè)計(jì),為了確保數(shù)據(jù)同步,其他相關(guān)信號(hào)也需要經(jīng)過相同的流水線階段,即在每個(gè)流水線級(jí)之間進(jìn)行同步采樣三次。這樣可以保持?jǐn)?shù)據(jù)的同步性,并提高整個(gè)轉(zhuǎn)換過程的效率。

圖2 RGB轉(zhuǎn)YCbCr模塊框圖
人臉識(shí)別算法模塊框圖如圖3 所示。由二值化、濾波、人臉邊界搜索和人臉特征標(biāo)識(shí)組成。此算法完成了把膚色閾值內(nèi)的部分變?yōu)榘咨_M(jìn)行三次濾波充分降噪后,搜索人臉區(qū)域邊界,并將人臉特征標(biāo)識(shí)出來,以達(dá)到視頻流實(shí)時(shí)動(dòng)態(tài)標(biāo)識(shí)人臉。

圖3 人臉識(shí)別算法模塊框圖
二值化:在Cb、Cr 分量滿足膚色閾值范圍時(shí),將RGB數(shù)據(jù)置為16位全1,此時(shí)對(duì)應(yīng)的像素顯示為白色。
濾波:為了濾除圖像中的噪聲,特別是人臉區(qū)域外的偶爾出現(xiàn)的白色噪點(diǎn),該設(shè)計(jì)采用了一種簡(jiǎn)單的濾波方法。由于人臉區(qū)域被賦值為16 位全1,表示白色,而背景區(qū)域?yàn)?6 位全0,表示黑色,可以通過連續(xù)像素之間的與運(yùn)算來實(shí)現(xiàn)濾波。具體來說,對(duì)連續(xù)的7 組像素?cái)?shù)據(jù)執(zhí)行與運(yùn)算,只有當(dāng)連續(xù)7 組像素中某一位同時(shí)為1 時(shí),濾波結(jié)果中的這一位才為1。這種方法可以有效地消除孤立的白點(diǎn)噪聲。為了進(jìn)一步提高濾波效果,這種濾波步驟被連續(xù)應(yīng)用了3 次,以確保圖像中的噪聲得到充分抑制。
人臉邊界搜索:采用8 幀檢測(cè)法。對(duì)于連續(xù)的8幀圖像數(shù)據(jù),首先在第1 幀中通過迭代找到滿足人臉區(qū)域條件的最值。再采用隔幀檢測(cè),在第7 幀和第4 幀中分別檢測(cè)最值,并在第5 幀檢測(cè)中鎖定最終的人臉區(qū)域最值。為了提高準(zhǔn)確性,在第6 幀計(jì)算這些最值的平均值。通過這種分幀處理和迭代方法,能夠更精確地確定人臉區(qū)域的邊界。
人臉特征標(biāo)識(shí):在第0、1、2、3、6 幀時(shí),按搜索到的人臉邊界來標(biāo)識(shí)人臉特征。
人臉邊界搜索及人臉特征標(biāo)識(shí)框圖如圖4所示。

圖4 人臉邊界搜索及人臉特征標(biāo)識(shí)框圖
begin_x、begin_y、end_x 和end_y 分別為第7 幀人臉區(qū)域的左邊框、上邊框、右邊框和下邊框的最值坐標(biāo),begin_x_1、begin_y_1、end_x_1 和end_y_1 分別為第4 幀人臉區(qū)域的左邊框、上邊框、右邊框和下邊框的最值坐標(biāo)。
人臉識(shí)別及特征標(biāo)記算法的仿真如圖5 所示。在第7 幀begin_x、begin_y、end_x 和end_y 變化,在第4 幀begin_x_1、begin_y_1、end_x_1 和end_y_1 變化,在第5 幀時(shí)比較第7 幀和第4 幀的最值大小來決定最終的最值,在第6 幀計(jì)算平均值,在第0、1、2、3、6 幀時(shí),標(biāo)識(shí)人臉特征。

圖5 人臉識(shí)別算法及特征標(biāo)記算法仿真
疲勞檢測(cè)算法模塊框圖如圖6 所示。實(shí)時(shí)檢測(cè)一段時(shí)間內(nèi)人臉特征在閾值內(nèi)的累計(jì)時(shí)長(zhǎng)來判斷疲勞檢測(cè)的級(jí)別和疲勞檢測(cè)的進(jìn)入或退出狀態(tài)。三種疲勞級(jí)別接入不同級(jí)別的預(yù)警處理。

圖6 疲勞檢測(cè)算法模塊框圖
先進(jìn)行人臉特征是否在閾值內(nèi)的判斷,若在閾值內(nèi)才計(jì)數(shù),同時(shí)設(shè)定一個(gè)1 s 計(jì)數(shù)器,將上述結(jié)合起來,得到人臉特征在閾值內(nèi)的累計(jì)時(shí)長(zhǎng)秒數(shù)。同理可得人臉特征消失的累計(jì)時(shí)長(zhǎng)秒數(shù)。在工作時(shí)間達(dá)到階段性復(fù)位清零時(shí)間門限時(shí),進(jìn)行所有信號(hào)的清零重置,以避免某一段工作過程的故障。
在其累計(jì)時(shí)長(zhǎng)達(dá)到進(jìn)入檢測(cè)模式時(shí)間門限時(shí),進(jìn)入檢測(cè)模式,達(dá)到各疲勞級(jí)別時(shí)間門限時(shí),產(chǎn)生不同的疲勞級(jí)別指示。若人臉特征消失累計(jì)時(shí)長(zhǎng)達(dá)到退出檢測(cè)模式時(shí)間門限時(shí),退出檢測(cè)模式。
該設(shè)計(jì)的硬件驗(yàn)證平臺(tái)為Zynq 評(píng)估開發(fā)板(Zynq Evaluation &Development Board,ZedBoard),軟件平臺(tái)為Vivado 2018.3。用Vivado 自帶的綜合布線工具進(jìn)行綜合布線。綜合布線后得出RTL 級(jí)原理圖,觀察寄存器傳輸級(jí)(Register Transfer Level,RTL)總原理圖查看各模塊的連接關(guān)系和資源使用情況來了解各項(xiàng)資源占用率。
用Vivado 自帶的綜合布線工具進(jìn)行綜合布線后,資源使用情況如圖7 所示。查找表有3 393 個(gè),約占7%;觸發(fā)器FF 有4 321 個(gè),約占5%;BRAM 緩存109.50,約占80%;輸入輸出口38 個(gè),占19%;緩沖器7 個(gè),約占22%;鎖相環(huán)(Phase Locked Loop,PLL)1 個(gè),約占25%。該設(shè)計(jì)主要使用了片內(nèi)BRAM 資源,算法電路所占資源比例較小。

圖7 資源使用情況
基于ZedBoard 搭建了測(cè)試系統(tǒng)。為便于觀察,采用VGA 顯示器實(shí)時(shí)顯示各個(gè)階段處理效果。通過人臉特征標(biāo)識(shí)變化情況和開發(fā)板上LED 燈的亮滅情況來測(cè)試系統(tǒng)功能及性能。測(cè)試效果如圖8 所示。

圖8 測(cè)試效果
從圖8 中可知,第1 張圖為視頻流原樣顯示;第2 張圖為二值化后的效果,將膚色區(qū)域變?yōu)榘咨坏? 張圖為濾波后的效果,將背景的大部分噪點(diǎn)濾掉,使背景變得干凈;第4 張圖為人臉特征標(biāo)識(shí)后的效果,可實(shí)時(shí)標(biāo)識(shí)出人臉特征;第5 張圖為人低頭后的效果,能實(shí)時(shí)跟蹤標(biāo)識(shí)人臉;第6 張圖為開發(fā)板上LED 指示燈亮,即疲勞檢測(cè)預(yù)警燈亮,證明功能有效可行。
該文完成了基于FPGA 的人臉識(shí)別算法和疲勞駕駛檢測(cè)的硬件加速器設(shè)計(jì),并對(duì)原型進(jìn)行了驗(yàn)證。通過進(jìn)一步優(yōu)化算法,完成駕駛員眼睛及嘴巴的特征識(shí)別,使得疲勞特征更加準(zhǔn)確。所設(shè)計(jì)的人臉識(shí)別算法和疲勞駕駛檢測(cè)的硬件加速器已經(jīng)完成產(chǎn)品化和市場(chǎng)化[14]。
并行處理的純硬件開發(fā)比串行處理的軟件開發(fā)具有開發(fā)速度更快的優(yōu)勢(shì),使其進(jìn)行疲勞檢測(cè)和預(yù)警更高效[15]。該加速器可以同時(shí)處理不同任務(wù),工作效率更高。系統(tǒng)尺寸小,成本低,實(shí)時(shí)性良好。可移植性高,可作為IP 使用,不受FPGA 開發(fā)平臺(tái)的限制[16]。