吳林輝 楊晨耀 張文龍 蔣衛(wèi)祥
摘要:車牌識(shí)別系統(tǒng)在生活中的使用越發(fā)廣泛,占據(jù)重要地位。車牌識(shí)別一共分為圖像處理和字符識(shí)別兩部分。本文首先使用OpenCV技術(shù)定位車牌、分割車牌,接著應(yīng)用Tensorflow識(shí)別車牌字符。每個(gè)環(huán)節(jié)都是獨(dú)立出來的,能夠降低各層之間的耦合度,提高系統(tǒng)可維護(hù)性。其中車牌定位是一步非常關(guān)鍵的步驟,能夠精準(zhǔn)地定位出清晰的車牌能減少后續(xù)環(huán)節(jié)的誤差。系統(tǒng)具有較高的識(shí)別率,能夠精確地識(shí)別出彩色圖像中的車牌字符,具有一定實(shí)用價(jià)值。
關(guān)鍵詞:車牌識(shí)別;OpenCV;Tensorflow深度學(xué)習(xí);人工智能
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)01-0203-02
隨著科技的進(jìn)步和人民生活水平的提高,道路上的汽車隨之增多,汽車管理問題也引起了人們的重視。每輛車的車牌號(hào)都是唯一的,準(zhǔn)確識(shí)別出車牌號(hào)就能知道車主信息,降低了汽車管理難度。車牌識(shí)別的系統(tǒng)被大量運(yùn)用在道路上、車庫門禁、小區(qū)門口等。當(dāng)汽車經(jīng)過時(shí),就識(shí)別出車牌號(hào),如果是登記在冊或被允許通過的車輛,門桿就會(huì)自動(dòng)升起。運(yùn)用在道路上,就能記錄車輛實(shí)時(shí)動(dòng)態(tài)信息,方便交通管理。本文的車牌識(shí)別系統(tǒng)是通過OpenCV實(shí)現(xiàn)圖像處理和Tensorflow實(shí)現(xiàn)字符識(shí)別,編程語言采用Java,具有運(yùn)行環(huán)境簡單、軟件結(jié)構(gòu)清晰、識(shí)別效率高等特點(diǎn)。
1車牌識(shí)別系統(tǒng)的組成
車牌識(shí)別系統(tǒng)一般可分為車牌定位、車牌矯正、字符分割和字符識(shí)別四個(gè)部分,如圖1所示。
1.1車牌定位
車牌定位它主要是將車牌從復(fù)雜的背景中分割出來。車牌圖像容易受各種環(huán)境因素的影響,比如不同光照、不同天氣、不同角度、不同距離、車牌老舊褪色等都對(duì)準(zhǔn)確性造成了較大的影響。據(jù)我所知,現(xiàn)在有四種比較成熟的定位技術(shù),如采用顏色特性的定位算法、基于灰度邊緣的定位算法、基于小波的定位算法、基于監(jiān)督的車牌定位算法。這些算法都各有利弊,基本上都或多或少的受環(huán)境所影響,特別是受光照環(huán)境所影響。
本文所使用的是顏色定位算法,顏色定位法利用車牌的基本顏色特征,將原圖像在HSV顏色空間處理得到的二值圖像,在使用閉操作將二值圖像先膨脹再腐蝕,使得二值圖像更好處理,然后使用findContours方法檢測二值圖的輪廓,最后將截取下來的輪廓進(jìn)行分析,將高寬比合理的車牌進(jìn)行車牌矯正。
不同光照:為了減少背景和光線對(duì)定位產(chǎn)生的干擾,在進(jìn)行定位之前會(huì)將原圖像的像素縮小,加快圖像處理速度,并使用灰度世界法,改善圖像發(fā)藍(lán)發(fā)紅情況,能夠提高定位準(zhǔn)確率。
不同距離:為了實(shí)現(xiàn)遠(yuǎn)距離定位需求,算法中會(huì)在縮小像素的縮略圖中找出車牌的坐標(biāo),然后在原圖中切割車牌,這樣就能得到清晰的車牌。
不同角度:由于我們使用的是顏色定位,角度不同依然能定位出車牌,并進(jìn)行下一步的車牌矯正。
1.2車牌矯正
車牌矯正一共有六步。利用二值化圖像的感興趣區(qū)域計(jì)算車牌水平的偏斜角和垂直偏斜角,再將原彩車牌通過剛才計(jì)算的角度矯正。
stepl:判斷顏色匹配的旋轉(zhuǎn)矩形區(qū)域傾斜角度是否在60。之內(nèi),是則進(jìn)入下一步,否則不予考慮。(因?yàn)榧僭O(shè)了拍攝的圖像傾斜不是特別大)
step2:計(jì)算安全矩陣,看矩陣是否超過圖像邊界,沒超過則進(jìn)行下一步,否則,該矩形塊不予考慮(拍攝的車牌不完全)
step3:再判斷顏色匹配的矩形區(qū)域傾斜角度是否在5。之內(nèi),是則直接輸出,不矯正,否則進(jìn)行下一步;
step4:進(jìn)行矩形角度旋轉(zhuǎn)矯正;
step5:對(duì)矩形中“車牌”(白色)區(qū)域進(jìn)行偏斜判斷,是正視角,則直接輸出,否則進(jìn)行下一步仿射變換;
step6:對(duì)上一步的矩形進(jìn)行仿射變換,扭正“車牌”。
車牌校正步驟如圖2所示。
1.3字符分割
第一步:先把矯正好的車牌先進(jìn)行灰度化處理和二值化處理。
第二步:尋找輪廓分割字符。
第三步:將切割出的圖片不符合尺寸的過濾掉,然后將剩余的圖片按橫坐標(biāo)從左到右排序。
第四步:將符合條件的字符左上角坐標(biāo)加入數(shù)組,去掉最大值最小值計(jì)算平均值,找出x值最小的坐標(biāo),計(jì)算字符的總長度和平均寬度,利用坐標(biāo)和寬高,將車牌的二值圖分割,能較好地將邊框干擾去除。
第五步:繼續(xù)將去邊框的車牌尋找輪廓,切割字符。
最后,獲得指示城市的特定Rect,如蘇A的“A”,來反推出省份的中文字符。將所有字符放人數(shù)組中。字符分割如圖3所示。
1.4字符識(shí)別
1.4.1卷積神經(jīng)網(wǎng)絡(luò)的基本概念
卷積層:卷積是卷積神經(jīng)網(wǎng)絡(luò)中最核心的概念,也是其名稱的由來。卷積用來提取圖像的局部特征,它是一個(gè)數(shù)學(xué)計(jì)算方法。左圖綠色矩陣是輸入圖像,黃色矩陣是卷積核,粉色矩陣是計(jì)算得到的卷積特征。卷積操作實(shí)際上用卷積核在圖像矩陣上滑動(dòng),對(duì)卷積核矩陣與圖像矩陣中對(duì)應(yīng)位置做以下計(jì)算:對(duì)應(yīng)元素相乘后求和。卷積層如圖4所示。
池化層:池化就是將特征矩陣劃分為若干小塊,從每個(gè)子矩陣中選取一個(gè)值替代該子矩陣,這樣做的目的是壓縮特征矩陣,簡化接下來的計(jì)算,如圖5所示。池化有兩種方式:MaxPooling(最大值池化)和Average Pooling(平均值池化),前者是從子矩陣中取最大值,后者是取平均值,如圖6所示,本項(xiàng)目中采用最大池化。
激活函數(shù)的引入是為了解決深度神經(jīng)網(wǎng)絡(luò)中的梯度消失問題,常用的激活函數(shù)有Sigmoid、tanh和ReLU,前兩個(gè)激活函數(shù)在訓(xùn)練網(wǎng)絡(luò)時(shí)收斂極慢,因此深度網(wǎng)絡(luò)模型中通常使用Re-LU。暫時(shí)看不懂沒關(guān)系,這個(gè)ReLU激活函數(shù)比池化更容易理解,它將矩陣中所有的負(fù)數(shù)全部變?yōu)?,正數(shù)保持原樣,激活函數(shù)通常出現(xiàn)在卷積操作和池化操作之間。
本項(xiàng)目使用Tensorflow框架進(jìn)行cnn模型訓(xùn)練,所使用的圖片類型為二值化后的圖片,寬為32高為40,位深度為8,訓(xùn)練集的總樣本數(shù)為17896,百分之十的圖片用于作為驗(yàn)證集,訓(xùn)練一個(gè)模型用時(shí)為40個(gè)小時(shí)左右。
1.4.2訓(xùn)練模型
將32*40的單通道圖片導(dǎo)入到gpu中,得到圖片總數(shù)和每批樣本數(shù),bachsize為100,最后一批樣本數(shù)為96。對(duì)數(shù)據(jù)結(jié)集:第一次遍歷圖片獲取圖片的總數(shù),第二次遍歷生成圖片的數(shù)據(jù)和標(biāo)簽并且通過img.getPixel(w,h)函數(shù)是數(shù)字的線條變細(xì)提高識(shí)別準(zhǔn)確率。對(duì)驗(yàn)證集遍歷與對(duì)數(shù)據(jù)集遍歷一樣。
1.4.3對(duì)處理好的數(shù)據(jù)集和標(biāo)簽進(jìn)行卷積神經(jīng)運(yùn)算
讀取數(shù)據(jù)保證每張圖片shape相同,不然輸入有錯(cuò)。設(shè)置每次訓(xùn)練的輸入個(gè)數(shù)和迭代次數(shù),為了支持圖片總數(shù),定義了一個(gè)余數(shù)。設(shè)置每批的讀入個(gè)數(shù)為100。初始化session,然后開始執(zhí)行訓(xùn)練迭代輸入時(shí)要將圖片數(shù)組裝化為np.array。每訓(xùn)練5次則進(jìn)行準(zhǔn)確率判斷是否到達(dá)百分百,到達(dá)則退出。
卷積層:用tf.Variable定義變量權(quán)重w和偏置量b,w定義為大小是輸入尺寸x輸出尺寸的矩陣,初始化為隨機(jī)正態(tài)分布。b定義為大小是1x輸出尺寸的矩陣,初始化為0.1,主要是用來提取圖像特征。
激活函數(shù)將卷積之后的現(xiàn)行圖像轉(zhuǎn)為非線性。池化層:每次滑動(dòng)2步提取重要特征,圖片將會(huì)縮小到原圖的四分之一。全連接層將輸入神經(jīng)元和輸出神經(jīng)元連接起來,通過reshape將圖片轉(zhuǎn)換成4維的數(shù)據(jù)格式。然后進(jìn)行線性處理并且激活結(jié)構(gòu),使用dropout將每次輸出舍去百分之50相當(dāng)于隨機(jī)刪除50%的神經(jīng)元,這樣就避免了過擬合的問題相當(dāng)于分別訓(xùn)練,然后通過梯度下降的方法進(jìn)行優(yōu)化,此處定義一個(gè)輸出結(jié)點(diǎn),用于調(diào)用模型時(shí)返回輸出。
1.4.4 Java調(diào)用模型進(jìn)行字符識(shí)別
獲取Javacv處理好的Mat類型的圖片,將其轉(zhuǎn)換成Buffere-dImage類型,通過Raster中的getPixels方法將圖片轉(zhuǎn)化成一個(gè)float類型的一維數(shù)組,必須保持與訓(xùn)練時(shí)輸入的張量相同,也要將一維數(shù)組進(jìn)行線條處理,保存為1和0組成的圖片,調(diào)用graph的operation方法輸入模型訓(xùn)練時(shí)的輸出結(jié)點(diǎn)results,并將處理好的二維數(shù)組的圖片創(chuàng)建成一個(gè)Tensor類型的數(shù)據(jù),并且創(chuàng)建dropout的參數(shù),因?yàn)樵谟?xùn)練輸入時(shí)加入了防止過擬合的方法。然后通過seeion.RunnerO.feedO.fetchO.getO的方法開始識(shí)別字符圖片,結(jié)果返回為一個(gè)float類型的二維數(shù)組的值為字符的正確率,通過正確率判斷是哪個(gè)字符(python中的數(shù)據(jù)精度和Java中不同,在Java中都為負(fù)數(shù),只需取最大的那個(gè)參數(shù))。由于車牌的第一個(gè)數(shù)只能是漢字第二個(gè)數(shù)只是字母后幾個(gè)數(shù)只能是數(shù)字加字母,所以我們做了一個(gè)判斷語句這樣可以使識(shí)別結(jié)果更加精確。最后將結(jié)果返回保存到Resuh對(duì)象中。
2系統(tǒng)實(shí)現(xiàn)
2.1系統(tǒng)界面
本系統(tǒng)功能功能:圖片識(shí)別、實(shí)時(shí)車牌識(shí)別、視頻識(shí)別和查看識(shí)別記錄,運(yùn)行界面如圖7所示。
2.2功能詳解
2.2.1圖片識(shí)別
首先進(jìn)入圖片識(shí)別,圖片識(shí)別分為圖片批量識(shí)別和單個(gè)圖片識(shí)別。還包含了正確率結(jié)果打印,指定圖片文件夾和結(jié)果集文本后會(huì)自動(dòng)輸出識(shí)別結(jié)果,用于測試識(shí)別率。圖片識(shí)別只需點(diǎn)擊文件按鈕,指定某個(gè)圖片,便可識(shí)別,圖片批量識(shí)別需要指定文件夾以及輸出文件夾。
2.2.2實(shí)時(shí)識(shí)別
實(shí)時(shí)識(shí)別需要攝像頭,將攝像頭的USB接口插入電腦端口,可以選擇分別率,點(diǎn)擊打開攝像頭按鈕,軟件自動(dòng)識(shí)別電腦攝像頭并給出選項(xiàng)選擇,軟件會(huì)播放攝像頭畫面,框出車牌位置,并且會(huì)將識(shí)別結(jié)果顯示在表格中,此外,這些記錄會(huì)做本地化保存,可進(jìn)入查看記錄功能進(jìn)行查看。
2.2.3視頻識(shí)別
可以對(duì)已有車輛視頻進(jìn)行識(shí)別,選擇視頻識(shí)別功能,點(diǎn)擊文件夾選擇視頻文件,選擇需要的分辨率,可以選擇是否框出視頻中車牌,識(shí)別過程中同樣會(huì)儲(chǔ)存識(shí)別記錄,便于查看。
2.2.4查看記錄
如果需要查看以往的記錄,點(diǎn)擊查看記錄功能,軟件會(huì)將所有以往記錄文本顯示在表格中,右擊表格中的行,點(diǎn)擊查看該記錄即可在右邊表格中顯示所有信息。本系統(tǒng)提供記錄檢索功能,通過填寫車牌出現(xiàn)識(shí)別,或者地點(diǎn)或者明確的車牌號(hào)即可查詢到是否存在記錄。
3結(jié)束語
高速公路、城市交通、停車場等基礎(chǔ)設(shè)施建設(shè)水平的不斷發(fā)展和車輛管理體制的不斷完善,為以計(jì)算機(jī)視覺為基礎(chǔ)的智能交通管理系統(tǒng)的實(shí)際應(yīng)用提供了契機(jī)。車牌自動(dòng)識(shí)別系統(tǒng)應(yīng)用愈發(fā)廣泛,能夠減輕交通壓力和減少人工成本,有很重要的使用價(jià)值。