EasyPR源碼剖析(1):概述


 

  EasyPR(Easy to do Plate Recognition)是本人在opencv學習過程中接觸的一個開源的中文車牌識別系統,項目Git地址為https://github.com/liuruoze/EasyPR。考慮到大部分人對opencv的使用還比較陌生,我將在接下來的時間內,將自己的EasyPR學習過程中的一點點學習心得分享給大家,當然也是為了督促自己去更好地學習。鄙人技術淺薄,文筆淺陋,未免見笑於大方之家。

  EasyPR將把車牌識別划分為了兩個過程:即車牌檢測(Plate Detection)和字符識別(Chars Recognition)兩個過程。

  • 車牌檢測(Plate Detection):對一個包含車牌的圖像進行分析,最終截取出只包含車牌的一個圖塊。這個步驟的主要目的是降低了在車牌識別過程中的計算量。如果直接對原始的圖像進行車牌識別,會非常的慢,因此需要檢測的過程。在本系統中,我們使用SVM(支持向量機)這個機器學習算法去判別截取的圖塊是否是真的“車牌”。
  • 字符識別(Chars Recognition):該步驟的主要目的就是從上一個車牌檢測步驟中獲取到的車牌圖像,進行光學字符識別(OCR)這個過程。其中用到的機器學習算法是人工神經網絡(ANN)中的多層感知機(MLP)模型。

  下圖是一個完整的EasyPR的處理流程:

圖1 EasyPR的處理流程

  EasyPR中PlateDetect與CharsRecognize各包括三個模塊。

  PlateDetect包括的是車牌定位,SVM訓練,車牌判斷三個過程,見下圖。

圖2 PlateDetect過程詳解 

  通過PlateDetect過程我們獲得了許多可能是車牌的圖塊,將這些圖塊進行手工分類,聚集一定數量后,放入SVM模型中訓練,得到SVM的一個判斷模型,在實際的車牌過程中,我們再把所有可能是車牌的圖塊輸入SVM判斷模型,通過SVM模型自動的選擇出實際上真正是車牌的圖塊。

  PlateDetect過程結束后,我們獲得一個圖片中我們真正關心的部分,車牌。那么下一步該如何處理呢。下一步就是根據這個車牌圖片,生成一個車牌號字符串的過程,也就是CharsRecognize的過程。CharsRecognize包括的是字符分割,ANN訓練,字符識別三個過程,具體見下圖。

圖3 CharsRecognise過程詳解

  在CharsRecognize過程中,一副車牌圖塊首先會進行灰度化,二值化,然后使用一系列算法獲取到車牌的每個字符的分割圖塊。獲得海量的這些字符圖塊后,進行手工分類(這個步驟非常耗時間,后面會介紹如何加速這個處理的方法),然后放入神經網絡(ANN)的MLP模型中,進行訓練。在實際的車牌識別過程中,將得到7個字符圖塊放入訓練好的神經網絡模型,通過模型來預測每個圖塊所表示的具體字符,例如圖片中就輸出了“蘇EUK722”。

  至此一個完整的車牌識別過程就結束了,但是在每一步的處理過程中,有許多的優化方法和處理策略。尤其是車牌定位和字符分割這兩塊,非常重要,它們不僅生成實際數據,還生成訓練數據,因此會直接影響到模型的准確性,以及模型判斷的最終結果。這兩部分會是接下來重點介紹的模塊,至於SVM模型與ANN模型,由於使用的是OpenCV提供的類,因此可以直接看openCV的源碼或者機器學習介紹的書,來了解訓練與判斷過程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM