張立立,張振坤,劉明釗,沙 毅
(1.東北大學(xué)計算機(jī)科學(xué)與工程學(xué)院,國家級計算機(jī)實驗教學(xué)示范中心,遼寧 沈陽110819;2.大連理工大學(xué)物理學(xué)院,遼寧 大連116024)
智能交通系統(tǒng)[1]利用先進(jìn)的信息處理技術(shù)、導(dǎo)航定位技術(shù)、無線電通信技術(shù)、自動控制技術(shù)、圖像分析技術(shù)及計算機(jī)網(wǎng)絡(luò)和處理技術(shù)等加強(qiáng)道路、車輛、駕駛員和管理人員的聯(lián)系,實現(xiàn)道路交通管理的“自動化”和車輛行駛的“智能化”,增強(qiáng)運(yùn)輸安全,減少交通擁塞,增加車輛機(jī)動性和路面運(yùn)輸效率,減少環(huán)境污染,節(jié)約能源,有助于提高經(jīng)濟(jì)活力[2]。其中,車牌識別技術(shù)是智能交通系統(tǒng)的重要組成部分,已經(jīng)廣泛應(yīng)用于交通流量檢測、小區(qū)車輛管理、街道違停監(jiān)控、高速公路收費(fèi)等各方面,它改變了傳統(tǒng)的交通管理體系,大大降低了人力成本,提高了工作效率,更科學(xué)高效地完善了交通管理系統(tǒng),還具有潛在的技術(shù)應(yīng)用前景。
21 世紀(jì)以來,隨著經(jīng)濟(jì)的快速發(fā)展和國家綜合實力的增強(qiáng),我國車牌識別技術(shù)趨于成熟,主要包括直接法和間接法兩種方法。 其中,采用無線電頻率鑒別車牌的方法屬于間接法,而車牌識別的直接法則是基于圖像處理的車牌自動識別[3]。 自20 世紀(jì)80 年代以來,許多學(xué)者使用圖像處理的方法對車牌識別進(jìn)行了研究[4],但由于國內(nèi)的牌照拍攝差異,使得車牌自動識別系統(tǒng)不夠完善,識別結(jié)果不夠理想。 牛進(jìn)才等人[5-6]提出將采集到的車牌照進(jìn)行灰度化、二值化等一系列處理,采用邊緣檢測算法等對車牌進(jìn)行定位。 張哲[7]等人提出將圖像處理與圖像識別技術(shù)融入車輛流量檢測中,大大提高了檢測的效率和管理的質(zhì)量。
總體來說,由于我國不同汽車類型有不同的規(guī)格、大小和顏色,且車牌號位數(shù)不統(tǒng)一,所以在進(jìn)行車牌識別時,增加了一定的難度。 同時,依照目前的研究現(xiàn)狀來看,車牌識別系統(tǒng)的識別率和識別速度亦有待提高。 基于此,我們結(jié)合當(dāng)前火熱的深度學(xué)習(xí)技術(shù)[8]提出了一種整合了車牌號、車型和車品牌的自動識別技術(shù)。
本文將對此識別技術(shù)在停車場收費(fèi)場景下的應(yīng)用展開論述。
1.1.1 車牌定位
車牌定位是指對獲取的圖像首先進(jìn)行一系列預(yù)處理,進(jìn)而可以在圖像中定位到車牌的位置,其主要目的是在一幅圖片中發(fā)現(xiàn)僅包含車牌的圖塊,以此提高整體識別的準(zhǔn)確率與識別速度。
(1)定位原理
在我們的車牌定位過程中,我們采用了兩種方法進(jìn)行相互結(jié)合:基于邊緣檢測的車牌定位方法[9]和基于顏色特征的車牌定位方法[10]。 其中,圖像邊緣是指圖像的灰度值發(fā)生劇烈變化的區(qū)域,由于字符在車牌圖像中具有較大的邊緣特征,所以基于邊緣檢測的車牌定位是根據(jù)圖像中字符的特征和其他邊緣信息來實現(xiàn)的;基于顏色特征的定位方法是指車牌顏色、車牌背景等特征,先提取出包含車牌區(qū)域的圖像塊,再進(jìn)行灰度化、二值化等一系列處理之后,根據(jù)車牌區(qū)域投影圖和非車牌區(qū)域投影圖的不同,采用行列掃描投影法進(jìn)行精準(zhǔn)定位,提取出最終的車牌圖像區(qū)域。
(2)定位過程
車牌的整個定位過程流程圖如圖1 所示。 首先,對輸入的車牌圖像進(jìn)行高斯濾波、歸一化等預(yù)處理[11],之后對輸入圖像進(jìn)行灰度化及二值化處理,再對得到的顏色檢測圖像與邊緣檢測圖像進(jìn)行互相篩選,至此得到消除大部分噪聲的車輛圖像。 根據(jù)我國車牌的特征,車牌大小為440 mm×140 mm,其長寬比約為3 ∶1,由此篩選出車牌圖塊位置后,即可輸出輪廓比最接近3 ∶1 的圖塊。 此圖塊即為定位后的車牌。
圖1 車牌定位流程圖
1.1.2 字符分割
對于截取出的車牌圖像,我們利用垂直投影法[12]將其中的車牌號分割為7 個獨(dú)立字符,然后再進(jìn)行字符識別。
(1)算法原理
該算法是依據(jù)車牌字符間的像素為零而找到各個字符的左右位置進(jìn)行分割。
我們對車牌灰度圖像進(jìn)行灰度垂直投影,通過車牌區(qū)域的垂直投影可以清晰地看出7 個字符各自的區(qū)域。 根據(jù)投影圖的特征,首先遍歷每一列的像素并進(jìn)行統(tǒng)計,定義第0 列為開始位,之后從左到右依次將每一列的白色像素數(shù)與一個閾值進(jìn)行大小比較。 若白色像素數(shù)大于閾值,則繼續(xù)判斷下一列,直到白色像素數(shù)低于某一閾值,此時定義該列為結(jié)束位。 依次循環(huán),從而分割出每個字符。
(2)分割過程
字符分割的過程是從車牌字符的垂直投影圖上的橫向從左到右依次檢測每一個坐標(biāo)的投影數(shù)值。當(dāng)檢測到第一個不為零的投影數(shù)值時,將此投影數(shù)值所屬的像素點(diǎn)看作第一個投影區(qū)域的左邊邊界。然后繼續(xù)向右檢測,當(dāng)檢測到的投影數(shù)值出現(xiàn)第一個零值時,將此投影數(shù)值所屬的像素點(diǎn)看作第一個投影區(qū)域的右邊邊界。 至此得到了第一個區(qū)域的左右邊界,即分割出了第一個字符,其他區(qū)域字符分割重復(fù)以上循環(huán)過程即可。
1.1.3 字符識別
因為我們所進(jìn)行檢測的車牌的編號是由中文漢字與數(shù)字組合而成,所以我們通過改進(jìn)LeNet-5 模型實現(xiàn)對車牌的漢字(省份)與數(shù)字的分別訓(xùn)練。
其中我們收集了一共40 000 張(大小為33×33)的數(shù)據(jù)集,將訓(xùn)練集與驗證集大致分為8 ∶2 的比例,在基于Python 3.6.6 的tensor flow 環(huán)境下進(jìn)行訓(xùn)練。
省份訓(xùn)練中,我們把準(zhǔn)確率設(shè)為0.9,訓(xùn)練結(jié)果如圖2 所示。
圖2 省份訓(xùn)練結(jié)果圖
數(shù)字訓(xùn)練中,我們把準(zhǔn)確率設(shè)為0.88,訓(xùn)練結(jié)果如圖3 所示。
圖3 數(shù)字訓(xùn)練結(jié)果圖
之后我們把訓(xùn)練出的權(quán)重應(yīng)用于編寫好的LeNet-5 神經(jīng)網(wǎng)絡(luò)中,輸出是概率最大的前三類。識別結(jié)果如圖4 所示。
圖4 車牌識別結(jié)果圖
停車場車輛收費(fèi)系統(tǒng)呈現(xiàn)給停車場管理人員的是前端頁面。 通過前端窗口,停車場管理人員能夠?qū)崟r監(jiān)測進(jìn)入停車場的每一輛車的圖片、車牌識別的結(jié)果以及后端數(shù)據(jù)庫實時更新的內(nèi)容,如圖5 所示,主要包括每一輛車的車型、車品牌、車牌號以及進(jìn)入停車場的時間。 總體來說,前端窗口的設(shè)計能夠幫助停車場的管理人員足不出戶地實時掌控停車場內(nèi)部情況。
圖5 前端窗口界面展示
本系統(tǒng)的前端頁面基于Python3.6.6 平臺,通過調(diào)用Tkinter 模塊進(jìn)行圖形用戶界面GUI 的編寫。其中,Tkinter 模塊(Tk 接口)是Python 的標(biāo)準(zhǔn)Tk GUI 工具包的接口,Python 通過使用Tkinter 就可以快速創(chuàng)建GUI 應(yīng)用程序。
1.2.1 前端開發(fā)
前端的開發(fā)過程,主要指窗口基本框架及其內(nèi)容的實現(xiàn),包括展示識別的圖片、識別的結(jié)果以及后端的數(shù)據(jù)庫內(nèi)容。 對于想要展示的車牌圖片和識別結(jié)果,我們通過調(diào)用show_roi 和from picture 兩個函數(shù),將車牌識別算法部分返回得到的結(jié)果展示在前端界面中,并對其進(jìn)行位置調(diào)整。 數(shù)據(jù)庫內(nèi)容由creat_page 和creat_table 兩個函數(shù)構(gòu)成,先將該部分的框架、面板等基本內(nèi)容寫出,在此基礎(chǔ)之上完成后續(xù)表格的創(chuàng)建(其中表格的標(biāo)題行內(nèi)容分別為“序號、車型、車品牌、車牌號、進(jìn)入停車場時間”),并讀取數(shù)據(jù)庫內(nèi)部所有數(shù)據(jù),即停在停車場內(nèi)部的所有車輛信息,將其展示在表格中。
同時,我們也為用戶提供了手動增加數(shù)據(jù)庫內(nèi)容的功能,即通過表格右上方的“記錄”按鈕,管理人員可以手動輸入新的車輛信息,以此確保不會遺漏任何一輛進(jìn)入停車場的車輛的信息。
1.2.2 實驗結(jié)果
圖6 前端界面效果圖
由圖5 和圖6 可知,該停車場系統(tǒng)的前端界面包括了車牌識別的結(jié)果以及數(shù)據(jù)庫內(nèi)容,圖6 是最終呈現(xiàn)出的效果圖,即管理人員可通過該窗口實時觀測到停車場的狀況,由此可見,此前端界面能夠滿足用戶需求。
鑒于我們整個系統(tǒng)采用Python 語言編寫,而基于Python 3.6.6 平臺的SQLite 是一款輕型的、遵循ACID 的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),能夠支持Windows等主流的操作系統(tǒng),同時也能夠跟很多程序語言相結(jié)合,且處理速度較快。 因此,對于停車場車輛收費(fèi)系統(tǒng)的后端數(shù)據(jù)庫設(shè)計,我們在SQLite 上構(gòu)建了數(shù)據(jù)庫管理系統(tǒng),并通過編寫插入數(shù)據(jù)、刪除數(shù)據(jù)的函數(shù),實現(xiàn)實時記錄停車場車輛的進(jìn)出情況。
在我們的停車場收費(fèi)系統(tǒng)中,數(shù)據(jù)庫系統(tǒng)包括序號、車型、車品牌、車牌號、進(jìn)入停車場時間這五項內(nèi)容。 對于進(jìn)入停車場的每一輛車,相當(dāng)于向數(shù)據(jù)庫中增加一個新對象,并將其信息輸入到數(shù)據(jù)庫中,此時即認(rèn)為此車輛已經(jīng)停放在了停車場內(nèi)部;對于離開停車場的車輛,系統(tǒng)自動刪除數(shù)據(jù)庫中相關(guān)信息,并顯示其應(yīng)付的金額。
此模塊的代碼編寫,主要包括生成數(shù)據(jù)庫、插入信息、刪除信息等函數(shù)。 在完成創(chuàng)建數(shù)據(jù)庫后,對于由車牌識別算法返回得到的車牌號數(shù)據(jù),首先確認(rèn)此數(shù)據(jù)是否已經(jīng)存在于數(shù)據(jù)庫中。 如果數(shù)據(jù)庫中沒有此車牌號,即認(rèn)為是第一次識別到該車,該車是要進(jìn)入停車場內(nèi)部,并利用插入函數(shù)將車輛信息輸入到數(shù)據(jù)庫中。 如果發(fā)現(xiàn)此數(shù)據(jù)已經(jīng)存在于數(shù)據(jù)庫中,即認(rèn)為是第二次識別到該車,該車是要離開停車場,系統(tǒng)則自動從數(shù)據(jù)庫中刪除該車輛相關(guān)信息,并獲取當(dāng)前時間(即離開停車場的時間),利用存入的進(jìn)入時間,得到并顯示該車輛應(yīng)支付的費(fèi)用金額。
在完成車牌號識別系統(tǒng)的基礎(chǔ)之上,我們對已構(gòu)建的停車場收費(fèi)系統(tǒng)進(jìn)行了進(jìn)一步的拓展與創(chuàng)新。為了進(jìn)一步完善豐富整個系統(tǒng),擴(kuò)展收費(fèi)系統(tǒng)的應(yīng)用范圍,我們增加了車類型以及車品牌識別系統(tǒng)的設(shè)計。 最后此兩項識別信息將會與車牌號、進(jìn)入停車場時間一起存入數(shù)據(jù)庫,并展示在前端界面當(dāng)中。
目前,車型識別是大多數(shù)交通管理系統(tǒng)的重要組成部分,相對成熟的車型識別方法有超聲波檢測、激光紅外線檢測等方法,但都有較大的弊端之處,比如維護(hù)成本過高等。 目前深度學(xué)習(xí)算法已經(jīng)在圖像分類識別等方面取得了較好的效果,而其中一種重要的結(jié)構(gòu)就是卷積神經(jīng)網(wǎng)絡(luò)[13],該網(wǎng)絡(luò)具有在深度學(xué)習(xí)中自動學(xué)習(xí)、提取圖像特征的特點(diǎn),得到了較大發(fā)展。 因此我們利用卷積神經(jīng)網(wǎng)絡(luò),對進(jìn)入停車場的車輛進(jìn)行簡單的車型分類識別,分為轎車、貨車、大客車三大類。 網(wǎng)絡(luò)架構(gòu)如圖7 所示。 其中用到的卷積神經(jīng)網(wǎng)絡(luò)包括三個卷積層和一個全連接層。
圖7 車型識別卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)圖
我們首先將訓(xùn)練集中的圖像都轉(zhuǎn)換成32×32大小的RGB 圖像;再經(jīng)過三次卷積加池化,輸出大小為2×2×60 的張量;然后展開成1×1×240 的向量,通過全連接層轉(zhuǎn)換為1×1×100 的特征向量;最后通過dropout 層抑制過擬合并通過softmax 層輸出。
測試過程中的部分程序及結(jié)果如圖8 所示,可以發(fā)現(xiàn),車型識別的準(zhǔn)確率保持在一個較高的水準(zhǔn),結(jié)果是比較理想的。
圖8 車型識別算法的部分程序與運(yùn)行結(jié)果展示
對于車品牌的識別,由于品牌型號過于復(fù)雜,我們受限于訓(xùn)練資源無法自主訓(xùn)練,因此我們采用了百度智能云API。 該API 可以精準(zhǔn)識別車的品牌和型號,識別準(zhǔn)確率較高而且十分快速。 其中,百度智能云是百度提供的公有云平臺,提供智能大數(shù)據(jù)、智能多媒體、智能物聯(lián)網(wǎng)服務(wù)。
圖9 是我們利用該API 進(jìn)行車品牌識別的算法代碼部分,其中在獲得百度密鑰等參數(shù)信息后,打開所要識別的圖片,調(diào)用該API 即可輸出得到圖片中車輛的品牌信息。 可以從圖10 的測試實驗結(jié)果中得知,利用百度智能云API 進(jìn)行車品牌識別的效果較為理想。
圖9 車品牌識別算法的部分程序與運(yùn)行結(jié)果展示
圖10 車品牌識別系統(tǒng)測試結(jié)果展示
在本文中,我們利用Python 語言實現(xiàn)了一個基于車牌識別技術(shù)的停車場管理系統(tǒng)。 通過觀察測試的結(jié)果,該系統(tǒng)能夠較好地實現(xiàn)對于進(jìn)出停車場的車輛的管理。
車牌識別技術(shù)對于維護(hù)交通安全和城市治安,防止交通堵塞,方便停車場收費(fèi)管理等方面有著現(xiàn)實意義。 本文提出的停車場收費(fèi)管理系統(tǒng)結(jié)合當(dāng)前火熱的深度學(xué)習(xí)技術(shù),在車牌號識別技術(shù)的基礎(chǔ)上進(jìn)一步做了車型識別技術(shù)和車品牌識別技術(shù)的擴(kuò)充延展,使整個收費(fèi)管理系統(tǒng)更加趨于完善和便捷可控。
車牌識別的發(fā)展還需要做更深層次的研究和完善。 隨著城市智能化的發(fā)展,此項技術(shù)將會對我國未來交通全自動化管理甚至經(jīng)濟(jì)發(fā)展領(lǐng)域帶來不可估量的促進(jìn)作用。