?

基于計算機視覺的危險駕駛預警系統研究與設計

2018-10-19 07:34汪前進鄭占杰
長沙大學學報 2018年5期
關鍵詞:霍夫安全帶人臉

汪前進,鄭占杰

(淮海工學院計算機工程學院,江蘇 連云港 222005)

近年來,我國私家車銷售量迅速增長,車輛擁有率逐年提高,截至2017年底全國機動車保有量達3.10億輛,機動車駕駛人達3.85億人.與此同時,我國交通事故發生率居高不下.根據國家安全監管總局、交通運輸部統計,2016年中國共接報道路交通事故864.3萬起,交通事故造成死亡人數約6.3萬.2017年1-4月,我國道路運輸領域發生較大以上等級行車事故起數和死亡人數較2016年同期明顯上升,分別增加了12.2%和16.2%[1].據調查,超速、未系安全帶、疲勞駕駛、駕駛時打電話、玩手機等危險行為是導致車禍以及車禍死亡率增加的主要原因.隨著信息技術的提高,圖像處理技術、計算機視覺技術能有效預警危險駕駛行為.本文結合計算機視覺領域的工具庫,如OpenCV,以及包含多種機器學習算法的Dlib等[2,3]檢測駕駛員安全帶佩戴情況、疲勞駕駛危險駕駛行為并做出預警.

1 駕駛預警系統分析

1.1 系統功能

本系統主要功能分為安全帶檢測、疲勞駕駛檢測、手持打電話行為檢測三部分.

安全帶檢測:從視頻流抽樣出駕駛員的駕駛行為圖片,形成圖片集,對每一張圖片用兩種不同方法分析檢測,判斷駕駛員是否佩戴安全帶.采用投票機制,對判定結果進行投票,最后投票結果確定駕駛員是否佩戴安全帶.

疲勞駕駛檢測:系統每隔一定時間會獲取駕駛員駕駛行為圖像,由Dlib庫創建面部檢測器以及面部標志預測器循環檢測灰度視頻幀中的人臉,捕捉到人臉后,計算人臉中眼睛的長寬比,根據人眼長寬比判定人的閉眼狀況,從而判斷駕駛員是否疲勞駕駛.

手持打電話行為檢測:系統每隔一定時間會獲取駕駛員駕駛行為圖像,通過構建Keras神經網拓撲,加載訓練學習權重,預測駕駛員的行為,判斷駕駛員是否在手持打電話.系統功能結構圖如圖1所示.

圖1 系統功能結構圖

1.2 系統工作流程

危險駕駛預警系統工作流程如下:

(1)系統執行,首先打開攝像頭獲取駕駛員圖像信息;

(2)經過安全帶檢測模塊檢測駕駛員是否佩戴安全帶,若已佩戴則進行步驟3,否則繼續獲取圖像,進行步驟2;

(3)進入疲勞檢測模塊檢測駕駛員的眼睛疲勞狀況;

(4)進入手持打電話檢測模塊檢測駕駛員是否存在手持打電話行為.

(5)重復步驟(2)到(4).

2 安全帶檢測設計

系統對攝像頭采集的視頻流進行圖像取樣并存儲,然后對圖像做灰度化處理,經由OpenCV的人臉檢測模型檢測圖像中是否存在人臉,若存在則表示駕駛員就位,系統會進行安全帶檢測以及后續的駕駛行為檢測,否則,繼續循環檢測人臉.系統設計了近帶狀區域檢測法以及基于霍夫變換的直線檢測法兩種安全帶檢測算法,為了避免偶然性,系統設計了一個投票機制.經過兩種算法對多張圖片判斷并對判斷結果投票,最終根據投票結果判斷駕駛員是否佩戴安全帶.

2.1 人臉檢測

首先對圖像做灰度處理和均衡化處理,用以減少圖像信息量降低計算量,并通過直方圖均衡化提高對比度使圖像更加清晰.加載OpenCV人臉檢測分類器對圖像進行識別來判斷其是否存在人臉.

2.2 Canny邊緣檢測

Canny邊緣檢測算法是一種基于圖像梯度計算的算法[4].經過如下幾個步驟可以將圖像邊緣提取出來:首先將彩色圖像轉換為灰度圖像,降低數據計算量,然后對圖像進行高斯模糊減少噪聲,計算圖像梯度、方向找出圖像可能的邊緣,保留最大梯度,也就是將邊緣細化到一個像素,利用最大最小閾值判斷強弱邊緣并做一定的連接,最后將其輸出.

2.3 霍夫變換

霍夫變換于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推廣使用.霍夫變換是檢測二值化圖像中直線與圓的基本方法之一[5].檢測直線的基本思想是將直角坐標系中線與點,與極坐標系中點與線相互轉化,求出可能存在的直線.直角坐標系(即原始坐標系)中的一條直線y=kx+b在極坐標系中可以看成一個點(ρ,θ),極坐標系中的直線ρ=xCosθ+ySinθ在直角坐標系是(x,y)點,如圖2(a).若將ρ,θ作為直角坐標系兩軸建立參照坐標系,如圖2(b),每個點(x,y)就是一個正弦曲線,而多條相交在同一點的正弦曲線就是一條直線.

圖2(a) 原始坐標系中的直線

圖2(b) 參數坐標系中的直線

2.4 安全帶檢測

2.4.1 基于霍夫變換的安全帶檢測法

基于霍夫變換的安全帶檢測原理是通過霍夫變換檢測圖像中存在的直線[6,7],并找出斜率相近的直線,計算其間距、斜率,若都符合預設參數則判定為安全帶.算法如下:

(1)通過Canny邊緣檢測灰度圖獲取二值化圖;

(2)通過霍夫變換檢測并繪制直線;

(3)檢測是否存在至少兩條直線,若存在則計算直線間間距,否則判定為未佩戴安全帶;

(4)判斷直線間間距是否在預設參數即最大最小間距之內,若是,計算直線斜率,否則判斷為未佩戴安全帶;

(5)判斷直線斜率是否在預設參數即最大最小斜率內,若是則判斷為已佩戴安全帶,否則判斷為未佩戴安全帶.

使用霍夫變換算法檢測直線,并將直線描繪在灰度圖上,實現效果如圖3.

圖3 基于霍夫變換的安全帶檢測效果

2.4.2 帶狀區域檢測法

實際的安全帶輪廓不一定是直線,很大可能是不規則的圓弧形,難以用簡單的數學公式表達,因此上述檢測直線的方法效果不夠理想.帶狀區域檢測法的思想是將圖像中的類似安全帶形狀的區域找出,根據帶狀區域的長度、寬度、斜率進行判斷.具體做法是將圖像通過Canny邊緣檢測形成二值圖并轉為矩陣,計算矩陣行列,對圖像區域進行掃描,尋找帶狀區域.算法如下:

(1)依據人眼、鼻子、嘴的位置,按照人臉五官比例,初步確定安全帶所在的行、列;

(2)從當前行、列開始,逐行掃描.

1)查找安全帶寬度的邊緣點點對(a,b);

2)若找到的點對與上一行點對的列偏差在三個像素以內,則行數加1,打點畫圖;否則空行數加1;

3)若空行數大于預設參數,退出循環.

(3)計算帶狀區域所占總行數、總列數;

(4)計算帶狀區域斜率;

(5)若長度大于預設參數,斜率在預設參數之內,則判定為安全帶.

本算法允許安全帶輪廓線有間斷,使用本算法將帶狀區域計算出,并用點描繪在二值圖中,實現效果如圖4所示.

圖4 帶狀區域檢測效果

用兩種方法對圖片集合的10張圖片各做5次檢測判定,并將判定結果輸出并投票,如圖5所示,7個True,3個False的結果表示駕駛員佩戴了安全帶.

圖5 投票結果

相比于基于霍夫變換的直線檢測法,帶狀區域檢測方法不僅可以檢測到規則的輪廓為直線帶形區域,也可檢測到輪廓為曲線的區域,且不受安全帶輪廓線間斷的干擾,具有更好的抗干擾能力.

兩種算法各有特點,能夠相互彌補不足,通過投票機制配合使用,既可以較精準地檢測到安全帶,又能夠減少誤判.與基于深度學習的安全帶檢測方法相比,本方法不需要訓練分類器,適用面廣,效率較高,局限性較小.

3 疲勞檢測設計

在安全帶檢測成功之后,系統進行疲勞駕駛檢測.系統調用Dlib庫,采用基于改進的方向梯度直方圖加線性支持向量機方法的預訓練面部檢測器進行目標檢測.對目標圖像生成如圖6所示的人臉特征點標志.使用索引提取眼部區域,根據公式1計算EAR(人眼平均長寬比)[8,9].

(1)

每個人眼睛的長寬比在眼睛開著時幾乎恒定,但當眨眼發生時,眼睛的寬度會迅速下降到零,因此可以通過眼睛長寬比率判斷閉眼情況,根據閉眼的時間和頻率進而判斷駕駛員是否打瞌睡.如圖7,睜眼閉眼時坐標的位置以及閉眼過程中的長寬比變化圖.

圖6 人臉標志集

圖7 EAR計算公式圖解

疲勞檢測步驟如下:

(1)將視頻幀轉化為灰度圖;

(2)初始化Dlib面部檢測器以及面部標志預測器;

(3)檢測視頻幀中存在的人臉,利用預測器以及檢測到的人臉生成面部標志集;

(4)找出眼部區域索引,并計算平均長寬比EAR;

(5)將EAR與眨眼閾值比較,若EAR小于眨眼閾值則將計數器加一,否則重置計數器為零;

(6)當計數器大于疲勞閾值即眨眼連續幀數量則進行相應的預警提醒,否則繼續循環.

實驗結果如圖8所示.

圖8 疲勞駕駛檢測結果

4 結論

計算機視覺和圖像識別技術是人工智能領域的一個熱點技術,在汽車安全駕駛領域起著至關重要的作用.本文利用圖像識技術基于Opencv CV、Dlib庫實現了對駕駛員安全帶佩戴以及駕駛員疲勞駕駛的檢測,通過Keras也實現了對手持打電話的行為識別,取得了較好的效果.實踐中也發現,光線、環境背景等會對檢測的準確率造成一定影響,這方面還需要做進一步研究.另外,危險駕駛行為也遠不止這些,如玩手機、吃東西、“雙脫手”等危險駕駛行為也有待進一步研究.

猜你喜歡
霍夫安全帶人臉
冰山與氣候變化
有特點的人臉
世界之巔的花園——庫肯霍夫
一起學畫人臉
能救命的安全帶和安全氣囊
三國漫——人臉解鎖
Let’s Go for a Ride
最甜蜜的安全帶
當之無愧的“冰人”
安全帶測試裝置
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合