摘 要:本課題研究內(nèi)容是基于傳統(tǒng)方法實現(xiàn)對車牌號碼的識別,運用了計算機視覺等方面的知識??傮w設(shè)計方案包括圖像獲取、圖像預(yù)處理、目標(biāo)區(qū)域檢測、目標(biāo)區(qū)域分割、目標(biāo)區(qū)域處理、字符分割以及字符識別及輸出。Python 因為它易讀、易維護的特點,近年來迅速成為被大量用戶所廣泛應(yīng)用和受歡迎的編程開發(fā)語言。所以此次選擇使用 Python 來完成本次課題的實現(xiàn)。Open CV 應(yīng)用范圍廣泛,它還可以提供 Python、Matlab 等語言接口來實現(xiàn)圖像處理和計算機視覺中的許多通用算法。本課題設(shè)計主要結(jié)構(gòu)采用 Python+Open CV 來實現(xiàn)完成。
關(guān)鍵詞:車牌識別;Python;Open CV
汽車的出現(xiàn)改變了步行和騎自行車的時代,更加便于人們?nèi)粘3鲂?,增加了人們之間的良好溝通。汽車為我們的旅行提供了便利,也給城市的交通造成了壓力。來自城市的車輛進行有效的實時監(jiān)測和管理,能提高智能運輸?shù)男?,有效地減少了人工的操作。這不僅節(jié)省費用,而且在一定程度上還能杜絕工作人員亂收費,違規(guī)操作的問題。因為這諸多原因,社會整體對實現(xiàn)車牌識別技術(shù)寄予了厚望。在這項技術(shù)中,國外的科技人員要比國內(nèi)提前一步開始進行研究,其主要方法便是運用圖像處理技術(shù)將其運用到實際應(yīng)用之中,牌照識別技術(shù)研究沒有產(chǎn)生完整的系統(tǒng)。但基于當(dāng)時的科技水平,使用簡單的圖像處理技術(shù),以此用于實際生活中的一些具體問題,如果想要得到最終人們想要的結(jié)果,則需要工作人員的手動參與。20 世紀(jì) 90 年代以后,我國對車牌自動識別系統(tǒng)的研究開始了。一些高端院校與機構(gòu)同樣對此類技術(shù)進行了深入的探索,研究期間,需要克服的環(huán)境干擾問題極為繁多。截止至今日,國內(nèi)對于車牌自動識別系統(tǒng)技術(shù)的研究已經(jīng)取得了較為巨大的進步,并且其中較為成熟的產(chǎn)品已經(jīng)投入使用。本文的主題和內(nèi)容是使用 Python+ Open CV 技術(shù)來提高車牌識別效率。
1研究框架
本課題研究內(nèi)容是基于傳統(tǒng)方法實現(xiàn)對車牌號碼的識別,運用數(shù)字圖像處理、計算機視覺方面的知識??傮w設(shè)計方案包括圖像獲取、圖像預(yù)處理、目標(biāo)區(qū)域檢測、目標(biāo)區(qū)域分割、目標(biāo)區(qū)域處理、字符分割以及字符識別及輸出。如圖 1 所示為整體設(shè)計思路框圖。
2圖像讀取
使用 Python 對圖像進行讀取有兩種方式。
第一種是利用 Open CV 提供的 cv.imread()函數(shù)和 cv.imshow()函數(shù),在這其中,cv.imread()函數(shù)有兩個參數(shù),第一個參數(shù)為讀取圖像資源的路徑,若圖像資源與項目在同一目錄下則可直接輸入圖像資源的名稱加后綴名,若圖像資源與項目不在同一目錄下,則需要使用絕對路徑加圖像名稱與后綴名。第二個參數(shù)為圖像資源的讀取方式,可用阿拉伯?dāng)?shù)字 0,1,2 表示,分別表示加載黑白圖像,加載彩色圖像,加載含阿爾法通道信息圖像。cv.imshow()函數(shù)則用來顯示加載的圖像資源,此函數(shù)也有兩個參數(shù),顯示圖像的窗體名稱及顯示的圖片變量名稱分別為其第一和第二個參數(shù)。
第二種方式是使用 cv.imdecode()函數(shù)來加載圖像資源。cv.imread()函數(shù)要求圖像資源名稱不能包含中文字符,而 cv.imdecode()函數(shù)可以選擇編碼格式,對中文命名的圖像資源也可加載顯示。
通過 Numpy 數(shù)組操作來獲取圖像的各個屬性。在本次課程設(shè)計中,需要獲得加載的圖像資源的寬度與高度,通過 Numpy 提供的 shape 方法來返回圖像資源的高度、寬度與通道數(shù)的數(shù)組。
3圖片預(yù)處理
3.1色彩空間轉(zhuǎn)換
從網(wǎng)絡(luò)上下載的圖像資源與手機拍攝的圖像資源,為避免因圖像資源大小格式均不一致而導(dǎo)致出現(xiàn)錯誤。所以要針對所取得的圖像資源進行相應(yīng)的處理。將圖片保存為 jpg 或 png 格式,將圖像資源壓縮成 1000*750 像素,以便后續(xù)對圖像資源進行相關(guān)操作。
將 RGB 色彩圖像使用 cv.cvtColor()函數(shù)對其進行處理為 HSV 色彩飽和度圖像,其中,調(diào)整 HSV 各通道的顏色對應(yīng)的最大值與最小值來實現(xiàn)HSV 色彩飽和度圖像對圖像資源的色彩檢測。HSV 各通道的顏色對應(yīng)的最大值與最小值,如圖 3 所示。
我們通過輸入藍(lán)色對應(yīng)的各個通道的最大值與最小值,利用 cv.imRange()函數(shù)實現(xiàn)對圖像的色彩檢測。Cv.imrange()函數(shù)最重要的三個參數(shù)分別為要處理的圖像和最大值與最小值,可以使用變量和 array 數(shù)組來保存相應(yīng)的值。
3.2邊緣檢測與二值化處理
因為無法避免車輛的背景中不存在藍(lán)色的區(qū)域,只使用顏色檢測不能達到最好的效果。
面對這種情況,需要對顏色檢測后的圖像進行邊緣檢測,描繪出各個部分的邊緣情況,隨后根據(jù)現(xiàn)實情況的具體要求對處理后的圖像進行二值化操作與形態(tài)學(xué)操作。首先要對圖像資源進行高斯濾波去噪,然后通過多次形態(tài)學(xué)開閉操作與腐蝕膨脹填充等操作找出車牌輪廓。
3.3外輪廓繪制與字符切割
通過上面的操作,已經(jīng)找到了車牌的輪廓,但車牌的輪廓并不規(guī)則,無法對其進行操作。所以我們將已經(jīng)找到的車牌的輪廓外圍繪制了一個規(guī)則的矩形,這個規(guī)則的矩形與車牌最外側(cè)輪廓相切,這樣就對車牌成功進行了粗定位。然后將繪制的矩形切割下來。
在對字符進行切割之前,還需要做一些準(zhǔn)備工作。首先針對不同的圖像切割出來的外輪廓尺寸也均不相同。先將切割下來的車牌圖像統(tǒng)一尺寸為車牌標(biāo)準(zhǔn)尺寸 450*15 然后對車牌部分同樣進行二值化處理與形態(tài)學(xué)操作,然后通過遍歷圖像像素值的方法獲取字符界限。從上向下遍歷每一列像素,如若像素值從 0 變成 255,此時表示顏色從黑色變?yōu)榘咨?,則判斷為字符上界,反之,如若像素值從 255 變?yōu)?0,此時表示顏色從白色變?yōu)楹谏?,則判斷為字符下界。然后使用同樣的方法,找出字符的左右界限,然后將每個字符分割出來。
4字符識別
4.1 安裝Tesseract-OCR
Tesseract-OCR 是一個免費的圖片識別文字的軟件,可以通過具體網(wǎng)站下載并進行安裝,隨后通過該軟件進行下一步的相關(guān)實驗。
4.2 字符識別
在 Python 中通過 text = pytesseract.image_to_string(cropImg, lang="chi", config="-psm 10")調(diào)用 tesseract。其中 cropimg 是原圖片,lang 是我們之后自定義的語言,config 后面一定要跟 10 因為此參數(shù)表示對單個字符進行識別,默認(rèn)是對一行字符識別。
我們需要將所獲得的字符轉(zhuǎn)換為 tif 格式才能使用 Tesseract-OCR 進行字符識別,具體的實現(xiàn)方法為:
if type(imgfile) == str and imgfile.endswith(('.bmp', 'gif', 'png', 'jpg')): with Image.open(imgfile)as im:
im.convert('RGB').save(imgfile[:-3] + 'tif')
利用 jTessBoxEditor 對多個字符圖片識別,將識別錯誤的圖片改正。最后得到需要的文件放入文件夾即可。最后得到如圖 10 所示結(jié)果。
5 總結(jié)
本實驗是利用 Python 語言實現(xiàn)車牌識別技術(shù)。實驗的工作流程為獲取圖像、預(yù)處理圖像、檢測目標(biāo)區(qū)域、目標(biāo)區(qū)域分割、目標(biāo)區(qū)域處理、字符分割、字符識別等。在這一具體過程中,為實現(xiàn)目標(biāo)結(jié)果的正常生成,應(yīng)當(dāng)合理運用了 PyCharm 軟件,才能夠較為準(zhǔn)確地識別車牌, 達到了題目要求和預(yù)期目的。因為 Python 語言的簡潔性和通用性,使其開發(fā)較為簡單,而且很多嵌入式,如樹莓派等也都兼容,使其可以方便的進行代碼移植,運用實際的場景中。隨著軟件算法的深入研究和硬件設(shè)備的升級換代,車牌識別技術(shù)也將越來越成熟化和智能化。
參考文獻
[1] Joe Minichino Joseph Howse 著. OpenCV3 計算機視覺 Python 語言實現(xiàn)[M]. 北京:機械工業(yè)出版社,2001.5
[2] 毛星云著. OpenCV3 編程入門[M]. 北京:電子工業(yè)出版社 2015.7
[3] 岡薩雷斯(美),伍茲(美)著 數(shù)字圖像處理[M] 北京:電子工業(yè)出版社 2011.6
[4] 斯蒂格(德)著 機器視覺算法與應(yīng)用[M] 北京:清華大學(xué)出版社 2008.12
[5] 布拉德斯基(美)著 學(xué)習(xí) OpenCV[M] 北京:清華大學(xué)出版社 2009.10
[6] 圖像處理與分析[M]. 科學(xué)出版社 , 崔屹編著, 2000
[7] 李曉莎,林森.基于 Python+OpenCV 的車牌識別技術(shù)的研究[J].數(shù)字技術(shù)與應(yīng)用,2019,37(06):95-97
作者簡介:霍立志(1996),男,安徽淮北人,淮北師范大學(xué)信息學(xué)院2016級本科在讀,研究方向:通信工程