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