陶星珍,李康順,劉 玥
(1.江西應用技術職業學院 信息工程學院,江西 贛州 341000;2.華南農業大學 數學與信息學院,廣州 510642)
隨著城市發展,地面“停車難、亂停車”現象不斷加劇,嚴重影響了城市環境和交通秩序,地下車庫智能化的發展是必然趨勢。智能停車場中車牌的識別是關鍵技術之一,由于車牌識別系統中圖像是從應用環境中獲取,受地下停車場的光照、坡度等因素的影響, 獲取的圖像質量不高,使得分割出的車牌字符存在著斷裂、粘連、模糊、毛刺等問題[1],因此如何準確地識別出車牌字符成為難點[2]。
對車牌識別問題,主要解決方法分為兩大類。第一種,將車牌字符分割后再識別;第二種是不分割車牌字符而直接識別。金亞飛[3]針對復雜場景中車牌識別采用了第一種方法,先對車牌字符添加矩形框來分割字符,采用傳統圖像處理技術,然后用卷積神經網絡對字符進行識別,識別率最高達到97.3%。周文婷[4]僅對車牌中首字符漢字進行垂直投影分割,其余字符不分割,對漢字和剩余字符分別設計識別網絡,識別率達到97.6%。張文超等[5]運用第二種方法,提出一種車牌定位到識別通道化模型,該模型不需要分割字符,實現車牌的一次性識別,通過在識別模型中共享卷積神經網絡,實現字符的多任務分類,同時降低了對復雜背景環境對字符識別的影響;模型應用在車牌識別中取得較好效果,識別率達到94.56%。曹正鳳等[6]針對傳統的車牌檢測和識別任務,提出一個可以同時完成車牌的檢測和無分割識別任務的模型,不僅可以避免誤差的累積,而且可以進一步加速神經網絡的收斂,提高神經網絡的泛化性,識別率達到95.4%。
對比兩種識別方法,由于車牌中的字符特征各不相同,沒有統一的輪廓,尤其漢字特征復雜,對于同時識別車牌所有字符,會導致識別率低,第一種方法識別率明顯高與第二種。因此,本文提出一種車牌字符識別網絡LeNet-5-L,將車牌字符識別分為兩個階段,首先運用OpenCV庫函數和垂直投影字符分割方法對車牌進行識別前的預處理,依次進行車牌圖像二值化、車牌字符分割,分割后的單個字符結構特征相對簡單,降低卷積神經網絡特征提取難度,從而提高字符識別速度;然后運用卷積神經網絡對圖像進行字符識別,通過對經典字符識別網絡LeNet-5進行修改,設計一種能完成車牌字符分類的卷積神經網絡LeNet-5-L,解決車牌中漢字字符識別率不高的問題。
為了提高圖像中字符的識別率,對于由多字符組成的圖像,一般在字符識別前先進行字符分割,即把圖像中的每一個字符從圖像中分離出來,降低識別難度。常用的字符分割方法有投影法、基于聚類分析法及模板匹配法等。對于車牌圖像中字符分割,由于其字符排列整齊,一般采用投影分割法[7]。
投影分割方法的基本思路就是對圖像進行行列掃描,橫向掃描,切割出行字符,在對行字符進行總線掃描,分割出每個字符。該方法首先將圖像進行二值化后,得到黑白圖像,一般黑色為背景,接下來只需對圖像像素灰度值按垂直方向累加。具體分割原理分為3個階段:
1)確定字符最大高度。通過水平方向投影,獲取圖像的直方圖,分析直方圖,計算出圖像中字符的最大高度,以及圖像邊框位置。
2)去除第一步后確定的圖像邊框。
3)確定字符分割間距。通過對步驟2)之后的圖像進行垂直方向的投影,獲得直方圖,計算出圖像中字符間最大中心距,從而確定分割閾值。
4)運用步驟3)中的分割閾值,完成圖像中字符分割。
投影分割法運用廣泛,許多開發工具包實現了該功能,經常被應用在車牌、輪渡等標識的分割任務中。這種分割方法程序算法簡單,程序員可以運用簡單的控制語句實現,同時程序簡潔,系統可以快速執行,節省分割時間。
字符識別技術是指從圖像圖形數據中自動提取字符信息,并且進行字符識別[8]。目前,字符識別方法主要有字符模板匹配法、字符特征統計法和機器學習方法等[9]。
1.2.1 基于模板匹配的字符識別
模板匹配是圖象識別方法中使用非常早的一種方法,由于使用簡便,至今仍廣泛應用。它的識別思路是:從圖像或圖像區域I(i,j) 中提取的若干特征向量,接著與事先構造好模板T(i,j) 中對應的特征向量逐個進行比對?;谀0迤ヅ涞淖址R別方法將字符識別分為三個步驟: 首先將要識別字符圖像處理為黑白圖像,同時修改二值化后的字符圖像尺寸,使其尺寸與模板庫圖像一致,然后與模板庫中的字符一一比對,最后匹配系數最優的為最終識別結果。計算匹配系數采用如式(1):
(1)
其中:R(x,y)閾值的取值為[0,1]。
1.2.2 特征統計字符識別法
基于特征統計的識別與模板匹配方法一樣需要進行匹配工作,但是該方法的模板庫更為復雜,需要構建的不同字符的特征集合。在進行字符識別時首先建立每個字符的特征向量,并將字符特征分類,比如外輪廓特征、筆畫變化特征和內部結構特征等,需要經過大量的統計才能得到所用的特征集合,最后將字符特征與字符庫特征集合進行匹配,得出待識別字符的識別結果。
1.2.3 深度學習字符識別法
深度學習的強大的圖像特征提取功能,近年來大量地運用在字符識別中,深度學習識別方法需要先對對象預處理之后,采用卷積操作對圖像提取特征,最后對提出的特征進行組合完成字符識別。其中特征提取可以采用人工提取特征或者卷積神經網絡來提取圖像特征[11]。卷積神經網絡是當前最適合做字符識別的一種神經網絡模型,具有局部感知野和權值共享的特征,極大地減少了計算復雜度,對于簡單分類或特定對象的分類,通過借用機器學習的方法,只需要比較少的數據集可以達到一個比較好的效果[12]。卷積神經網絡最基本的架構包括卷積層、池化層、全連接層。
1)卷積層。卷積運算是卷積神經網絡的基石,該運算的目的是提取輸入圖像的不同區域的特征信息,為圖像識別做好準備。網絡中可以由多個卷積層,從低層到高層,分別提取淺層特征和高級特征。卷積操作過程如圖1所示,對輸入的圖像進行卷積操時,需要設計一個可訓練的濾波器fx向量,計算時用該向量乘以一個輸入的對象(第一層卷積對象為輸入圖像向量,后面卷積對象為上一層卷積特征圖向量),然后加一個偏置向量bx,得到卷積層Cx。

圖1 卷積運算過程
卷積操作中卷積核大小的設計和卷積核窗口滑動的大小是關鍵參數[13]。卷積層計算是通過矩陣來完成操作的,步長不夠時需要進行填充操作,填充大小根據情況而定。卷積層通過權值共享降低計算量,一個神經元就代表圖像的一個特征,一層卷積操作完成圖像的一次局部特征提取[14]。卷積操作可以使特征提取效果不降低的前提下,大大減少了參數數量,有效防止了過擬合問題。卷積層的過濾器定義如下:
(1)觀察窗口大小F一般都是奇數(1*1、3*3、5*5);
(2)窗口移動的步長S為每次移動的像素大小,一般為一個像素;
(3)計算公式:輸入體積大小為H1*W1*D1,4個參數Filter數量K,Filter大小F,步長S,零填充大小P,輸出體積大小為H2*W2*D2。
H2=(H1-F+2P)/S+1
(2)
W2=(W1-F+2P)/S+1
(3)
D2=K
(4)
通過上述公式,計算出網絡中某一層通過卷積操作之后通道組成情況。
2)池化層。池化的過程和卷積的過程有些類似,同樣采用過濾器方式,但計算方式不同,池化層中采用最大池化和平均池化的操作,也就是說在一個過濾器尺寸內求矩陣的最大值或者平均值,圖像中相鄰的特征總會相似,所以可以除掉特征圖中一些不重要的特征數據,從而減少卷積操作時的參數數量[15]。 深度學習中的池化操作過程如圖2所示,相鄰的4個像素通過求和變為一個像素,然后對它進行加權Wx+1,同時加偏置矩陣bx+1,最后通過一種激活函數sigmod,得出特征圖Sx+1,該特征圖大小僅有原特征圖的四分之一。

圖2 池化運算過程
在池化層中,可以有效地縮小特征圖矩陣的大小,但深度一般不會改變,從而有效減少全連接神經網絡中的參數,以達到加快計算速度和防止過擬合問題出現的效果。根據車牌特點,有些字符之間相似,為了提高識別準確率,采用最大值池化,從而保留更多的邊緣特征。
3)全連接層。卷積神經網絡中的卷積層和池化層主要完成圖像局部特征提取,那么全連接層的功能就是將前面提取的局部特征進行整合,即將前面卷積操作輸出的二維特征圖轉化成一維向量,達到分類效果,實際上全連接層在整個卷積神經網絡中充當“分類器”的角色[16-17],計算過程如圖3所示。

圖3 全連接計算過程

z=w*x+b
(5)
令:
x=|x1x2|
則:
a(1)=|a1a2a3|=x*w(1)
y=a(1)*w(2)
LeNet-5模型是Yann LeCun教授于1998年在論文《Gradient-based learning applied to document recognition》中提出的,用于手寫體字符識別[18],對MNIST數據集的分識別準確度可達99.2%,它是一種高效的字符識別卷積神經網絡。LeNet-5模型一共有7層[19-20],LeNet-5模型的架構如圖4所示。

圖4 LeNet-5卷積神經網絡結構
由于LeNet-5網絡包含了卷積神經網絡中的卷積層,池化層,全鏈接層所有基本層,是一種非常好的參考模型的[21]。對LeNet-5各層計算原理進行深入分析,加深對與卷積層和池化層的理解,為設計車牌字符識別網絡奠定基礎,下面對LeNet-5的每一層進行詳細的分析。
1)輸入層Input:該層輸入圖像,圖像需要經過預處理,將尺寸歸一化為32*32,該層僅為輸入識別對象,并不是LeNet-5網絡的計算層。
2)卷積層C1:輸入圖像后,經過 6 個可訓練的5*5卷積核進行卷積操作,得到特征圖C1,卷積操作過程如圖5所示。由前面卷積原理和公式(3)可知,輸出特征圖尺寸大小為(32-5+1)*(32-5+1)=28*28,神經元數量為6*28*28,在C1 層產生6 個 28*28 的特征向量圖,可訓練參數有6*(5*5+1)=156,連接數為(5*5+1)*6*28*28=122 304,為了加快網絡訓練,需要減少連接數,由于局部像素關聯性較強,所以神經元在空間維度進行局部連接,同時通過統一深度切片權值共享實現連接數大幅下降。

圖5 卷積計算原理
3)池化層S2:將C1層中的尺寸為28*28的特征圖,經過6個2*2采樣區域,得到池化層S2。輸出尺寸為(28/2)*(28/2)=14*14,特征圖尺寸大小為C1的1/4。計算過程如圖6所示,首先是2*2單元里的值相加,然后再乘以訓練參數w,再加上一個偏置參數b,然后取sigmoid值(S函數:0-1區間),作為對應的該單元的值。

圖6 池化計算原理
4)卷積層C3:第一次池化后得到的S2經過16個5*5卷積核進行卷積操作,得到C3。格局公式(3)得到輸出特征圖尺寸大小為(14-5+1)*(14-5+1)=10*10,由于S2有6個14*14 的特征圖,C3有16個10*10特征圖,這樣的不對稱性連接,需要對S2的特征圖特殊組合計算才能得到的16個特征圖。具體如圖7所示,C3的前6個特征圖(0~5)與S2層中相鄰的3個特征圖映射,后面6個特征圖(6~11)與S2層中相鄰的4個特征圖映射,后面3個特征圖(12~14)則與S2層部分不相連的4個特征圖映射,只有最后一個特征圖(15)與S2層的所有特征圖相連。

圖7 S2到C3映射關系
5)池化層S4:與S2層類似,C3經過16個2*2卷積核池化操作之后得到S4,該層與C3一樣共有16個特征圖,每個特征圖的大小為(10/2)*(10/2)=5*5,S4的大小為C3的1/4,連接的方式與S2層類似。
6)卷積層C5:將S4層的所有特征圖經過120個5*5卷積核進行卷積之后得到C5。該層大小為(5-5+1)*(5-5+1)=1*1,從而達到完成向量化,輸入到全連接神經網絡,輸出120*1*1個神經元。
7)全連接層F6:C5的120個神經元經過最后一次卷積操作得到F6。計算輸入向量和權重向量之間的點積,再加上一個偏置,結果通過sigmoid函數輸出。
F6層有84個節點,對應于一個7x12的比特圖,-1表示白色,1表示黑色,這樣每個符號對應的比特圖中的黑白色就對應于一個編碼。ASCII編碼如圖8所示。

圖8 ASCII編碼圖
8)輸出層Output: 輸出層由10個歐幾里得徑向基函數RBF(Radial Basis Function)核構成,計算公式如式(6)所示:
(6)
式中,x是上一層的輸入,y是RBF函數的輸出,代表輸入字符x的編碼與ASCII編碼的差值,wij的值由i的比特圖編碼確定,i從0到9,j取值從0到7*12-1。RBF函數輸出的值反應了識別字符與ASCII編碼的差異大小,如果差異越小,也就是越接近于0 ,則為字符i的概率越大。
針對漢字字符識別正確率低和速度慢的問題,本文提出一種基于深度學習的字符識別網絡LeNet-5-L,將該字符識別網絡運用在車牌識別中,把車牌字符識別分為兩個階段。首先運用傳統字符識別方法對車牌進行字符分割,減少識別目標干擾因素,降低特征提取難度,從而提高字符識別率;然后運用高效的卷積神經網絡對圖像提取特征,通過對經典字符識別網絡LeNet-5進行修改,設計一種能完成車牌字符分類的卷積神經網絡,解決車牌中漢字識別率低的問題。網絡結構如圖9所示,圖中上面部分為車牌字符分割,下面部分為字符識別卷積神經網絡LeNet-5-L。

圖9 基于LeNet-5-L的車牌字符識別過程
通過觀察圖10所示的車牌可知,車牌字符具備有不同類別字符特征,特征區分明顯,同一類別的字符變化性小,并且底色為藍色,容易進行字符輪廓提取及分割。因此,在字符識別網絡的第一個階段,完成車牌字符分割,為設計一個簡化高效的卷積神經分類網絡提供基礎。

圖10 車牌字符組成結構
本文充分結合車牌自身的特點,車牌尺寸一致、為單行字符、字符間距一致、高度一致等等,對車牌區域進行垂直方向的投影,利用車牌中各個字符之間的空白間隙,將車牌中的7個字符圖像依次切割開來。本文采用Python+OpenCV庫完成車牌字符分割,OpenCV庫中實現了圖像處理和計算機視覺方面的很多通用算法方法,在程序中引用該庫,可以很方便對字符進行分割以及二值化處理,具體流程如下。
第一步:調用函數imread()讀取圖像,通過函數cvtColor()將圖像轉換為灰度圖像,并用函數imshow()顯示處理之后的圖像,處理結果如圖11所示。

圖11 車牌灰度圖
第二步:調用庫函數threshold()將灰度圖像二值化,設定閾值是100,處理結果如圖12所示。

圖12 車牌二值化效果
第三步:通過函數imwrite()保存黑白圖片。
第四步:分割字符,經過了預處理后的圖像干擾少,易于分割,車牌字符間大小一致,排列規則,本文選擇垂直投影分割法,具體分割流程如圖 13所示。

圖13 字符分割流程圖
車牌字符分割后得到圖14所示的7張獨立圖像,這樣處理后使得圖片含的有效信息更加突出,干擾信息大大降。從而降低了深度學習網絡識別的難度。對于這樣的輸入數據,通過深度學習理論可知,只需要極少的數據訓練一個簡單的網絡就能完成分類任務,而不會出現過擬合和欠擬合現象。

圖14 車牌字符分割
經過前面對識別圖像的預處理之后,由于車牌中的字符種類多、漢字特征復雜,如果繼續采用傳統特征提取方法,比較困難,為此我們選用深度學習網絡結構LeNet-5 作為我們的字符識別第二個階段的分類網絡,運用卷積神經網絡的高效特征提取能力,提高識別效率。
LeNet-5用于10個手寫體數字字符識別取得了很好的效果,它包含了深度學習的基本模塊:卷積層、池化層及全鏈接層,是設計其他深度學習模型的基礎,前面我們已經對該網絡進行了詳細的分析。然而該網絡最初是用于識別手寫數字的,輸入的類別數目為 10 個,車牌與數字相比,除了 10 個阿拉伯數字,還包括31個漢字和24個英文字母,所以針對車牌字符組成與手寫數字之間的區別,對傳統的 LeNet-5 進行重新構建,設計一種結構簡潔的字符識別卷積神經網絡LeNet-5-L,用于字符分類,如圖15所示。

圖15 卷積神經網絡LeNet-5-L結構
傳統LeNet-5網絡是一個7層卷積神經網絡,為了提高車牌中的相似字符漢和字的識別率,結合前面介紹的卷積神經網絡原理,將卷積層C5改為全連接層Fc5,同時增加全連接層Fc7,卷積神經網絡LeNet-5-L各層參數配置設計如表1所示。

表1 LeNet-5-L參數配置
本文設計的車牌字符識別網絡LeNet-5-L將字符識別分為3個階段,首先是運用兩層卷積層和兩層池化層提取字符的局部特征,然后運用三層全連接層將局部特征組合得出全局特征,最后在輸出層采用函數softmax()輸出字符分類概率值。模型用于車牌字符識別,輸出互斥類別,故選用函數softmax()對輸出結果進行處理,該函數如式(7)所示,其中而約等于2.718 28。
(7)
對經典卷積神經網絡模型LeNet-5進行調整,主要有如下調整:
1)增加全連接層:考慮到實驗環境和實驗數據集的局限性,減少一層卷積層,防止因數據集少造成的過擬合現象。同時為了提取更多的特征信息,增加兩層全連接層,目的是提高網絡分類的維度,由于特征表較復雜,前面幾層卷積層提出出來的特征信息還無法實現線性可分,增加全連接層可以讓網絡在更高的維度去對待特征,從而進行分類。
2) 輸出層類別增加:中國民用車牌由65種字符組成,而經典LeNet-5為手寫阿拉伯數字識別問題,輸出層為10個字符標簽,所以本文將輸出層更改為65個獨立通道,輸出識別字符及概率值。
實驗運行環境為Win10 64 位操作系統,CPU為因特爾i5,主頻率為 3.2 GHz,內存大小為 4 GB,采用TensorFlow程序框架進行程序編輯。數據集來自網絡收集,總共有圖片5 771張,每張圖片均由一個字符組成,部分數據集圖像如圖16所示。

圖16 車牌字符數據集樣本
神經網絡工作過程分為3個步驟:首先建立神經網絡;然后,將測試數據輸入到神經網絡進行訓練,得到需要的網絡模型;最后,將測試數據輸入到訓練得到的網絡模型中,獲取識別結果。將本文設計的網絡運用在車牌識別中,首先對車牌字符分割,將分割后的每一個字符輸入到訓練后的卷積神經網絡中,輸出識別結果和對應的概率值(0~1)。實驗流程如圖17所示。

圖17 LeNet-5-L網絡模型識別過程
具體實驗步驟如下:
1)對數據進行分類整理,分為訓練數據集和驗證數據集。訓練數據集圖片個數為5 539張,驗證數據集圖片個數為232張。
2)讀取數據。首先在程序中建立圖片文件路徑以及對應標簽的列表,然后使用TensorFlow官方接口依據列表數據按隨機隊列的方式讀取圖片。
3)預處理數據。對于讀取到的圖片數據需要做兩步處理。首先重新調整尺寸為32*32*1,使數據能夠輸入到模型中。然后做增強數據處理,主要操作就是隨機裁剪字符圖片。這樣做主要是防止數據量過少,網絡訓練不出來。
4)訓練模型。把處理后的數據輸入給模型,啟動梯度計算,并更新權值參數。通過觀察正確率變化結果調整超參數,最后調試結果。在實驗中設置超參數值如下:訓練輪數設為256。學習速率為0.001。
5)驗證模型效果。把驗證數據輸入到訓練好的模型里,得出正確率,如果跟訓練時正確率相差不多,說明網絡已經訓練成功,訓練結果如圖18所示,整個網絡訓練時間約1.5 h。

圖18 LeNet-5-L網絡模型訓練完成結果圖 圖19 LeNet-5-L網絡模型車牌識別結果
6)對模型進行測試。讀取車牌,進行預處理,二值化圖像,分割出車牌中獨立的7個字符圖片,然后輸入到卷積神經網絡模型中,得出預測結果,如圖19所示。
為了更好地測試模型識別效果,開發了一個小型應用測試系統,其中車牌定位是基于邊緣和顏色特征,具體算法如下:
1)高斯去噪,去掉圖像中不會是車牌的區域,找到圖像邊緣,使用開運算和閉運算讓圖像邊緣成為一個整體,查找圖像邊緣整體形成的所有矩形區域,車牌就在其中一個矩形區域中;
2)根據矩形區域長寬比在2~5.5之間參數要求,一一排除不是車牌的矩形區域;
3)矯正矩形的傾斜問題,避免車牌邊緣被排除;
4)根據車牌顏色再定位,縮小邊緣非車牌邊界,最終得到車牌矩形。
實驗選取多張車輛正前面照片作為測試對象,將文中設計的卷積深度網絡作為識別網絡,測試結果如圖20所示。

圖20 車牌識別測試結果
運用本文提出的字符識別網絡,運用在車牌識別中,通過選取10張不同車牌圖像進行測試,車牌中字符的識別率均高于99.97%,整個車牌識別平均時間為0.83 ms。與其它識別算法比較結果如表2所示,表中識別算法均為車牌的字符識別,識別模型訓練數據集同為省份漢字、字符和數字,算法應用在車牌測試時,選取的車牌圖像不同,但車牌規格一致,不影響比較結果。結果表明本文針對地下停車場設計的車牌字符識別算法,識別率高,識別時間短,能夠實現車輛快速出入。

表2 車牌字符識別算法比較 %
本文提出了一種基于深度學習的車牌字符識別算法,該算法將傳統字符識別方法和卷積神經網絡結合,將該算法運用在車牌識別中,字符識別正確率均高于99.97%,同時識別單張車牌時間僅需0.83 ms,比傳統字符識別速度快,同時比端到端車牌識別方法識別率高,從而有效解決地下停車場因車牌識別效率低而導致的車輛出入緩慢問題。本文重點設計了網絡模型訓練數據為分割之后的字符圖片,所以在最后的整體測試中,整體車牌的識別情況會受到車牌定位和字符分割的影響,將在今后的研究中繼續改進。