張立立,張振坤,劉明釗,沙 毅
(1.東北大學計算機科學與工程學院,國家級計算機實驗教學示范中心,遼寧 沈陽110819;2.大連理工大學物理學院,遼寧 大連116024)
智能交通系統[1]利用先進的信息處理技術、導航定位技術、無線電通信技術、自動控制技術、圖像分析技術及計算機網絡和處理技術等加強道路、車輛、駕駛員和管理人員的聯系,實現道路交通管理的“自動化”和車輛行駛的“智能化”,增強運輸安全,減少交通擁塞,增加車輛機動性和路面運輸效率,減少環境污染,節約能源,有助于提高經濟活力[2]。其中,車牌識別技術是智能交通系統的重要組成部分,已經廣泛應用于交通流量檢測、小區車輛管理、街道違停監控、高速公路收費等各方面,它改變了傳統的交通管理體系,大大降低了人力成本,提高了工作效率,更科學高效地完善了交通管理系統,還具有潛在的技術應用前景。
21 世紀以來,隨著經濟的快速發展和國家綜合實力的增強,我國車牌識別技術趨于成熟,主要包括直接法和間接法兩種方法。 其中,采用無線電頻率鑒別車牌的方法屬于間接法,而車牌識別的直接法則是基于圖像處理的車牌自動識別[3]。 自20 世紀80 年代以來,許多學者使用圖像處理的方法對車牌識別進行了研究[4],但由于國內的牌照拍攝差異,使得車牌自動識別系統不夠完善,識別結果不夠理想。 牛進才等人[5-6]提出將采集到的車牌照進行灰度化、二值化等一系列處理,采用邊緣檢測算法等對車牌進行定位。 張哲[7]等人提出將圖像處理與圖像識別技術融入車輛流量檢測中,大大提高了檢測的效率和管理的質量。
總體來說,由于我國不同汽車類型有不同的規格、大小和顏色,且車牌號位數不統一,所以在進行車牌識別時,增加了一定的難度。 同時,依照目前的研究現狀來看,車牌識別系統的識別率和識別速度亦有待提高。 基于此,我們結合當前火熱的深度學習技術[8]提出了一種整合了車牌號、車型和車品牌的自動識別技術。
本文將對此識別技術在停車場收費場景下的應用展開論述。
1.1.1 車牌定位
車牌定位是指對獲取的圖像首先進行一系列預處理,進而可以在圖像中定位到車牌的位置,其主要目的是在一幅圖片中發現僅包含車牌的圖塊,以此提高整體識別的準確率與識別速度。
(1)定位原理
在我們的車牌定位過程中,我們采用了兩種方法進行相互結合:基于邊緣檢測的車牌定位方法[9]和基于顏色特征的車牌定位方法[10]。 其中,圖像邊緣是指圖像的灰度值發生劇烈變化的區域,由于字符在車牌圖像中具有較大的邊緣特征,所以基于邊緣檢測的車牌定位是根據圖像中字符的特征和其他邊緣信息來實現的;基于顏色特征的定位方法是指車牌顏色、車牌背景等特征,先提取出包含車牌區域的圖像塊,再進行灰度化、二值化等一系列處理之后,根據車牌區域投影圖和非車牌區域投影圖的不同,采用行列掃描投影法進行精準定位,提取出最終的車牌圖像區域。
(2)定位過程
車牌的整個定位過程流程圖如圖1 所示。 首先,對輸入的車牌圖像進行高斯濾波、歸一化等預處理[11],之后對輸入圖像進行灰度化及二值化處理,再對得到的顏色檢測圖像與邊緣檢測圖像進行互相篩選,至此得到消除大部分噪聲的車輛圖像。 根據我國車牌的特征,車牌大小為440 mm×140 mm,其長寬比約為3 ∶1,由此篩選出車牌圖塊位置后,即可輸出輪廓比最接近3 ∶1 的圖塊。 此圖塊即為定位后的車牌。

圖1 車牌定位流程圖
1.1.2 字符分割
對于截取出的車牌圖像,我們利用垂直投影法[12]將其中的車牌號分割為7 個獨立字符,然后再進行字符識別。
(1)算法原理
該算法是依據車牌字符間的像素為零而找到各個字符的左右位置進行分割。
我們對車牌灰度圖像進行灰度垂直投影,通過車牌區域的垂直投影可以清晰地看出7 個字符各自的區域。 根據投影圖的特征,首先遍歷每一列的像素并進行統計,定義第0 列為開始位,之后從左到右依次將每一列的白色像素數與一個閾值進行大小比較。 若白色像素數大于閾值,則繼續判斷下一列,直到白色像素數低于某一閾值,此時定義該列為結束位。 依次循環,從而分割出每個字符。
(2)分割過程
字符分割的過程是從車牌字符的垂直投影圖上的橫向從左到右依次檢測每一個坐標的投影數值。當檢測到第一個不為零的投影數值時,將此投影數值所屬的像素點看作第一個投影區域的左邊邊界。然后繼續向右檢測,當檢測到的投影數值出現第一個零值時,將此投影數值所屬的像素點看作第一個投影區域的右邊邊界。 至此得到了第一個區域的左右邊界,即分割出了第一個字符,其他區域字符分割重復以上循環過程即可。
1.1.3 字符識別
因為我們所進行檢測的車牌的編號是由中文漢字與數字組合而成,所以我們通過改進LeNet-5 模型實現對車牌的漢字(省份)與數字的分別訓練。
其中我們收集了一共40 000 張(大小為33×33)的數據集,將訓練集與驗證集大致分為8 ∶2 的比例,在基于Python 3.6.6 的tensor flow 環境下進行訓練。
省份訓練中,我們把準確率設為0.9,訓練結果如圖2 所示。

圖2 省份訓練結果圖
數字訓練中,我們把準確率設為0.88,訓練結果如圖3 所示。

圖3 數字訓練結果圖
之后我們把訓練出的權重應用于編寫好的LeNet-5 神經網絡中,輸出是概率最大的前三類。識別結果如圖4 所示。

圖4 車牌識別結果圖
停車場車輛收費系統呈現給停車場管理人員的是前端頁面。 通過前端窗口,停車場管理人員能夠實時監測進入停車場的每一輛車的圖片、車牌識別的結果以及后端數據庫實時更新的內容,如圖5 所示,主要包括每一輛車的車型、車品牌、車牌號以及進入停車場的時間。 總體來說,前端窗口的設計能夠幫助停車場的管理人員足不出戶地實時掌控停車場內部情況。

圖5 前端窗口界面展示
本系統的前端頁面基于Python3.6.6 平臺,通過調用Tkinter 模塊進行圖形用戶界面GUI 的編寫。其中,Tkinter 模塊(Tk 接口)是Python 的標準Tk GUI 工具包的接口,Python 通過使用Tkinter 就可以快速創建GUI 應用程序。
1.2.1 前端開發
前端的開發過程,主要指窗口基本框架及其內容的實現,包括展示識別的圖片、識別的結果以及后端的數據庫內容。 對于想要展示的車牌圖片和識別結果,我們通過調用show_roi 和from picture 兩個函數,將車牌識別算法部分返回得到的結果展示在前端界面中,并對其進行位置調整。 數據庫內容由creat_page 和creat_table 兩個函數構成,先將該部分的框架、面板等基本內容寫出,在此基礎之上完成后續表格的創建(其中表格的標題行內容分別為“序號、車型、車品牌、車牌號、進入停車場時間”),并讀取數據庫內部所有數據,即停在停車場內部的所有車輛信息,將其展示在表格中。
同時,我們也為用戶提供了手動增加數據庫內容的功能,即通過表格右上方的“記錄”按鈕,管理人員可以手動輸入新的車輛信息,以此確保不會遺漏任何一輛進入停車場的車輛的信息。
1.2.2 實驗結果

圖6 前端界面效果圖
由圖5 和圖6 可知,該停車場系統的前端界面包括了車牌識別的結果以及數據庫內容,圖6 是最終呈現出的效果圖,即管理人員可通過該窗口實時觀測到停車場的狀況,由此可見,此前端界面能夠滿足用戶需求。
鑒于我們整個系統采用Python 語言編寫,而基于Python 3.6.6 平臺的SQLite 是一款輕型的、遵循ACID 的關系型數據庫管理系統,能夠支持Windows等主流的操作系統,同時也能夠跟很多程序語言相結合,且處理速度較快。 因此,對于停車場車輛收費系統的后端數據庫設計,我們在SQLite 上構建了數據庫管理系統,并通過編寫插入數據、刪除數據的函數,實現實時記錄停車場車輛的進出情況。
在我們的停車場收費系統中,數據庫系統包括序號、車型、車品牌、車牌號、進入停車場時間這五項內容。 對于進入停車場的每一輛車,相當于向數據庫中增加一個新對象,并將其信息輸入到數據庫中,此時即認為此車輛已經停放在了停車場內部;對于離開停車場的車輛,系統自動刪除數據庫中相關信息,并顯示其應付的金額。
此模塊的代碼編寫,主要包括生成數據庫、插入信息、刪除信息等函數。 在完成創建數據庫后,對于由車牌識別算法返回得到的車牌號數據,首先確認此數據是否已經存在于數據庫中。 如果數據庫中沒有此車牌號,即認為是第一次識別到該車,該車是要進入停車場內部,并利用插入函數將車輛信息輸入到數據庫中。 如果發現此數據已經存在于數據庫中,即認為是第二次識別到該車,該車是要離開停車場,系統則自動從數據庫中刪除該車輛相關信息,并獲取當前時間(即離開停車場的時間),利用存入的進入時間,得到并顯示該車輛應支付的費用金額。
在完成車牌號識別系統的基礎之上,我們對已構建的停車場收費系統進行了進一步的拓展與創新。為了進一步完善豐富整個系統,擴展收費系統的應用范圍,我們增加了車類型以及車品牌識別系統的設計。 最后此兩項識別信息將會與車牌號、進入停車場時間一起存入數據庫,并展示在前端界面當中。
目前,車型識別是大多數交通管理系統的重要組成部分,相對成熟的車型識別方法有超聲波檢測、激光紅外線檢測等方法,但都有較大的弊端之處,比如維護成本過高等。 目前深度學習算法已經在圖像分類識別等方面取得了較好的效果,而其中一種重要的結構就是卷積神經網絡[13],該網絡具有在深度學習中自動學習、提取圖像特征的特點,得到了較大發展。 因此我們利用卷積神經網絡,對進入停車場的車輛進行簡單的車型分類識別,分為轎車、貨車、大客車三大類。 網絡架構如圖7 所示。 其中用到的卷積神經網絡包括三個卷積層和一個全連接層。

圖7 車型識別卷積神經網絡架構圖
我們首先將訓練集中的圖像都轉換成32×32大小的RGB 圖像;再經過三次卷積加池化,輸出大小為2×2×60 的張量;然后展開成1×1×240 的向量,通過全連接層轉換為1×1×100 的特征向量;最后通過dropout 層抑制過擬合并通過softmax 層輸出。
測試過程中的部分程序及結果如圖8 所示,可以發現,車型識別的準確率保持在一個較高的水準,結果是比較理想的。

圖8 車型識別算法的部分程序與運行結果展示
對于車品牌的識別,由于品牌型號過于復雜,我們受限于訓練資源無法自主訓練,因此我們采用了百度智能云API。 該API 可以精準識別車的品牌和型號,識別準確率較高而且十分快速。 其中,百度智能云是百度提供的公有云平臺,提供智能大數據、智能多媒體、智能物聯網服務。
圖9 是我們利用該API 進行車品牌識別的算法代碼部分,其中在獲得百度密鑰等參數信息后,打開所要識別的圖片,調用該API 即可輸出得到圖片中車輛的品牌信息。 可以從圖10 的測試實驗結果中得知,利用百度智能云API 進行車品牌識別的效果較為理想。

圖9 車品牌識別算法的部分程序與運行結果展示

圖10 車品牌識別系統測試結果展示
在本文中,我們利用Python 語言實現了一個基于車牌識別技術的停車場管理系統。 通過觀察測試的結果,該系統能夠較好地實現對于進出停車場的車輛的管理。
車牌識別技術對于維護交通安全和城市治安,防止交通堵塞,方便停車場收費管理等方面有著現實意義。 本文提出的停車場收費管理系統結合當前火熱的深度學習技術,在車牌號識別技術的基礎上進一步做了車型識別技術和車品牌識別技術的擴充延展,使整個收費管理系統更加趨于完善和便捷可控。
車牌識別的發展還需要做更深層次的研究和完善。 隨著城市智能化的發展,此項技術將會對我國未來交通全自動化管理甚至經濟發展領域帶來不可估量的促進作用。