李濤濤
(200093上海市 上海理工大學 機械工程學院)
伴隨著交通行業的飛速發展,車牌識別技術已然成為一項非常重要的研究課題,并在日常生活中有著廣泛的應用。車牌識別技術的主要問題包括車牌定位和字符識別。從本質上講,車牌定位的算法分為3種,一種是基于圖像邊緣的,一種是基于圖像顏色的,一種是基于機器學習。Abolghasemi[1]等提出的基于邊緣以及顏色輔助的車牌定位方法增加了對車牌可疑區域的比較,但是,該方法受光照的影響比較大。基于模板匹配的方法[2]廣泛用于車牌字符識別技術中,但是該類方法易受噪聲等因素的影響。支持向量機(support vector machine,SVM)分類器也被應用于車牌字符識別[3]。基于SVM的車牌字符識別方法需要指定提取的特征,不同特征的選擇將直接關系到車牌字符識別的效果。
本文采用的車牌識別流程主要包括以下幾個部分:車牌圖像預處理、車牌定位、車牌字符分割、車牌字符識別,如圖1所示。

圖1 車牌識別流程Fig.1 License plate recognition process
本文針對生活中經常出現的車牌,設計了一套車牌圖像預處理及車牌定位流程,具體流程如圖2所示。

圖2 車牌圖像預處理及車牌定位過程Fig.2 License plate image preprocessing and license plate location process
由于自然環境、拍攝設備和拍攝方位等客觀因素,在獲取車牌圖像的過程中會出現圖像模糊不清的情況,需對圖像進行一定程度的預處理操作[4]。
1.1.1 彩色圖轉灰度圖
將三通道的彩色圖像轉換成單通道的灰度圖。將采集的車牌圖片轉換成灰度圖,轉換結果如圖3所示。

圖3 彩色圖轉灰度圖Fig.3 Color picture to gray picture
1.1.2 高斯濾波
高斯濾波是一種線性平滑濾波,可以消除高斯噪聲。圖4是灰度圖經過高斯濾波后的圖像。

圖4 高斯濾波Fig.4 Gaussian filter
1.1.3 邊緣化檢測
常用的邊緣檢測算子有Canny算子、Sobel算子、Laplacian算子等[5],本文采用Canny算子進行邊緣檢測。Canny算子邊緣檢測結果如圖5所示。

圖5 Canny算子邊緣檢測Fig.5 Canny operator edge detection
1.2.1 圖像形態學操作
對預處理完的圖像進行開運算,進行先腐蝕后膨脹的過程。開運算可以用來消除小物體,在纖細點處分離物體,并且在平滑較大物體的邊界的同時不明顯改變其面積。
1.2.2 查找輪廓,精確定位
根據車牌的面積、長寬比等對所得的矩形進行過濾。車牌定位結果如圖6所示。

圖6 車牌定位結果Fig.6 License plate location result
字符分割的目的就是將車牌中所有的文字分割開來,形成單一的字符塊,圖7為字符分割過程。

圖7 字符分割過程Fig.7 Character segmentation process
圖8為字符分割的最終結果。

圖8 車牌字符分割結果Fig.8 License plate character segmentation results
卷積神經網絡(Convolution Neural Network,CNN)一般由多個卷積層以及池化層交替而成,最后,再通過全連接BP神經形成輸出。其整體架構是一種多層監督學習的神經網絡,通過學習大量的輸入輸出樣本,用卷積神經網絡進行訓練,再根據新的輸入,輸出擬合之后的結果。本文提出的基于卷積神經網絡的車牌字符識別方法由2部分構成:第1部分,輸入待訓練圖像集訓練分類模型;第2部分,將待識別的車牌字符圖像輸入訓練好的模型進行識別。
在卷積層,前一層的特征圖與一個可學習的核進行卷積,卷積的結果經過激活函數后的輸出形成這一層的特征圖。一般地,卷積層的形式如:

池化是縮小高、長方向的空間的運算。將2×2的區域集約成1個元素,縮小空間大小。本次車牌定位使用的最大池化(max_pool)也就是選取最大值的運算。步幅的大小是2,車牌的圖像大小都是136×36,在經過2次池化后,得到的是34×9。池化層和卷積層不同,沒有要學習的參數。池化只是從目標區域中取最大值或者平均值,所以不存在要學習的參數。池化有一個優點是對微笑位置的變化具有魯棒性,輸入數據發生微笑偏差時,池化仍會返回相同的結果。池化會細搜輸入數據的偏差。
全連接層中需要先把前兩個卷積層的輸出結果全部flatten,這里使用tensorflow.reshape使每個樣本變成一維向量。在全連接層最后得到一個2列的矩陣。
本文將總共12 000張圖片(包括省份、數字和字母圖片)作為數據集,其中9 000張作為訓練集,剩余3 000張圖片作為測試集,并通過shuffle函數隨機將數據集排列,最終保存訓練后的權重。卷積使用tensorflow.nn.conv2d函數,池化使用tensorflow.max_pool函數,最后添加softmax函數可以使模型的準確率提高。圖9為訓練模型字符識別結果。

圖9 訓練模型字符識別結果Fig.9 Training model character recognition results
本文在充分利用車牌特征的基礎上,實現了車牌定位和字符分割,提出了一種基于CNN的車牌識別方法。實驗表明,此方法識別車牌準確率高。由于目前在車牌識別中主要針對的是國內車牌,無法識別國外以及新能源車牌。在實際應用中,還需進一步增加樣本數量及網絡訓練次數[6],改變網絡結構,以進一步提高正確率。