盧 嫚,謝磊鑫
(西安工程大學(xué) 電子信息學(xué)院,西安 710048)
近年來(lái),隨著國(guó)家經(jīng)濟(jì)和科技的飛速發(fā)展,人們的生活也隨之發(fā)生了巨大變化。據(jù)有關(guān)部門(mén)統(tǒng)計(jì),截至2022 年3 月底,國(guó)內(nèi)汽車(chē)保有量4.02 億輛,如此龐大的數(shù)字給交通管理部門(mén)的運(yùn)行管理帶來(lái)了很大的壓力。車(chē)牌作為車(chē)輛身份信息的主要標(biāo)志,自動(dòng)車(chē)牌識(shí)別是一種利用檢測(cè)和識(shí)別方法來(lái)自動(dòng)獲得車(chē)牌信息的技術(shù),能夠有效地提高交通管理效率和道路安全[1],利用人工智能領(lǐng)域的數(shù)字圖像處理技術(shù)和圖像處理算法對(duì)汽車(chē)車(chē)牌進(jìn)行自動(dòng)識(shí)別,不斷提升智能交通系統(tǒng)運(yùn)行效率,具有非常重要的意義。車(chē)牌識(shí)別系統(tǒng)在人們的周?chē)兄鴱V泛的應(yīng)用場(chǎng)景,例如:公共設(shè)施停車(chē)場(chǎng)管理、校區(qū)門(mén)禁系統(tǒng)、公司學(xué)校單位門(mén)禁等[2]。
本文基于樹(shù)莓派為主控平臺(tái),采用高清攝像頭模塊采集圖像,設(shè)計(jì)出一種智能車(chē)牌識(shí)別系統(tǒng),能夠精準(zhǔn)提取車(chē)牌信息,并將車(chē)牌信息存入數(shù)據(jù)庫(kù)中,最后將識(shí)別到的車(chē)牌號(hào)顯示在屏幕的GUI 界面上。本系統(tǒng)選用Linux 操作系統(tǒng),采用sqlite3 來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù),車(chē)牌識(shí)別使用OpenCV 庫(kù)函數(shù),使用PyQt5 庫(kù)和Qt Designer 來(lái)設(shè)計(jì)GUI 界面。
系統(tǒng)使用樹(shù)莓派3B+作為主控平臺(tái),連接SD 卡、攝像頭、顯示屏等外設(shè),利用PC 端作上位機(jī),進(jìn)行數(shù)據(jù)的傳輸,系統(tǒng)總體結(jié)構(gòu)如圖1 所示。主控制器樹(shù)莓派為核心部分,采用攝像頭采集車(chē)牌信息,樹(shù)莓派通過(guò)圖像識(shí)別精準(zhǔn)采集到車(chē)牌號(hào),并將檢測(cè)到的車(chē)牌號(hào)存入數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)信息可以在用PyQt5設(shè)計(jì)的GUI 界面顯示,可以隨時(shí)查看車(chē)輛信息。
圖1 系統(tǒng)總體結(jié)構(gòu)圖Fig.1 Structure diagram of overall system
車(chē)牌識(shí)別利用了數(shù)字圖像處理、模式識(shí)別、電腦視覺(jué)等現(xiàn)代信息技術(shù),對(duì)攝像頭捕獲的汽車(chē)圖像進(jìn)行信息處理,獲取每輛車(chē)的車(chē)牌信息[3]。車(chē)牌識(shí)別系統(tǒng)的工作機(jī)理:當(dāng)車(chē)輛行駛在攝像頭所監(jiān)測(cè)區(qū)域內(nèi),攝像頭監(jiān)測(cè)到車(chē)牌號(hào)時(shí)將車(chē)輛拍攝下來(lái)并傳輸?shù)綐?shù)莓派,樹(shù)莓派對(duì)汽車(chē)照片進(jìn)行圖像預(yù)處理、定位車(chē)牌位置、提取車(chē)牌、車(chē)牌字符分割、傾斜校正、字符模板識(shí)別等一系列操作,最后識(shí)別出車(chē)牌號(hào)。
車(chē)牌預(yù)處理進(jìn)行彩色圖像灰度化、高斯濾波、Sobel 邊緣檢測(cè)、顏色定位、圖像二值化、形態(tài)學(xué)處理,最后得到車(chē)牌預(yù)處理后的圖片。
2.1.1 彩色圖像灰度化
視頻輸入設(shè)備用于獲取包含車(chē)輛信息的號(hào)牌圖像,該圖片通常是RGB 彩色圖像,將被轉(zhuǎn)化為單通道圖片。彩色畫(huà)面中的各個(gè)圖像色彩都由R、G、B 三種分量來(lái)選擇,而各個(gè)分量的取值范圍都在0~255 之間[4],這樣對(duì)計(jì)算機(jī)來(lái)說(shuō),彩色圖像的一個(gè)像素點(diǎn)就會(huì)有256×256×256 種顏色的變化范圍[5]。而灰度圖像是R、G、B 分量相同的一種特殊彩色圖像,對(duì)計(jì)算機(jī)來(lái)說(shuō),一個(gè)像素點(diǎn)的變化范圍只有0~255 共256 種。所以將圖片從RGB 彩色圖片轉(zhuǎn)換成灰度圖,其中灰度值在0~255 范圍,0 表示黑色,255 表示白色[6],其它值根據(jù)灰度的不同來(lái)選取。形成灰度化圖像如圖2 所示。RGB 轉(zhuǎn)換為灰度圖公式為
圖2 車(chē)輛灰度化圖像Fig.2 Grayscale image of vehicle
2.1.2 高斯濾波
因?yàn)楣に嚭铜h(huán)境方面的問(wèn)題,圖像上的文字顯示時(shí)往往受噪聲的干擾[7]。常用的去除噪聲的方法[8]有空域?yàn)V波法和頻域?yàn)V波法。在本文中,應(yīng)用了空域?yàn)V波中的線性濾波,并包含了高斯濾波、均值濾波、維納濾波[9]以及一些典型濾波。
高斯濾波是一種線性抗混疊濾波,可以用來(lái)減少高斯噪聲,一般用于圖像處理中的降噪。更簡(jiǎn)單地說(shuō),高斯濾波就是平衡稱(chēng)量特征和均衡整個(gè)像素的過(guò)程,每個(gè)像素點(diǎn)的數(shù)值都是經(jīng)過(guò)權(quán)衡和平衡特征值和其他像素的差值來(lái)得到的。而高斯濾波系統(tǒng)則包括用圖案掃描圖像中的所有圖像,以及利用對(duì)在圖像中定義的周?chē)衅渌氐幕叶戎档募訖?quán)平均值,來(lái)替換在畫(huà)面中的所有像素點(diǎn)值。高斯抗鋸齒濾波器對(duì)控制具有正常范圍的噪聲領(lǐng)域也十分有用。該系統(tǒng)可以通過(guò)OpenCV 的函數(shù)cv2.GaussianBlur()對(duì)圖像范圍實(shí)施高斯平滑,從而使得所要求的車(chē)牌區(qū)域范圍更加明顯。執(zhí)行高斯濾波的示意圖如圖3 所示,方格中數(shù)字代表像素值。
圖3 高斯濾波示意圖Fig.3 Schematic diagram of Gaussian filtering
2.1.3 Sobel 邊緣檢測(cè)
本設(shè)計(jì)采用Sobel 算子的邊緣檢測(cè)方法,采用Sobel算子進(jìn)行x 和y 方向上邊緣化處理,使用OpenCV上cv2.Sobel()函數(shù)進(jìn)行邊緣檢測(cè)。使用Sobel 算子后,干擾信息減少,車(chē)牌字符邊緣信息明顯,為車(chē)牌定位后續(xù)工作提供高質(zhì)量的前期圖像[10]。Sobel 邊緣檢測(cè)效果圖如圖4 所示。
圖4 Sobel 邊緣檢測(cè)效果圖Fig.4 Effect picture of Sobel edge detection
2.1.4 顏色定位
目前車(chē)牌識(shí)別系統(tǒng)圖像采集設(shè)備獲取圖片通常情況下具有較高的分辨率,為了降低算法計(jì)算模塊,加快處理速度,算法在顏色定位之前對(duì)圖片進(jìn)行抽稀運(yùn)算,以降低圖像分辨率,對(duì)圖像進(jìn)行預(yù)處理。本文采用邊緣信息與顏色特征結(jié)合的車(chē)牌定位方法,流程如圖5 所示。將圖像進(jìn)行由RGB 顏色空間到HSV 顏色空間轉(zhuǎn)換。基于顏色信息的定位方法是先檢測(cè)出藍(lán)色像素,再進(jìn)行后續(xù)操作。
圖5 邊緣信息與顏色信息結(jié)合的車(chē)牌定位流程Fig.5 License plate location process combining edge information and color information
2.1.5 圖像二值化
灰度圖像通常含有256 個(gè)灰度值,能良好地表現(xiàn)圖像的明暗程度,以便于更好地顯示車(chē)牌處理中所要求的目標(biāo)信號(hào),因此一般把圖像分成2 個(gè)部分:目標(biāo)與背景,把目標(biāo)和背景分離,盡量避免背景圖像的影響,并保存好目標(biāo)信號(hào)。該圖像被轉(zhuǎn)換為只包含兩級(jí)灰色的黑白圖像,即0 和255,即二值圖像。
二值化也是最重要的圖像處理技術(shù)之一,常常被用作預(yù)處理。在車(chē)牌識(shí)別系統(tǒng)中,二值化后的像素集通常僅指像素值為0~255 之間的區(qū)域,而不需考慮多個(gè)像素值,從而簡(jiǎn)化了處理,但同時(shí)二值化圖像還具有計(jì)算機(jī)內(nèi)存容量小、處理速度快的優(yōu)勢(shì),因此能夠明顯提升處理效果。
二值化核心是選取合適的閾值T 來(lái)拆分目標(biāo)和背景,選擇合適的閾值T,將灰度圖像與之做比較,然后劃為兩部分[11]。二值化公式為
本設(shè)計(jì)應(yīng)用OpenCV 中cv2.threshold()函數(shù)對(duì)車(chē)牌灰度圖像進(jìn)行二值化處理。二值化效果圖如圖6 所示。
圖6 二值化效果圖Fig.6 Rendering of binarization
2.1.6 形態(tài)學(xué)處理
腐蝕和膨脹是形態(tài)學(xué)處理中最基本的過(guò)程。對(duì)于腐蝕操作,假定每個(gè)站點(diǎn)的矩形鄰域的最小值是該位置的灰色輸出值。鄰近區(qū)域可以是矩形結(jié)構(gòu)、橢圓結(jié)構(gòu)、十字形結(jié)構(gòu)等。這個(gè)結(jié)構(gòu)被定義為一個(gè)元素的結(jié)構(gòu),它實(shí)際上是一個(gè)01 二進(jìn)制矩陣,“與”和“或”的邏輯操作結(jié)果。使用腐蝕操作后,邊緣界限會(huì)變小,像素帶也會(huì)變窄,從而將極小的像素塊抹除,全部腐蝕掉。使用膨脹操作后,圖片當(dāng)中物體的界限會(huì)向外擴(kuò)張,即使該物體的邊緣界限存在缺損,這些缺損的邊界部分也會(huì)被像素補(bǔ)充。本文用OpenCV 中cv2.getStructuringElement()函數(shù)獲取結(jié)構(gòu)化元素、cv2.morphologyEx()函數(shù)進(jìn)行各類(lèi)形態(tài)學(xué)的變化、cv2.dilate()函數(shù)對(duì)圖像進(jìn)行膨脹、cv2.erode()函數(shù)對(duì)圖像進(jìn)行腐蝕,最后獲得車(chē)牌區(qū)域。經(jīng)過(guò)形態(tài)學(xué)處理效果圖如圖7 所示。
圖7 形態(tài)學(xué)處理效果圖Fig.7 Effect picture of morphology processing
圖片在經(jīng)車(chē)牌圖像預(yù)處理后已達(dá)到了矩形檢查的條件,即可通過(guò)OpenCV 庫(kù)中cv2.findContours()函數(shù)對(duì)圖像進(jìn)行矩形檢測(cè)[12]。在圖片中還可以包含幾個(gè)矩形區(qū)域,為提升車(chē)牌號(hào)檢測(cè)效果,在本文中首先設(shè)定好適合于車(chē)牌號(hào)尺寸的候選區(qū)域,根據(jù)國(guó)家規(guī)定的車(chē)牌尺寸將候選區(qū)域的寬高比設(shè)置在3.0~3.5 之間,能夠保證框選區(qū)域有車(chē)牌信息,還能去除無(wú)效區(qū)域。識(shí)別到車(chē)牌區(qū)域時(shí)將其提取出來(lái),如圖8 所示。
圖8 車(chē)牌定位圖Fig.8 Location map of license plate
把車(chē)牌定位出來(lái)后,然后對(duì)車(chē)牌水平矯正。在OpenCV 中,可以使用函數(shù)HoughLines 來(lái)調(diào)用標(biāo)準(zhǔn)的HougLine 轉(zhuǎn)換和多尺度的HoughLine 轉(zhuǎn)換。HoughL-inesP 函數(shù)用于調(diào)用累積概率HoughLine 轉(zhuǎn)換[13]。二維坐標(biāo)軸上表示一條直線的方程公式為
因此想求出一條直線就需求出a 和b 的參數(shù)值。
極坐標(biāo)公式為
這2 個(gè)參數(shù)同時(shí)也是表示一個(gè)直線的關(guān)鍵參數(shù),確定了這2 個(gè)參數(shù)就能夠判斷一條直線。OpenCV中調(diào)用霍夫線性變換,就可獲得這2 個(gè)參數(shù)值。
通過(guò)Hough 變換提取邊框,可以確定所拍到的車(chē)牌傾斜角,接著再利用空間轉(zhuǎn)換技術(shù),對(duì)圖片進(jìn)行翻轉(zhuǎn),算出號(hào)牌上所有字符在連通區(qū)域的中心點(diǎn),然后通過(guò)將之?dāng)M合,從而得出號(hào)牌的最大傾斜角,然后通過(guò)計(jì)算車(chē)牌字符的局部極小和極大特征點(diǎn),之后投影確認(rèn)號(hào)牌傾斜角,然后通過(guò)旋轉(zhuǎn)得到經(jīng)過(guò)校正后圖形[14]。
對(duì)提取到的車(chē)牌號(hào)圖像再進(jìn)行灰度值處理、閾值化處理獲得二值圖,如圖9 所示。然后查找二值化車(chē)牌號(hào)的輪廓,將所有輪廓逐一使用cv2.boundingRect()函數(shù)獲得圖像的最小矩形邊框里的信息,把車(chē)牌號(hào)信息進(jìn)行排序,最后顯示出車(chē)牌字符分割圖,如圖10 所示。
圖9 車(chē)牌二值圖Fig.9 Binary diagram of license plate
圖10 車(chē)牌字符分割圖像Fig.10 Character segmentation image of license plate
由于車(chē)牌的第一字符是以中文顯示省份,第二字符是英文字符,而其他字符是以英文和數(shù)字混合匹配的,于是第一字符選擇獲得車(chē)牌字符模板中的中文模板列表進(jìn)行匹配,第二字符選擇獲得車(chē)牌字符模板中的英文模板進(jìn)行匹配,而其余字符選擇獲得車(chē)牌字符模板中的英文和數(shù)字模板列表進(jìn)行匹配[15],讀取模板的地址與圖片進(jìn)行匹配,將模板進(jìn)行格式化轉(zhuǎn)換、模板圖像閾值化處理、獲得待檢測(cè)圖片的尺寸、將模板調(diào)整為與圖像一樣大小最后進(jìn)行模板匹配,讀取車(chē)牌號(hào)。
樹(shù)莓派運(yùn)行程序后,出現(xiàn)GUI 界面,按下選圖識(shí)別按鈕,可以在樹(shù)莓派文件夾里選擇車(chē)輛圖片進(jìn)行識(shí)別車(chē)牌號(hào),該程序能夠識(shí)別jpg,gif,png 類(lèi)型的圖片,識(shí)別到車(chē)牌號(hào)時(shí)按鈕文字變成“再來(lái)一張唄”,并在車(chē)牌號(hào)信息欄顯示,識(shí)別到的車(chē)牌號(hào)如圖11 所示。
圖11 選圖識(shí)別結(jié)果Fig.11 Recognition results of map selection
樹(shù)莓派運(yùn)行程序后,出現(xiàn)GUI 界面,按下攝像頭識(shí)別按鈕后,會(huì)檢查樹(shù)莓派是否連接到攝像頭,如果沒(méi)有連接到攝像頭,就會(huì)顯示請(qǐng)檢查是否連接到攝像頭,打開(kāi)攝像頭后定時(shí)器啟動(dòng),然后定時(shí)器開(kāi)始計(jì)時(shí)30 ms,結(jié)果是每過(guò)30 ms 從攝像頭讀取一幀顯示,當(dāng)攝像頭捕捉到車(chē)輛時(shí)會(huì)對(duì)車(chē)牌進(jìn)行識(shí)別,并顯示車(chē)牌信息,如圖12 所示。最后并將識(shí)別到的車(chē)牌號(hào)存入數(shù)據(jù)庫(kù)。
圖12 攝像頭識(shí)別結(jié)果Fig.12 Results of camera identification
本設(shè)計(jì)對(duì)90 張車(chē)牌圖片進(jìn)行測(cè)試,測(cè)試效果比較精準(zhǔn),出現(xiàn)2 張車(chē)牌號(hào)無(wú)法識(shí)別,準(zhǔn)確率可達(dá)98%,原因是該車(chē)牌號(hào)不是很清晰,由于攝像頭像素不高導(dǎo)致,今后可以通過(guò)更換高清攝像頭來(lái)解決該問(wèn)題。
現(xiàn)如今,車(chē)牌識(shí)別在生活中的應(yīng)用已經(jīng)十分廣泛,隨著城市汽車(chē)數(shù)量的增長(zhǎng),高速路收費(fèi)口、小區(qū)停車(chē)場(chǎng)對(duì)車(chē)牌識(shí)別需求越來(lái)越高。本文成功開(kāi)發(fā)了一套基于樹(shù)莓派的智能車(chē)牌識(shí)別系統(tǒng),樹(shù)莓派對(duì)汽車(chē)照片進(jìn)行圖像預(yù)處理、定位車(chē)牌位置、提取車(chē)牌、車(chē)牌字符分割、傾斜校正、字符模板識(shí)別等一系列操作,最后將識(shí)別到的車(chē)牌號(hào)顯示在屏幕的GUI 界面上。通過(guò)運(yùn)行測(cè)試,車(chē)牌識(shí)別準(zhǔn)確率高達(dá)98%,識(shí)別時(shí)間較短,成本低,具有很好的發(fā)展前景。