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的源碼或者機器學習介紹的書,來了解訓練與判斷過程。