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