湯沖 張冉 蔡平 王小剛 沈文波
(1.常州信息職業(yè)技術學院 江蘇省常州市 213164 2.蘇州科大訊飛教育科技有限公司 江蘇省蘇州市 215002)
汽車車牌識別(License Plate Recognition)已經越來越受到人們的重視。特別是在智能交通系統(tǒng)中,汽車車牌識別發(fā)揮了巨大的作用。汽車車牌的自動識別技術是把圖像處理方法與計算機軟件技術相結合,以準確識別出車輛車牌的字符為目標,并將識別出的車輛車牌數據傳送至交通實時管理系統(tǒng),從而實現高效、準確的交通監(jiān)管功能。汽車車牌識別對于維護交通安全和城市治安,防止交通堵塞,實現交通全自動化管理具有重要的現實意義。
車牌自動識別要求實現從汽車圖像的獲取到車牌字符的處理,是一個復雜的過程,主要分為圖像獲取、車牌定位、字符分割以及字符識別等階段。由于對車牌的拍攝角度不同以及拍攝環(huán)境光線的強弱變化等外界因素,嚴重影響對車輛車牌的正確識別,需要進一步完善車牌自動識別系統(tǒng)的性能,尤其是提高系統(tǒng)的抗外界干擾的能力。
目前,車牌自動識別系統(tǒng)的開發(fā)平臺較多,但基于開源計算機視覺開發(fā)包OpenCV 以及深度學習框架TensorFlow 成為開發(fā)設計車牌自動識別系統(tǒng)的主流技術。OpenCV 的優(yōu)勢在于它有400 多個免費的圖像處理函數,函數功能包括從圖像處理到模式識別、從靜態(tài)圖像到運動視頻、從二維平面到相機的三維坐標以及三維重建,幾乎覆蓋了機器視覺的大部分應用領域。TensorFlow 是由谷歌提供,現已形成強大的人工智能平臺社區(qū),其工作流程相對容易,提供的API 具有較好的穩(wěn)定性和兼容性,還能實現與Python 編程語言的對接。因此,本文選用基于OpenCV 與TensorFlow 技術,設計開發(fā)了抗環(huán)境干擾的車牌自動識別系統(tǒng),系統(tǒng)可被靈活部署在各種類型的機器上,具有部署簡單,抗環(huán)境干擾能力強,車牌識別率高的特點。
車牌自動識別是以計算機視覺處理、數字圖像處理、模式識別等技術為基礎,對攝像機所拍攝的車輛圖像或者視頻圖像進行處理分析,得到每輛車的車牌號碼,從而完成識別的過程。在此基礎上,可實現停車場出入口收費管理、盜搶車輛管理、高速公路超速自動化管理、闖紅燈電子警察、公路收費管理等各種交通監(jiān)管功能。
車牌自動識別系統(tǒng)的設計包含車輛圖像獲取、車牌區(qū)域定位、車牌特征輪廓提取和車牌內容識別環(huán)節(jié)。系統(tǒng)處理流程如圖1所示。
圖1:車牌自動識別系統(tǒng)的處理流程
圖2:調整灰度級前的車輛圖像
圖3:調整灰度級后的二值灰度圖像
圖4:車牌區(qū)域的形狀特征
車牌圖像獲取是進行車牌識別的首要環(huán)節(jié)。車牌圖像可以從攝像機拍攝的車輛圖像或者視頻圖像中進行抽取。車牌圖像的獲取也可由用戶手機拍攝后傳入車牌識別系統(tǒng)。
攝像機拍攝的含有車牌信息的車輛圖像是彩色的,為了提高車牌識別的抗外界干擾的能力,先將彩色車輛圖像生成二值的灰度圖像,實現基于色調的車牌區(qū)域定位。由于國內的車牌往往是藍底白字,因此,可以利用圖像的色調或者色彩飽和度特征,生成二值灰度圖像,從而實現更加準確地定位車牌位置。
系統(tǒng)設計時,先把獲取的圖像轉化成HSV 圖像,進而獲取V通道的圖像明度信息。二值灰度圖像中每個像素的灰度級別采用0-255 之間的整數表示。先計算灰度直方圖,然后根據灰度直方圖設置坐標軸范圍,調整灰度級以提高圖像的對比度?;叶戎狈綀D是圖像灰度級的函數,用于描述每個灰度級在圖像矩陣中的像素個數或者占有率。
圖2 為調整灰度級前的車輛圖像,圖3 為調整灰度級后的二值灰度圖像。
調整灰度級能提高圖像的對比度,使亮的地方更亮,暗的地方更暗。在形態(tài)學處理中,頂帽操作往往用來分離比鄰近點亮一些的板塊,尤其對于具有大幅相似背景而微小物品的規(guī)律性又較強的圖像,使用頂帽運算可以有效提取背景信息。計算車輛圖像直方圖的核心算法如下:
車牌區(qū)域的定位采用基于形狀的方法。由于車輛圖像背景比較復雜,所以應該根據車牌的特征進行初次篩選。車牌的特征可以選擇中國車牌的大小、比例特征,因為車牌都是固定的矩形形狀,通過首先尋找圖像上擁有矩形特征的區(qū)域,然后再抽取這些區(qū)域,再結合車牌的長寬的比例特征可以篩選出相應的矩形區(qū)域,從而實現對車牌的準確定位。
讀取HSV 圖像時,根據我國車牌的標準,基于圖像大小設定的面積、長寬比例定位車牌的字符區(qū)域,首先轉換寬度和高度,車牌區(qū)域的大小只能為13*5,行數為1。然后創(chuàng)建掩膜和背景模型,采用單通道浮點型,創(chuàng)建前景模型并分割圖像。圖4 為車牌區(qū)域的形狀特征。
圖5:特征輪廓提取對比圖
通過選用高斯濾波函數并正確設置參數,將bgdModel 參數設為零,表示不計算y 方向的梯度,因為車牌上的數字在豎直方向較長,重點在于得到豎直方向的邊界。先采用閉運算將車牌數字部分連接,再利用開運算將不是塊狀的或是較小的部分去掉。采用具有二維卷積算子的高斯濾波可實現圖像的模糊化處理,即去除細節(jié)和噪聲,提高車牌識別的抗干擾能力。
由于部分圖像得到的輪廓邊緣不整齊,因此需要再進行一次膨脹操作以獲取車牌的輪廓。通過測試邊框識別結果,將輪廓調整為長方形,并用顏色識別出車牌區(qū)域。
基于車牌形狀實現車牌圖像分割定位的核心算法如下:
OpenCV 與Python 的接口中使用cv2.findContours()函數來查找檢測物體的輪廓。該函數提供3 個主要參數。參數1 表示尋找輪廓的圖像;參數2 表示輪廓的檢索模式,共有四種類型,分別是cv2.RETR_EXTERNAL 表示只檢測外輪廓,cv2.RETR_LIST 檢測的輪廓不建立等級關系,cv2.RETR_CCOMP 建立兩個等級的輪廓;cv2.RETR_TREE 建立一個等級樹結構的輪廓。參數3 表示method 為輪廓的近似辦法。
cv2.CHAIN_APPROX_NONE 存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))==1,cv2.CHAIN_APPROX_SIMPLE 設定壓縮水平方向、垂直方向和對角線方向的元素,只保留該方向的終點坐標。
系統(tǒng)實現特征輪廓提取的核心算法如下:
圖6:OpenCV 的代碼結構
圖7:TensorFlow 的代碼結構
在獲取輪廓過程中,通過傳入定義好類,獲取根據輪廓矩形的面積、長寬等值,為以后計算做準備。圖5(a)、(b)分別展示了特征輪廓提取前后的效果對比。根據前期獲取的候選車牌區(qū)域,遍歷輪廓數組實現對圖像的篩選。
車牌內容識別時,通過計算候選車牌區(qū)域藍色數值(均值)的最大值,確定最終的車牌區(qū)域。對于選定的車牌輪廓,首先進行粗定位,即對車牌進行左右邊界回歸處理,去除車牌兩邊多余的部分,然后進行精定位,即將車牌送入CRNN 網絡進行字符識別,利用左右邊界回歸模型,預測出車牌的左右邊框,進一步裁剪,進行精定位?;谖淖痔卣鞯姆椒ㄊ歉鶕淖州喞卣鬟M行識別,經過相應的算法解析,得到結果。
車牌內容識別的核心代碼如下:
通過getRectSubPix將獲取的圖像進行分離,獲取blue通道圖像,計算圖像的均值并保存在list 中。
我們預定義InsurProvider 類,包括車牌中的所有字符和字母。通過將已獲取的list 中數據與預定義的數據進行對比,選取相似度最高的字符或者字母作為最終識別的結果進行輸出。
車牌內容識別的核心算法如下:
系統(tǒng)采用OpenCV 的圖像處理與TensorFlow 來構建卷積神經網絡的模型訓練。OpenCV 的代碼結構如圖6所示。
圖8:導航欄
圖9:車牌測試效果
TensorFlow 的代碼結構如圖7所示。
為了檢驗所開發(fā)系統(tǒng)的實際效果,系統(tǒng)實現時采用Python 進行編程識別,車牌識別結果通過Web 頁面進行展示。具體的展示代碼在index.html 中予以實現,Web 代碼結構以及車牌識別系統(tǒng)的導航首頁代碼結構如圖8所示。
對所開發(fā)的車牌識別系統(tǒng)進行了實際部署和測試。系統(tǒng)測試的效果如圖9所示。
測試結果表明,系統(tǒng)能在各種環(huán)境干擾的情況下,正確識別車牌。所設計開發(fā)的系統(tǒng)具有部署簡單,抗環(huán)境干擾能力強,車牌識別率高的特點。
隨著車輛的普及,車輛的增多也加大了對車輛的管理,車牌識別也變得越來越重要。針對因拍攝角度、環(huán)境光線等因素增大對車牌的識別難度等突出問題,本文提出了基于我國車牌自身特點進行車牌識別的方法,即先對車牌進行有效區(qū)域分割,再通過預定義車牌信息數據庫進行比對識別的思路,并采用主流的OpenCV 與TensorFlow 技術設計并實現了車牌識別系統(tǒng),有效提高了車牌識別的抗干擾能力。今后,將針對不同國家車牌的不同樣式,進一步拓展車牌區(qū)域分割和定位方法,提高系統(tǒng)的通用性。