徐莉 孫龍飛
摘? 要:為保證校園安全,提高車輛出入管理效率,外來訪客在高校訪問登記界面填寫個人信息,車輛到達時,高校車牌登記識別系統(tǒng)通過攝像頭捕獲車牌信息,系統(tǒng)自動識別放行。該系統(tǒng)包含車牌在線登記子系統(tǒng)和車牌識別子系統(tǒng)兩個部分。車牌在線登記子系統(tǒng)前端頁面使用JSP技術(shù),通過DIV+CSS對頁面進行布局。后端基于Java語言、SSM框架開發(fā),使用Maven進行項目管理。車牌識別子系統(tǒng)基于Python語言,使用OpenCV進行圖像處理,提取車牌字符,結(jié)合TensorFlow對所獲得的車牌字符進行分類識別。
關(guān)鍵詞:高校;車牌登記;車牌識別;Java語言;Python語言
中圖分類號:TP391.41 ? ? ?文獻標(biāo)識碼:A 文章編號:2096-4706(2021)02-0001-05
Abstract:In order to ensure the safety of the campus and improve the management efficiency of vehicle access,outside visitors need to fill in their personal information in university visit registration interface. When vehicle arrive,the university license plate registration and identification system captures the license plate information through the camera,the system automatic identification and release. The system includes two parts of the license plate online registration subsystem and the license plate identification subsystem. License plate online registration subsystem uses JSP technology in its frontend page and make page layout through DIV+CSS,the backend is developed based on Java language,SSM frame,and uses Maven for items management. License plate identification subsystem is based on Python language,uses OpenCV for images processing,extracts license plate characters,and combines TensorFlow to classify and recognize the acquired license plate characters.
Keywords:university;license plate registration;license plate identification;Java language;Python language
0? 引? 言
隨著科學(xué)技術(shù)的飛速發(fā)展,人工智能與5G網(wǎng)絡(luò)逐漸普及,智慧交通系統(tǒng)[1]在這種情境下應(yīng)時而生。車牌識別技術(shù)是智能交通系統(tǒng)的核心所在,已廣泛應(yīng)用于交通流量檢測、小區(qū)車輛管理、街道違停監(jiān)控、高速公路收費等領(lǐng)域,它改變了傳統(tǒng)的交通管理體系,大大降低了人力成本,提高了工作效率,更加科學(xué)高效地完善了交通管理系統(tǒng)[2-4]。車輛牌照識別系統(tǒng)分為硬件輸入和軟件處理兩部分。硬件輸入是指通過拍攝工具對車牌進行拍攝,軟件處理是對收集到的車牌圖像進行車牌定位、圖像處理、字符分割與識別等,最終將存儲識別結(jié)果[5]。近年來,隨著高校辦學(xué)規(guī)模的逐年擴大,進入校園的外來車輛不斷增加,為了保障校園安全,本文設(shè)計并實現(xiàn)了高校車牌登記識別系統(tǒng)。訪客進校前須在車輛管理頁面進行登記,填寫車牌號碼、訪問時間、訪客姓名、訪客單位、訪問對象、手機號碼等信息,當(dāng)車輛駛近校門時,系統(tǒng)通過對車牌的快速識別比對實現(xiàn)車輛的自動放行。
1? 系統(tǒng)結(jié)構(gòu)設(shè)計
高校車牌登記識別管理系統(tǒng)結(jié)構(gòu)如圖1所示。
該系統(tǒng)包含車牌在線登記子系統(tǒng)和車牌識別子系統(tǒng)兩個部分。車牌在線登記子系統(tǒng)使用B/S架構(gòu)通過Web訪問,運用J2EE架構(gòu)搭建Web服務(wù),使用MVC設(shè)計模式,通過JDBC技術(shù)訪問數(shù)據(jù)庫,使用Spring[6]、Spring MVC和MyBatis框架實現(xiàn)。車牌識別子系統(tǒng)與車牌在線登記子系統(tǒng)通過對同一數(shù)據(jù)庫的訪問完成信息交互。
1.1? 在線登記管理功能設(shè)計
訪客通過瀏覽器進入信息登記頁面,輸入訪問時間、車牌號碼、訪客姓名、性別、年齡、手機號等信息,為了校驗用戶信息,另外設(shè)有非必填字段,如單位、事由、攜帶物品、被訪人姓名,訪客可以有選擇性地填寫非必填字段,不影響其正常訪問。為防止惡意登記,在處理信息之前首先需要對信息進行驗證。在線登記流程如圖2所示。
1.2? 車牌識別功能設(shè)計
在本系統(tǒng)中,通過互聯(lián)網(wǎng)技術(shù)實現(xiàn)外來車輛的信息登記,使外來車輛在門禁閘機處可以被識別并放行。車輛通過門禁流程如圖3所示。
1.3? 系統(tǒng)框架環(huán)境搭建
在線登記管理系統(tǒng)使用Maven進行項目依賴管理,因此,需要首先在IDEA中配置Maven環(huán)境,新建Maven項目。完成項目創(chuàng)建后,在pom文件中添加并導(dǎo)入Spring、Spring MVC和MyBatis等框架依賴。
在項目中添加src級目錄Java,resource目錄resources。在Java目錄下完成項目編碼,在resources目錄下添加并配置Spring配置信息applicationContext.xml,Spring MVC配置文件springmvc.xml和MyBatis配置文件mybatis-config.xml,以及用于數(shù)據(jù)庫連接的db.properties和日志記錄log4j.properties。最后在web.xml中配置Spring。系統(tǒng)開發(fā)環(huán)境以及主要依賴版本如表1所示。
2? 系統(tǒng)實現(xiàn)
2.1? 在線登記注冊實現(xiàn)
在線登記注冊頁面為工程中jsp目錄下的register.jsp文件,此頁面在系統(tǒng)中被設(shè)置為默認(rèn)首頁,主要為訪客做信息登記之用。后臺由VisitRegisterController接收并處理注冊請求,由CaptchaController接口完成驗證碼的生成、返回以及對驗證碼的校驗。對輸入信息的合法驗證由前臺頁面中的JS腳本完成。最終頁面效果如圖4所示。
2.2? 在線登記后臺管理實現(xiàn)
在線登記后臺管理頁面為系統(tǒng)工程中jsp目錄下的manage.jsp文件,由后臺VisitManger接收處理,所有訪問接口均被放在manage二級請求中,同時配置攔截器攔截manage下的請求,只有已經(jīng)登錄的會話才可以訪問,否則將跳轉(zhuǎn)到登錄頁面。登錄頁面為系統(tǒng)工程文件中jsp目錄下的login.jsp文件,由后臺AdminController接收處理,完成管理員登錄。登錄頁面如圖5所示,后臺管理頁面如圖6所示。
2.3? 車牌識別系統(tǒng)實現(xiàn)
2.3.1? 圖像處理實現(xiàn)
圖像處理功能使用Python語言實現(xiàn),通過調(diào)用OpenCV圖像處理庫完成大部分圖像處理功能。車牌識別系統(tǒng)的基本流程如圖7所示。
車牌識別系統(tǒng)開發(fā)環(huán)境如表2所示。
圖像處理過程主要包括圖像尺寸調(diào)整、圖像降噪、圖像灰度化、閾值分割、圖像邊緣檢測等環(huán)節(jié):
(1)圖像尺寸調(diào)整。圖像尺寸調(diào)整通過調(diào)用OpenCV中所提供的resize函數(shù)完成,對圖像寬度設(shè)置閾值,當(dāng)接收到的圖像寬度大于該閾值時,則計算圖像比例,重新調(diào)整圖像尺寸。本系統(tǒng)對圖像尺寸進行調(diào)整時將閾值常量MAX設(shè)置為1 000,讀取圖像文件后獲取圖像寬度,當(dāng)圖像寬度大于設(shè)置的閾值時,使用閾值MAX除以圖像寬度得到圖像縮放比率。將閾值寬度MAX作為新的圖像寬度傳入,將縮放比率與圖像的高度乘積作為新的圖像高度。
(2)圖像降噪。圖像降噪由OpenCV庫中的Gaussian-Blur函數(shù)實現(xiàn),利用高斯模糊消除圖像中的細小噪聲顆粒。
(3)圖像灰度化。圖像灰度化通過OpenCV庫中的cvtColor函數(shù)實現(xiàn),指定其顏色轉(zhuǎn)換方式為cv2.COLOR_BGR2GRAY。
(4)閾值分割。本系統(tǒng)中采用OTSU方法[7]進行閾值分割,可以使用OpenCV庫中所提供的threshold函數(shù)以二值化方法完成閾值分割。
(5)圖像邊緣檢測。圖像邊緣檢測通過Canny邊緣檢測實現(xiàn),設(shè)置Canny算法中低閾值和高閾值分別為100和200,得到的閾值分割效果如圖8所示。
完成圖像邊緣檢測后再通過一次閉運算和一次開運算,填充白色區(qū)域的內(nèi)部細小黑色空洞,并平滑其邊緣,使圖像中的特征區(qū)域成為整體色塊,得到圖像中的連通域。不包含其他多余信息的連通域可以為車牌定位提供極大的便利,最終得到的連通域如圖9所示。
圖像處理過程核心算法如算法1所示:
算法1 圖像處理過程
if 圖像寬度 > 閾值寬度
then 縮放比 ← 閾值寬度 / 圖像寬度
img ← 將圖像進行等比縮放
img ← 對圖像進行高斯模糊
img ← 將圖像轉(zhuǎn)換為灰度圖
img_opening ← 使用20*20單位矩陣對img進行開運算并將結(jié)果與img重合
ret, img_thresh ← 對img_opening進行閾值二值化
img_edge ← 對img_thresh進行Canny邊緣檢測
img_edge1 ← 對img_edge進行閉運算
2.3.2? 車牌定位與字符分割實現(xiàn)
使用OpenCV中所提供的findContours函數(shù)將圖中所有色塊的輪廓提取出來。通過findContours函數(shù)得到的輪廓首先進行面積計算,濾除其中面積過小的區(qū)域,之后針對剩余的輪廓求出它們的最小旋轉(zhuǎn)矩形,并獲得最小旋轉(zhuǎn)矩形的寬和高。因為我國的車牌標(biāo)準(zhǔn)大小為寬440 mm,高140 mm,寬和高的比值約為3.14,所以對得到的旋轉(zhuǎn)矩形同樣計算其寬高比,設(shè)定寬高比在2.5到4.5之間的區(qū)域為車牌區(qū)域,否則就認(rèn)為這個區(qū)域是背景將其舍棄,如圖10(a)、10(b)所示??梢钥吹狡渲幸粔K因為得到的旋轉(zhuǎn)矩形與車牌區(qū)域得到的旋轉(zhuǎn)矩形基本相同所以被錯誤地識別為車牌區(qū)域。我國民用車牌的顏色分為藍色、黃色和綠色,而警用、軍用醫(yī)療、消防、特勤等專用車牌不在本系統(tǒng)的應(yīng)用范圍所以不做考慮,而右側(cè)的車燈和進氣孔顯然不存在這樣的顏色特征,故而排除。
提取車牌后將車牌中的每一個字符單獨切分取出,首先需要對車牌圖像進行二值化處理,之后對二值圖像進行垂直投影,通過遍歷圖像中的每一列,對每一列中的每一行累加,得到車牌的每一列中所包含的像素數(shù),存儲在數(shù)組中。
將車牌垂直投影的數(shù)組作為直方圖輸出,可以得到圖11,可以發(fā)現(xiàn)在直方圖中有明顯的波峰和波谷,而波峰則對應(yīng)著車牌中存在字符的地方,波谷則是在車牌中字符間隔的位置。通過直方圖還可以再次驗證得到的區(qū)域是否是車牌,當(dāng)直方圖中波峰少于個6時,它就不符合車牌規(guī)則。
為了排除車牌邊框的干擾,將其中小于5的置0,得到圖12中所示的直方圖,此時每一個波峰已經(jīng)獨立。將波峰起點到終點間隔小于2的認(rèn)為是邊框而舍棄。
使用同樣的方法,對車牌進行水平投影以去除車牌中的上下邊框,最終切分出的字符如圖13所示。
2.3.3? 字符識別實現(xiàn)
本系統(tǒng)通過構(gòu)建一個卷積神經(jīng)網(wǎng)絡(luò)對得到的車牌字符圖像進行分類,數(shù)據(jù)集為CCPD中所提供的部分車輛圖像信息。首先將所有字符分為兩大類,一類是表示省份代碼的中文字符,另一類是車牌中的字母和數(shù)字。兩類數(shù)據(jù)分別用于兩個神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,在兩類數(shù)據(jù)內(nèi)部將數(shù)據(jù)再次按照字符內(nèi)容分組放入不同文件夾內(nèi),之后將數(shù)據(jù)按7:2:1的方式分為訓(xùn)練集、測試集和驗證集,形成最終用于訓(xùn)練的數(shù)據(jù)。
采用Keras中ImageDataGenerator方法加載圖像形成數(shù)據(jù)集。將數(shù)據(jù)在神經(jīng)網(wǎng)絡(luò)中不斷迭代,進行前向和反向傳播對網(wǎng)絡(luò)中的參數(shù)進行梯度更新,逐步使得目標(biāo)函數(shù)趨于最小值。在Tensorflow2.0中通過Keras將構(gòu)建好的模型編譯為model對象,利用model對象的fit方法完成訓(xùn)練,經(jīng)過15輪訓(xùn)練后模型的準(zhǔn)確率達到0.95,如圖14(a)、14(b)所示。
2.3.4? 應(yīng)用模型預(yù)測
接收到OpenCV傳入的字符圖像數(shù)組后將其轉(zhuǎn)換為Tensor張量,并進行歸一化處理,然后加載保存的模型,編譯生成model對象,通過model對象的predict方法得到模型的預(yù)測結(jié)果,如圖15(a)、15(b)所示。
因為中文和字母數(shù)字是由兩個神經(jīng)網(wǎng)絡(luò)分別識別的,所以在識別第一個字符時使用中文識別的網(wǎng)絡(luò)模型,對其他字符使用字母和數(shù)字識別的網(wǎng)絡(luò)模型。
在得到車牌中的字符后,就可以針對車牌信息檢索數(shù)據(jù)庫,查看該車輛是否已經(jīng)登記。這里使用PyMySQL進行數(shù)據(jù)庫操作,當(dāng)查詢到數(shù)據(jù)庫中有符合條件的記錄時,則向門禁系統(tǒng)發(fā)送指令放行,同時記錄該車輛信息,并保存車牌圖像以方便后續(xù)檢查。
應(yīng)用模型進行字符識別主要過程見算法2:
算法2 應(yīng)用模型進行識別
for i, image in enumerate(iamges)
img_tersor ← 將數(shù)組轉(zhuǎn)換為張量
if i == 0
then prob ← 中文字符識別
charactor ← 獲取prob對應(yīng)字符
else prob ← 字母數(shù)字識別
charactor ← 獲取prob對應(yīng)字符
predict_result += charactor
返回識別結(jié)果 predict_result
3? 結(jié)? 論
本文通過設(shè)計并實現(xiàn)高校車牌登記識別管理系統(tǒng),將門禁系統(tǒng)和網(wǎng)絡(luò)相結(jié)合,利用Web在線登記信息,通過車牌識別結(jié)果檢索登記信息,從而實現(xiàn)了車輛出入校園時進行遠程登記、信息化、智能化的處理過程。本系統(tǒng)基于卷積神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集進行訓(xùn)練,對模型使用車牌字符數(shù)據(jù)集進行訓(xùn)練后模型的準(zhǔn)確率達到0.95,能夠準(zhǔn)確識別車牌信息,輕松實現(xiàn)了校園車輛的高效管理。
參考文獻:
[1] ZHU F H,LI Z J,CHEN S H,et al. Parallel Transportation Management and Control System and Its Applications in Building Smart Cities [J]. IEEE Transactions on Intelligent Transportation Systems,2016,17(6):1576-1585.
[2] 李兵,易嘉聞,黃鋒,等.基于TensorFlow深度學(xué)習(xí)的車牌識別算法研究 [J].成都工業(yè)學(xué)院學(xué)報,2018,21(4):28-33.
[3] 張帆,王曉東,郝賢鵬.基于邊緣特征的智能車輛字符識別 [J].自動化與儀器儀表,2020(6):11-14+20.
[4] 朱鳳霞.基于神經(jīng)網(wǎng)絡(luò)和圖像識別的車牌識別技術(shù) [J].電子設(shè)計工程,2020,28(2):130-133+138.
[5] 梁大寬.復(fù)雜背景下多車牌識別算法的研究與軟件系統(tǒng)實 [D].太原:太原理工大學(xué),2016.
[6] 黑馬程序員.Java EE企業(yè)級應(yīng)用開發(fā)教程 [M].北京:人民郵電出版社,2017.
[7] 倪麟.基于Otsu理論的圖像分割算法的研究 [D].重慶:重慶大學(xué),2013.
作者簡介:徐莉(1991.03—),女,漢族,河南信陽人,助教,碩士研究生,研究方向:數(shù)據(jù)挖掘,圖像處理;孫龍飛(1997.05—),男,漢族,河南洛陽人,本科,研究方向:圖像處理。