高艷 劉海峰
摘? 要:車牌識別在高速收費口、小區(qū)車輛出入口、停車場自動收費系統(tǒng)等方面得到越來越多的應(yīng)用,這在一定程度上可以減少交通道路的擁擠,緩解交通壓力。本文應(yīng)用OpenCV庫相關(guān)功能完成車牌的定位以及字符的分割,在此基礎(chǔ)上利用TensorFlow框架的Keras模塊搭建卷積神經(jīng)網(wǎng)絡(luò),對車牌中的漢字、數(shù)字和字母分別進(jìn)行識別,其中車牌漢字模型評估的準(zhǔn)確率為92.4%,數(shù)字和字母一起識別模型評估的準(zhǔn)確率為95.6%,識別效果較好。
關(guān)鍵詞:車牌定位;字符分割;卷積神經(jīng)網(wǎng)絡(luò);車牌識別
中圖分類號:TP391.41? ? ?文獻(xiàn)標(biāo)識碼:A
Research on License Plate Recognition based on OpenCV and?Convolutional Neural Network
GAO Yan, LIU Haifeng
(Jinzhong College of Information, Taigu 030800, China)
Abstract: License plate recognition is being used more and more widely in high-speed toll gates, community vehicle entrances and exits, parking lot automatic toll collection systems, etc., which can reduce traffic congestion to a certain extent and relieve traffic pressure. This paper proposes to use the functions of the OpenCV library to complete license plate positioning and the segmentation of the characters. On this basis, a convolutional neural network is built by using Keras module of TensorFlow framework for recognizing the Chinese characters, numbers and letters in the license plate. The accuracy rate of the license plate Chinese character model evaluation is 92.4%, and the accuracy rate of model evaluation for identifying numbers and letters together is 95.6%, which verifies a good recognition effect.
Keywords: license plate positioning; character segmentation; convolutional neural network; license plate recognition
1? ?引言(Introduction)
隨著人們經(jīng)濟(jì)生活水平的提高,汽車逐漸成為每個家庭的代步品,因而城市車流量也在不斷增加[1]。在停車場、高速收費口、違規(guī)停車監(jiān)控以及小區(qū)車輛出入監(jiān)控系統(tǒng)等領(lǐng)域充分應(yīng)用攝像頭進(jìn)行車牌識別,能夠加快車輛的通行速度,解決違規(guī)違章停車等情況,從而有利于減少道路擁擠情況的發(fā)生,緩解交通壓力。
車牌識別的主要流程包括圖像預(yù)處理、車牌定位、車牌字符分割、車牌字符識別四個步驟。圖像預(yù)處理主要是針對拍攝到的包含車牌的圖像存在噪聲、光線比較暗等問題,可以通過高斯濾波、灰度拉伸、直方圖均衡化等方法對圖像進(jìn)行處理。很多學(xué)者采用不同的算法對車牌定位進(jìn)行了研究,主要是傳統(tǒng)的基于形態(tài)學(xué)特征和顏色特征的車牌定位方法,以及近些年流行的深度學(xué)習(xí)的方法,如常巧紅等[2]基于HSV色彩空間和數(shù)學(xué)形態(tài)學(xué)的方法進(jìn)行車牌定位;馬巧梅等[3]基于改進(jìn)的YOLOv3算法進(jìn)行車牌定位。
定位到車牌后,保存車牌的圖像,進(jìn)行下一步的車牌字符分割和字符識別。車牌字符分割采用的主要方法有基于垂直投影的方法和基于連通閾的方法。車牌分割之后對漢字、數(shù)字和字母進(jìn)行識別,具體識別的方法也分為傳統(tǒng)的方法和深度學(xué)習(xí)的方法。傳統(tǒng)的方法包括模板匹配、利用SVM分類器進(jìn)行字符識別[4],以及在SVM分類之前加入HOG特征的提取再進(jìn)行字符識別[5];深度學(xué)習(xí)的方法包括LeNet-5-L、CNN等[6-7]。另外,有些學(xué)者在進(jìn)行車牌定位后不進(jìn)行車牌字符分割,直接應(yīng)用深度學(xué)習(xí)模型進(jìn)行車牌的識別,如胡逸龍等[8]對YOLO模型進(jìn)行改進(jìn),得到Y(jié)OLO_Plate模型對車牌進(jìn)行識別。
OpenCV庫是開源的計算機(jī)視覺庫,采用C語言和C++語言編寫,并提供了Python語言的接口。本文利用OpenCV庫首先對車牌進(jìn)行預(yù)處理,在此基礎(chǔ)上應(yīng)用數(shù)學(xué)形態(tài)學(xué)的方法結(jié)合HSV色彩空間進(jìn)行車牌定位和識別車牌顏色,之后對車牌進(jìn)行字符分割,最后應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)分別對車牌中漢字、數(shù)字和字母進(jìn)行識別。
2? ?車牌定位(License plate positioning)
2.1? ?圖像預(yù)處理
(1)圖像去噪
OpenCV庫提供的圖像去噪方法有均值濾波、高斯濾波、中值濾波等。中值濾波可避免噪聲對圖像的干擾,也能保持像素的邊界清晰,因而本文對圖像采用中值濾波進(jìn)行去噪處理。
(2)灰度化
彩色圖像含有大量的顏色信息,如果直接對彩色圖像進(jìn)行處理,需要占用大量的資源,影響圖像處理的速度,因而需要將彩色圖像轉(zhuǎn)化為灰度圖像。
本文只對圖像進(jìn)行了上述兩個步驟的圖像預(yù)處理,實際上還可以進(jìn)行圖像對比度等的處理。圖1為原始的車牌圖像,圖2為經(jīng)過濾波及灰度化后的車牌圖像。
2.2? ?車牌定位過程
(1)邊緣檢測
邊緣檢測最常用的方法是應(yīng)用Sobel算子和Canny算子進(jìn)行檢測。Canny算子先對圖像進(jìn)行高斯濾波,再進(jìn)行差分運算,最后利用雙閾值判斷檢測邊緣,因而具有良好的邊緣檢測效果[9]。本文采用Canny算子進(jìn)行車牌圖像邊緣檢測,結(jié)果如圖3所示。
(2)形態(tài)學(xué)運算
形態(tài)學(xué)運算包括膨脹、腐蝕、開運算和閉運算。開運算是先對圖像進(jìn)行腐蝕操作,再對腐蝕結(jié)果進(jìn)行膨脹操作。閉運算與開運算相反,它是先對圖像進(jìn)行膨脹操作,再對膨脹結(jié)果進(jìn)行腐蝕操作。這些運算會根據(jù)內(nèi)核的大小邊緣檢測結(jié)果中的白色區(qū)域并進(jìn)行放大和縮小,另外還可以在X方向和Y方向指定不同的核進(jìn)行運算。本文在邊緣檢測結(jié)果的基礎(chǔ)上進(jìn)行一系列開、閉運算以及腐蝕和膨脹運算,最終得到如圖4所示的結(jié)果。
(3)輪廓檢測
在形態(tài)學(xué)運算的基礎(chǔ)上,應(yīng)用OpenCV庫的findContours函數(shù)可以對白色區(qū)域進(jìn)行輪廓的繪制,應(yīng)用minAreaRect函數(shù)可以得到最小面積下每個輪廓的寬度和高度。根據(jù)我國機(jī)動車車牌的規(guī)定:小型汽車車牌外廓尺寸為440 mm×140 mm;大型汽車車牌前外廓尺寸為440 mm×140 mm,后外廓尺寸為440 mm×220 mm;新能源汽車車牌外廓尺寸為480 mm×140 mm,因而可以得到車牌寬度和高度的比為2—3.5。由于在獲取車牌過程中可出現(xiàn)車牌傾斜等問題,本文將寬度和高度比為2—4的所有輪廓都找到,之后在找到的所有輪廓中根據(jù)顏色特征確定是否屬于車牌。
(4)車牌矯正
由于拍攝角度等問題,會導(dǎo)致拍攝的車牌圖像出現(xiàn)水平傾斜或垂直傾斜。本文在找到輪廓并得到輪廓的最小外接矩形的基礎(chǔ)上,根據(jù)車牌具體的不同傾斜情況,應(yīng)用warpAffine函數(shù)對原始圖像及可能傾斜的矩形進(jìn)行仿射變換,并提取出可能是車牌的區(qū)域。原始圖像進(jìn)行矯正之后的結(jié)果如圖5所示。
(5)結(jié)合HSV顏色空間確定車牌位置及顏色
獲取的車牌圖像一般是RGB圖像,將車牌圖像經(jīng)過色彩空間變化轉(zhuǎn)換到HSV顏色空間。在HSV空間中H值代表的是顏色,根據(jù)實驗將在11—34范圍的確定為黃色,在35—99范圍的確定為綠色,在100—124范圍的確定為藍(lán)色。本文在確定可能是車牌的區(qū)域后,在HSV顏色空間對車牌位置和車牌顏色進(jìn)行確定。車牌定位的結(jié)果如圖6所示。
3? ?字符分割(Character segmentation)
字符分割是從定位到的車牌區(qū)域中提取字符。本文采用垂直投影的方法進(jìn)行字符分割,具體步驟如下:
(1)將定位到的車牌圖像進(jìn)行灰度化。
(2)應(yīng)用自適應(yīng)閾值對圖像進(jìn)行二值化處理。
(3)根據(jù)圖像的寬度和高度,遍歷行和列得到每一列中白色像素點和黑色像素點的值,并得到列方向上白色像素點和黑色像素點的最大值。當(dāng)某一列的白色像素點的個數(shù)大于白色像素點最大值的0.05 倍(此參數(shù)可調(diào)整)時,當(dāng)前列就是字符分割的起點;當(dāng)某一列黑色像素點的個數(shù)大于黑色像素點最大值的0.95 倍(此參數(shù)可調(diào)整)時,當(dāng)前列作為字符分割的終點。最終通過得到的起點和終點對車牌進(jìn)行字符分割,分割結(jié)果如圖7所示。
4? ?字符識別(Character recognition)
傳統(tǒng)的字符識別方法首先需要進(jìn)行特征的提取,然后應(yīng)用機(jī)器學(xué)習(xí)的方法(如SVM分類器)完成識別。深度學(xué)習(xí)的方法會自動完成特征提取及字符識別。本文采用深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)完成字符識別。卷積神經(jīng)網(wǎng)絡(luò)主要包含卷積層、池化層和全連接層。
(1)卷積層
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心,每個卷積層由多個卷積核組成。卷積的目的是進(jìn)行特征的提取[10]。
(2)池化層
池化就是將圖片分成一個一個池子,每個池子輸出一個值。通過池化層可以減少圖像輸入的尺寸,又可以在一定程度上保留每個像素的值,是一種優(yōu)秀的減少參數(shù)的方法。池化包括最大池化和平均池化,根據(jù)實際情況可以選擇一種池化方法。
(3)全連接層
全連接是指全連接層的每一個節(jié)點都與上一層的所有節(jié)點相連,用來把前邊提取到的特征綜合起來。
(4)激活函數(shù)
早期的神經(jīng)網(wǎng)絡(luò)沒有引入激活函數(shù),只能解決線性問題,因而引入非線性激活函數(shù)可以解決更多實際問題,強化網(wǎng)絡(luò)的學(xué)習(xí)能力。常用的激活函數(shù)有sigmod函數(shù)、tanh函數(shù)和relu函數(shù)。相比sigmod函數(shù)和tanh函數(shù),relu函數(shù)提高了運算速度,解決了梯度消失問題,收斂速度快,因而本文在卷積層采用relu函數(shù)激活。
在神經(jīng)網(wǎng)絡(luò)的最后一層,要得到各種分類的概率作為預(yù)測結(jié)果,因此一般使用softmax激活函數(shù)。
(5)損失函數(shù)
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,往往采用基于梯度下降的方法不斷縮小預(yù)測值和真實值之間的差值,而這個差值就叫作損失(Loss),計算該損失的函數(shù)叫作損失函數(shù)(Loss Function)。在神經(jīng)網(wǎng)絡(luò)的回歸任務(wù)中常用的損失函數(shù)是均方誤差,在分類任務(wù)中常用的損失函數(shù)是交叉熵。
我國的車牌是由各省、自治區(qū)、直轄市簡稱的31 個漢字,以及24 個英文字母(不包含O和I)和9 個數(shù)字組成。本文采用TensorFlow下的Keras模塊分別對漢字、數(shù)字和字母(兩者一起)搭建同樣的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)分類器進(jìn)行訓(xùn)練,最后再應(yīng)用模型對車牌字符進(jìn)行識別。卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。在整個神經(jīng)網(wǎng)絡(luò)結(jié)果中,輸入圖像的尺寸為20×20 像素,包含兩個卷積層、兩個最大池化、兩個全連接層,卷積層采用relu激活函數(shù)。在第二個最大池化后為防止過擬合,加入Dropout層,丟棄率為20%;在第一個全連接層后為防止過擬合,加入Dropout層,丟棄率為50%。最后一個全連接用softmax激活函數(shù)完成特征分類。損失函數(shù)采用的是多分類交叉熵?fù)p失,優(yōu)化方法采用的是Adadelta及其默認(rèn)參數(shù)。收集的漢字圖片共6,200 張,字母和數(shù)字圖片共13,180 張,其中80%用作訓(xùn)練集數(shù)據(jù),20%用作測試集數(shù)據(jù),最終漢字模型評估的準(zhǔn)確率為92.4%,數(shù)字和字母神經(jīng)網(wǎng)絡(luò)模型評估的準(zhǔn)確率為95.6%。圖9為車牌識別結(jié)果。
5? ?結(jié)論(Conclusion)
本文通過OpenCV庫完成車牌圖像的預(yù)處理以及車牌定位和車牌分割,最后搭建卷積神經(jīng)網(wǎng)絡(luò)分別對車牌中的漢字、字母和數(shù)字進(jìn)行模型訓(xùn)練和評估,模型評估準(zhǔn)確率較好,能夠有效地進(jìn)行車牌識別。在整個車牌識別的流程中發(fā)現(xiàn),在車牌定位過程中形態(tài)學(xué)操作參數(shù)的設(shè)定比較重要,設(shè)定得不好可能會影響定位車牌的效果。另外,本文在車牌字符識別過程中搭建了一個神經(jīng)網(wǎng)絡(luò),分別對漢字和字母、數(shù)字進(jìn)行訓(xùn)練。結(jié)果顯示,漢字模型評估的準(zhǔn)確率較低,這是由于漢字相對來說比較復(fù)雜,在之后的研究中需要對漢字的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行進(jìn)一步的調(diào)整,以提高模型的準(zhǔn)確率。
參考文獻(xiàn)(References)
[1] 鄧嘉誠,黃賀聲,楊林,等.車輛牌照識別技術(shù)現(xiàn)狀[J].現(xiàn)代信息科技,2019(16):78-83.
[2] 常巧紅,高滿屯.基于HSV色彩空間與數(shù)學(xué)形態(tài)學(xué)的車牌定位研究[J].圖學(xué)學(xué)報,2013,34(4):159-162.
[3] 馬巧梅,王明俊,梁昊然.復(fù)雜場景下基于改進(jìn)YOLOv3的車牌定位檢測算法[J].計算機(jī)工程與應(yīng)用,2021,57(7):198-208.
[4] 聶文都,蔡錦凡.基于OpenCV與SVM的車牌識別方法[J].計算機(jī)與數(shù)字工程,2021(6):1244-1247,1268.
[5] 王汝心,馬維華.結(jié)合HOG特征的車牌識別方法[J].計算機(jī)時代,2021(7):1-5.
[6] 陶星珍,李康順,劉玥.基于深度學(xué)習(xí)模型LeNet-5-L的車牌識別算法[J].計算機(jī)測量與控制,2021,29(06):181-187.
[7] ZHAI W F, GAO T, FENG J. Research on pre-processing methods for license plate recognition[J]. International Journal of Computer Vision and Image Processing (IJCVIP), 2021, 11(1):47-79.
[8] 胡逸龍,金立左.基于深度學(xué)習(xí)方法的中文車牌識別算法[J].工業(yè)控制計算機(jī),2021(5):63-65.
[9] 朱克佳,郝慶華,李世勇,等.車牌識別綜述[J].現(xiàn)代信息科技,2018,2(5):4-6.
[10] 余海林,翟中華.計算機(jī)視覺[M].北京:清華大學(xué)出版社,2021:81-83.
作者簡介:
高? ?艷(1985-),女,碩士,講師.研究領(lǐng)域:大數(shù)據(jù),人工智能.
劉海峰(1987-),男,碩士,講師.研究領(lǐng)域:計算機(jī)應(yīng)用技術(shù).