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