汪前進(jìn),鄭占杰
(淮海工學(xué)院計(jì)算機(jī)工程學(xué)院,江蘇 連云港 222005)
近年來,我國(guó)私家車銷售量迅速增長(zhǎng),車輛擁有率逐年提高,截至2017年底全國(guó)機(jī)動(dòng)車保有量達(dá)3.10億輛,機(jī)動(dòng)車駕駛?cè)诉_(dá)3.85億人.與此同時(shí),我國(guó)交通事故發(fā)生率居高不下.根據(jù)國(guó)家安全監(jiān)管總局、交通運(yùn)輸部統(tǒng)計(jì),2016年中國(guó)共接報(bào)道路交通事故864.3萬起,交通事故造成死亡人數(shù)約6.3萬.2017年1-4月,我國(guó)道路運(yùn)輸領(lǐng)域發(fā)生較大以上等級(jí)行車事故起數(shù)和死亡人數(shù)較2016年同期明顯上升,分別增加了12.2%和16.2%[1].據(jù)調(diào)查,超速、未系安全帶、疲勞駕駛、駕駛時(shí)打電話、玩手機(jī)等危險(xiǎn)行為是導(dǎo)致車禍以及車禍死亡率增加的主要原因.隨著信息技術(shù)的提高,圖像處理技術(shù)、計(jì)算機(jī)視覺技術(shù)能有效預(yù)警危險(xiǎn)駕駛行為.本文結(jié)合計(jì)算機(jī)視覺領(lǐng)域的工具庫,如OpenCV,以及包含多種機(jī)器學(xué)習(xí)算法的Dlib等[2,3]檢測(cè)駕駛員安全帶佩戴情況、疲勞駕駛危險(xiǎn)駕駛行為并做出預(yù)警.
本系統(tǒng)主要功能分為安全帶檢測(cè)、疲勞駕駛檢測(cè)、手持打電話行為檢測(cè)三部分.
安全帶檢測(cè):從視頻流抽樣出駕駛員的駕駛行為圖片,形成圖片集,對(duì)每一張圖片用兩種不同方法分析檢測(cè),判斷駕駛員是否佩戴安全帶.采用投票機(jī)制,對(duì)判定結(jié)果進(jìn)行投票,最后投票結(jié)果確定駕駛員是否佩戴安全帶.
疲勞駕駛檢測(cè):系統(tǒng)每隔一定時(shí)間會(huì)獲取駕駛員駕駛行為圖像,由Dlib庫創(chuàng)建面部檢測(cè)器以及面部標(biāo)志預(yù)測(cè)器循環(huán)檢測(cè)灰度視頻幀中的人臉,捕捉到人臉后,計(jì)算人臉中眼睛的長(zhǎng)寬比,根據(jù)人眼長(zhǎng)寬比判定人的閉眼狀況,從而判斷駕駛員是否疲勞駕駛.
手持打電話行為檢測(cè):系統(tǒng)每隔一定時(shí)間會(huì)獲取駕駛員駕駛行為圖像,通過構(gòu)建Keras神經(jīng)網(wǎng)拓?fù)洌虞d訓(xùn)練學(xué)習(xí)權(quán)重,預(yù)測(cè)駕駛員的行為,判斷駕駛員是否在手持打電話.系統(tǒng)功能結(jié)構(gòu)圖如圖1所示.
圖1 系統(tǒng)功能結(jié)構(gòu)圖
危險(xiǎn)駕駛預(yù)警系統(tǒng)工作流程如下:
(1)系統(tǒng)執(zhí)行,首先打開攝像頭獲取駕駛員圖像信息;
(2)經(jīng)過安全帶檢測(cè)模塊檢測(cè)駕駛員是否佩戴安全帶,若已佩戴則進(jìn)行步驟3,否則繼續(xù)獲取圖像,進(jìn)行步驟2;
(3)進(jìn)入疲勞檢測(cè)模塊檢測(cè)駕駛員的眼睛疲勞狀況;
(4)進(jìn)入手持打電話檢測(cè)模塊檢測(cè)駕駛員是否存在手持打電話行為.
(5)重復(fù)步驟(2)到(4).
系統(tǒng)對(duì)攝像頭采集的視頻流進(jìn)行圖像取樣并存儲(chǔ),然后對(duì)圖像做灰度化處理,經(jīng)由OpenCV的人臉檢測(cè)模型檢測(cè)圖像中是否存在人臉,若存在則表示駕駛員就位,系統(tǒng)會(huì)進(jìn)行安全帶檢測(cè)以及后續(xù)的駕駛行為檢測(cè),否則,繼續(xù)循環(huán)檢測(cè)人臉.系統(tǒng)設(shè)計(jì)了近帶狀區(qū)域檢測(cè)法以及基于霍夫變換的直線檢測(cè)法兩種安全帶檢測(cè)算法,為了避免偶然性,系統(tǒng)設(shè)計(jì)了一個(gè)投票機(jī)制.經(jīng)過兩種算法對(duì)多張圖片判斷并對(duì)判斷結(jié)果投票,最終根據(jù)投票結(jié)果判斷駕駛員是否佩戴安全帶.
首先對(duì)圖像做灰度處理和均衡化處理,用以減少圖像信息量降低計(jì)算量,并通過直方圖均衡化提高對(duì)比度使圖像更加清晰.加載OpenCV人臉檢測(cè)分類器對(duì)圖像進(jìn)行識(shí)別來判斷其是否存在人臉.
Canny邊緣檢測(cè)算法是一種基于圖像梯度計(jì)算的算法[4].經(jīng)過如下幾個(gè)步驟可以將圖像邊緣提取出來:首先將彩色圖像轉(zhuǎn)換為灰度圖像,降低數(shù)據(jù)計(jì)算量,然后對(duì)圖像進(jìn)行高斯模糊減少噪聲,計(jì)算圖像梯度、方向找出圖像可能的邊緣,保留最大梯度,也就是將邊緣細(xì)化到一個(gè)像素,利用最大最小閾值判斷強(qiáng)弱邊緣并做一定的連接,最后將其輸出.
霍夫變換于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推廣使用.霍夫變換是檢測(cè)二值化圖像中直線與圓的基本方法之一[5].檢測(cè)直線的基本思想是將直角坐標(biāo)系中線與點(diǎn),與極坐標(biāo)系中點(diǎn)與線相互轉(zhuǎn)化,求出可能存在的直線.直角坐標(biāo)系(即原始坐標(biāo)系)中的一條直線y=kx+b在極坐標(biāo)系中可以看成一個(gè)點(diǎn)(ρ,θ),極坐標(biāo)系中的直線ρ=xCosθ+ySinθ在直角坐標(biāo)系是(x,y)點(diǎn),如圖2(a).若將ρ,θ作為直角坐標(biāo)系兩軸建立參照坐標(biāo)系,如圖2(b),每個(gè)點(diǎn)(x,y)就是一個(gè)正弦曲線,而多條相交在同一點(diǎn)的正弦曲線就是一條直線.
圖2(a) 原始坐標(biāo)系中的直線
圖2(b) 參數(shù)坐標(biāo)系中的直線
2.4.1 基于霍夫變換的安全帶檢測(cè)法
基于霍夫變換的安全帶檢測(cè)原理是通過霍夫變換檢測(cè)圖像中存在的直線[6,7],并找出斜率相近的直線,計(jì)算其間距、斜率,若都符合預(yù)設(shè)參數(shù)則判定為安全帶.算法如下:
(1)通過Canny邊緣檢測(cè)灰度圖獲取二值化圖;
(2)通過霍夫變換檢測(cè)并繪制直線;
(3)檢測(cè)是否存在至少兩條直線,若存在則計(jì)算直線間間距,否則判定為未佩戴安全帶;
(4)判斷直線間間距是否在預(yù)設(shè)參數(shù)即最大最小間距之內(nèi),若是,計(jì)算直線斜率,否則判斷為未佩戴安全帶;
(5)判斷直線斜率是否在預(yù)設(shè)參數(shù)即最大最小斜率內(nèi),若是則判斷為已佩戴安全帶,否則判斷為未佩戴安全帶.
使用霍夫變換算法檢測(cè)直線,并將直線描繪在灰度圖上,實(shí)現(xiàn)效果如圖3.
圖3 基于霍夫變換的安全帶檢測(cè)效果
2.4.2 帶狀區(qū)域檢測(cè)法
實(shí)際的安全帶輪廓不一定是直線,很大可能是不規(guī)則的圓弧形,難以用簡(jiǎn)單的數(shù)學(xué)公式表達(dá),因此上述檢測(cè)直線的方法效果不夠理想.帶狀區(qū)域檢測(cè)法的思想是將圖像中的類似安全帶形狀的區(qū)域找出,根據(jù)帶狀區(qū)域的長(zhǎng)度、寬度、斜率進(jìn)行判斷.具體做法是將圖像通過Canny邊緣檢測(cè)形成二值圖并轉(zhuǎn)為矩陣,計(jì)算矩陣行列,對(duì)圖像區(qū)域進(jìn)行掃描,尋找?guī)顓^(qū)域.算法如下:
(1)依據(jù)人眼、鼻子、嘴的位置,按照人臉五官比例,初步確定安全帶所在的行、列;
(2)從當(dāng)前行、列開始,逐行掃描.
1)查找安全帶寬度的邊緣點(diǎn)點(diǎn)對(duì)(a,b);
2)若找到的點(diǎn)對(duì)與上一行點(diǎn)對(duì)的列偏差在三個(gè)像素以內(nèi),則行數(shù)加1,打點(diǎn)畫圖;否則空行數(shù)加1;
3)若空行數(shù)大于預(yù)設(shè)參數(shù),退出循環(huán).
(3)計(jì)算帶狀區(qū)域所占總行數(shù)、總列數(shù);
(4)計(jì)算帶狀區(qū)域斜率;
(5)若長(zhǎng)度大于預(yù)設(shè)參數(shù),斜率在預(yù)設(shè)參數(shù)之內(nèi),則判定為安全帶.
本算法允許安全帶輪廓線有間斷,使用本算法將帶狀區(qū)域計(jì)算出,并用點(diǎn)描繪在二值圖中,實(shí)現(xiàn)效果如圖4所示.
圖4 帶狀區(qū)域檢測(cè)效果
用兩種方法對(duì)圖片集合的10張圖片各做5次檢測(cè)判定,并將判定結(jié)果輸出并投票,如圖5所示,7個(gè)True,3個(gè)False的結(jié)果表示駕駛員佩戴了安全帶.
圖5 投票結(jié)果
相比于基于霍夫變換的直線檢測(cè)法,帶狀區(qū)域檢測(cè)方法不僅可以檢測(cè)到規(guī)則的輪廓為直線帶形區(qū)域,也可檢測(cè)到輪廓為曲線的區(qū)域,且不受安全帶輪廓線間斷的干擾,具有更好的抗干擾能力.
兩種算法各有特點(diǎn),能夠相互彌補(bǔ)不足,通過投票機(jī)制配合使用,既可以較精準(zhǔn)地檢測(cè)到安全帶,又能夠減少誤判.與基于深度學(xué)習(xí)的安全帶檢測(cè)方法相比,本方法不需要訓(xùn)練分類器,適用面廣,效率較高,局限性較小.
在安全帶檢測(cè)成功之后,系統(tǒng)進(jìn)行疲勞駕駛檢測(cè).系統(tǒng)調(diào)用Dlib庫,采用基于改進(jìn)的方向梯度直方圖加線性支持向量機(jī)方法的預(yù)訓(xùn)練面部檢測(cè)器進(jìn)行目標(biāo)檢測(cè).對(duì)目標(biāo)圖像生成如圖6所示的人臉特征點(diǎn)標(biāo)志.使用索引提取眼部區(qū)域,根據(jù)公式1計(jì)算EAR(人眼平均長(zhǎng)寬比)[8,9].
(1)
每個(gè)人眼睛的長(zhǎng)寬比在眼睛開著時(shí)幾乎恒定,但當(dāng)眨眼發(fā)生時(shí),眼睛的寬度會(huì)迅速下降到零,因此可以通過眼睛長(zhǎng)寬比率判斷閉眼情況,根據(jù)閉眼的時(shí)間和頻率進(jìn)而判斷駕駛員是否打瞌睡.如圖7,睜眼閉眼時(shí)坐標(biāo)的位置以及閉眼過程中的長(zhǎng)寬比變化圖.
圖6 人臉標(biāo)志集
圖7 EAR計(jì)算公式圖解
疲勞檢測(cè)步驟如下:
(1)將視頻幀轉(zhuǎn)化為灰度圖;
(2)初始化Dlib面部檢測(cè)器以及面部標(biāo)志預(yù)測(cè)器;
(3)檢測(cè)視頻幀中存在的人臉,利用預(yù)測(cè)器以及檢測(cè)到的人臉生成面部標(biāo)志集;
(4)找出眼部區(qū)域索引,并計(jì)算平均長(zhǎng)寬比EAR;
(5)將EAR與眨眼閾值比較,若EAR小于眨眼閾值則將計(jì)數(shù)器加一,否則重置計(jì)數(shù)器為零;
(6)當(dāng)計(jì)數(shù)器大于疲勞閾值即眨眼連續(xù)幀數(shù)量則進(jìn)行相應(yīng)的預(yù)警提醒,否則繼續(xù)循環(huán).
實(shí)驗(yàn)結(jié)果如圖8所示.
圖8 疲勞駕駛檢測(cè)結(jié)果
計(jì)算機(jī)視覺和圖像識(shí)別技術(shù)是人工智能領(lǐng)域的一個(gè)熱點(diǎn)技術(shù),在汽車安全駕駛領(lǐng)域起著至關(guān)重要的作用.本文利用圖像識(shí)技術(shù)基于Opencv CV、Dlib庫實(shí)現(xiàn)了對(duì)駕駛員安全帶佩戴以及駕駛員疲勞駕駛的檢測(cè),通過Keras也實(shí)現(xiàn)了對(duì)手持打電話的行為識(shí)別,取得了較好的效果.實(shí)踐中也發(fā)現(xiàn),光線、環(huán)境背景等會(huì)對(duì)檢測(cè)的準(zhǔn)確率造成一定影響,這方面還需要做進(jìn)一步研究.另外,危險(xiǎn)駕駛行為也遠(yuǎn)不止這些,如玩手機(jī)、吃東西、“雙脫手”等危險(xiǎn)駕駛行為也有待進(jìn)一步研究.