車牌識別的N種辦法——從OCR到深度學(xué)習(xí)
隨著科學(xué)技術(shù)的發(fā)展,人工智能技術(shù)在我們的生活中的應(yīng)用越來越廣泛,人臉識別、車牌識別、目標(biāo)識別等眾多場景已經(jīng)落地應(yīng)用,給我們的生活品質(zhì)得到很大的提升,辦事效率大大提高,同時也節(jié)約了大量的勞動力。
今天我們來講一講車牌識別這個任務(wù),車牌識別技術(shù)經(jīng)過多年的發(fā)展,技術(shù)路線也呈現(xiàn)多樣化,我們來介紹一下其中的兩種:
第一種,單個字符識別
首先,在地面上有傳感器感應(yīng)區(qū)域,當(dāng)有車輛經(jīng)過時自動進(jìn)行拍照,然后對拍的照片進(jìn)行預(yù)處理,變成灰度圖像,去除噪聲等,把一些干擾因素去掉,同時降低圖像的大小,便于后期進(jìn)行邊緣提??;
其次,利用邊緣提取技術(shù),比如canny算子、sobel算子,把圖像輪廓提取出來,根據(jù)車牌長寬比大概為1:2.5左右把大部分不疑似的去掉;然后,再利用圖像灰度值在水平方向和豎直方向上的投影,將字符切割出來;
最后,利用模板匹配或者是已經(jīng)訓(xùn)練好的深度學(xué)習(xí)模型進(jìn)行識別,單獨(dú)把每個字符識別后進(jìn)行串聯(lián)得到整張車牌號碼。
這種方法的瓶頸在于怎么樣把每一個字符準(zhǔn)確地切割出來,這涉及到很多圖像處理技術(shù),比如高斯模糊、圖像銳化、圖像膨脹、伽馬變化、仿射變換等等,目前對于英文字符和數(shù)字的識別準(zhǔn)確度在96%左右,漢字識別的準(zhǔn)確度在95%左右。
第二種辦法,整張車牌識別
首先,與第一種車牌識別一樣,利用傳感器進(jìn)行車輛感應(yīng),把整輛車進(jìn)行拍照;
其次,利用訓(xùn)練好的車牌檢測算法,比如YOLO算法或者其他的目標(biāo)檢測算法把車牌檢測出來。為了提升車牌識別的準(zhǔn)確度,可以利用圖像預(yù)處理技術(shù)對圖像進(jìn)行處理,降低干擾項;
最后,利用已經(jīng)訓(xùn)練好的深度學(xué)習(xí)模型對整張車牌進(jìn)行識別。比如LPRNet、Darknet等
## 第一種方法 ——利用 pytesseract 進(jìn)行識別
pytesseract是一個OCR識別工具,具體的 pytesseract 安裝可百度安裝,直接使用這個工具進(jìn)行識別得到的準(zhǔn)確度還有點(diǎn)低,達(dá)不到理想的效果,需要利用車牌數(shù)據(jù)進(jìn)行訓(xùn)練才可以使用。
## 第二種識別辦法——PaddleOCR
PaddleOCR 是百度paddlepaddle下的OCR模塊,可以用它來識別車牌,直接下載預(yù)訓(xùn)練模型進(jìn)行識別,對于數(shù)字和子母都得到不錯的準(zhǔn)確率,但是針對中文識別的效果并不理想,需要自己的數(shù)據(jù)集進(jìn)行再訓(xùn)練。
要想利用這個模型進(jìn)行訓(xùn)練車牌識別,需要大量的車牌數(shù)據(jù),人工收集不僅耗費(fèi)時間長,要涉及每個省份的車牌需要比較大的成本。
另外的辦法是利用圖像處理技術(shù)進(jìn)行數(shù)據(jù)生成,加上圖像增強(qiáng)技術(shù)來制作數(shù)據(jù)集,這將在我們的第三章識別方法中講到。
將結(jié)果導(dǎo)出到Excel文件夾
## 第三種辦法 ——LPRNet算法
由于要收集滿足深度學(xué)習(xí)的數(shù)據(jù)需要花費(fèi)大量的時間,有一種辦法是通過數(shù)據(jù)生成的辦法生成大量的模擬數(shù)據(jù)集。
緊接著,我們可以利用LPRNet算法進(jìn)行車牌識別,從GitHub上下載有tensorflow、torch兩個版本。
第一步,生成藍(lán)色車牌數(shù)據(jù)集
第二步,根據(jù)算法模型要求將圖像名稱修改并放到指定的文件夾中
第三步,模型訓(xùn)練和測試
## (1) 藍(lán)色車牌生成
需要生成多少張車牌數(shù)據(jù)可通過修改最后一行代碼的數(shù)字即可
## (2) 生產(chǎn)黃色車牌
生成車牌的步驟是把字符寫到純凈的背景圖片上,藍(lán)色的車牌是把白色的字寫到藍(lán)色底的車牌上,可以直接把字符寫到底牌上去,但是黃色底的車牌不能簡單把黑色字寫上去,寫上去的結(jié)果是字符被隱藏起來,需要特別處理。
正確的做法是:
第一步,構(gòu)造一張車牌大小的純黑色車牌,往上面寫白色字符
第二步,將黑白色進(jìn)行反轉(zhuǎn),把這牌的字符和背景進(jìn)行翻轉(zhuǎn)
第三步,將一張沒有字符的黃色底牌和反轉(zhuǎn)后的車牌進(jìn)行結(jié)合,然后經(jīng)過高斯模糊、改變光線、旋轉(zhuǎn)角度等各種隨機(jī)組合模擬出于生活中拍攝處理的圖像。
字符和背景反轉(zhuǎn)
字符和底牌相結(jié)合,并進(jìn)行畸變、模糊、旋轉(zhuǎn)等各種方法,構(gòu)造出多種多樣的車牌圖像。
## (3) 生產(chǎn)新能源車牌
新能源車牌的生成辦法與黃色車牌的生成辦法是一樣的,但是新能源車牌長度比藍(lán)牌、黃牌多一位,而且指定第三個字符為D或者F,但是我們我們在生成時不考慮,只是修改代碼讓程序生成同樣長度的車牌即可。
以上為車牌生成部分代碼,其他代碼參考之前的部分
(4) 重命名各種車牌名稱,使得它適合訓(xùn)練便簽生成要求
(5) 統(tǒng)計各個省份的車牌數(shù)量
主要是確認(rèn)中文字符數(shù)量均衡
(6) 把車牌移動到訓(xùn)練和測試兩個文件夾中
(7) 模型訓(xùn)練及測試
接下來進(jìn)行模型訓(xùn)練。。。 (略)
用第三種方法 LPRNet 來進(jìn)行車牌識別這個項目是一個很不錯的,涉及到圖像處理,深度學(xué)習(xí)等各種圖像相關(guān)的知識,完成這個項目訓(xùn)練后,項目工程能力得到較大提升,對于以后找工作和工作中遇到的問題處理都有比較大的幫助。
能認(rèn)真看到這的小伙伴幫忙點(diǎn)個贊!