EasyPR--一個開源的中文車牌識別系統


 

此文章轉自https://www.cnblogs.com/subconscious/p/3979988.html

 

相比於其他的車牌識別系統,EasyPR有如下特點:

  1. 它基於openCV這個開源庫,這意味着所有它的代碼都可以輕易的獲取。
  2. 它能夠識別中文,例如車牌為蘇EUK722的圖片,它可以准確地輸出std:string類型的"蘇EUK722"的結果。
  3. 它的識別率較高。目前情況下,字符識別已經可以達到90%以上的精度。

  系統還提供全套的訓練數據提供(包括車牌檢測的近500個車牌和字符識別的4000多個字符)。所有全部都可以在Github的項目地址上直接下載到。

  那么,EasyPR是如何產生的呢?我簡單介紹一下它的誕生過程:

  首先,在5月份左右時我考慮要做一個車牌識別系統。這個車牌系統中所有的代碼都應該是開源的,不能基於任何黑盒技術。這主要起源於我想鍛煉自己的C++和計算機視覺的水平。

  我在網上開始搜索了資料。由於計算機視覺中很多的算法我都是使用openCV,而且openCV發展非常良好,因此我查找的項目必須得是基於OpenCV技術的。於是我在CSDN的博客上找了一篇文章

  文章的作者taotao1233在這兩篇博客中以半學習筆記半開發講解的方式說明了一個車牌識別系統的全部開發過程。非常感謝他的這些博客,借助於這些資料,我着手開始了開發。當時的想法非常朴素,就是想看看按照這些資料,能否真的實現一個車牌識別的系統。關於車牌照片數據的問題,幸運的很,我正在開發的一個項目中有大量的照片,因此數據不是問題。

  令人高興的是,系統確實能夠工作,但是讓人沮喪的,似乎也就“僅僅”能夠工作而已。在車牌檢測這個環節中正確性已經慘不忍睹。

  這個事情給了我一撥不小的冷水,本來我以為很快的開發進度看來是樂觀過頭了。於是我決定沉下心來,仔細研究他的系統實現的每一個過程,結合OpenCV的官網教程與API資料,我發現他的實現系統中有很多並不適合我目前在做的場景。

  我手里的數據大部分是高速上的圖像抓拍數據,其中每個車牌都偏小,而且模糊度較差。直接使用他們的方法,正確率低到了可怕的地步。於是我開始嘗試利用openCv中的一些函數與功能,替代,增加,調優等等方法,不斷的優化。這個過程很漫長,但是也有很多的積累。我逐漸發現,並且了解他系統中每一個步驟的目的,原理以及如果修改可以進行優化的方法。

  在最終實現的代碼中,我的代碼已經跟他的原始代碼有很多的不一樣了,但是成功率大幅度上升,而且車牌的正確檢測率不斷被優化。在系列文章的后面,我會逐一分享這些優化的過程與心得。

  最終我實現的系統與他的系統有以下幾點不同:

  1. 他的系統代碼基本上完全參照了《Mastering OpenCV with Practical Computer Vision Projects》這本書的代碼,而這本書的代碼是專門為西班牙車牌所開發的,因此不適合中文的環境。
  2. 他的系統的代碼大部分是原始代碼的搬遷,並沒有做到優化與改進的地步。而我的系統中對原來的識別過程,做了很多優化步驟。
  3. 車牌識別中核心的機器學習算法的模型,他直接使用了原書提供的,而我這兩個過程的模型是自己生成,而且模型也做了測試,作為開源系統的一部分也提供了出來。

  盡管我和他的系統有這么多的不同,但是我們在根本的系統結構上是一致的。應該說,我們都是參照了“Mastering OpenCV”這本數的處理結構。在這點上,我並沒有所“創新”,事實上,結果也證明了“Mastering OpenCV”上的車牌識別的處理邏輯,是一個實際有效的最佳處理流程。

  “Mastering OpenCV”,包括我們的系統,都是把車牌識別划分為了兩個過程:即車牌檢測(Plate Detection)和字符識別(Chars Recognition)兩個過程。可能有些書籍或論文上不是這樣叫的,但是我覺得,這樣的叫法更容易理解,也不容易搞混。

  • 車牌檢測(Plate Detection):對一個包含車牌的圖像進行分析,最終截取出只包含車牌的一個圖塊。這個步驟的主要目的是降低了在車牌識別過程中的計算量。如果直接對原始的圖像進行車牌識別,會非常的慢,因此需要檢測的過程。在本系統中,我們使用SVM(支持向量機)這個機器學習算法去判別截取的圖塊是否是真的“車牌”。
  • 字符識別(Chars Recognition):有的書上也叫Plate Recognition,我為了與整個系統的名稱做區分,所以改為此名字。這個步驟的主要目的就是從上一個車牌檢測步驟中獲取到的車牌圖像,進行光學字符識別(OCR)這個過程。其中用到的機器學習算法是著名的人工神經網絡(ANN)中的多層感知機(MLP)模型。最近一段時間非常火的“深度學習”其實就是多隱層的人工神經網絡,與其有非常緊密的聯系。通過了解光學字符識別(OCR)這個過程,也可以知曉深度學習所基於的人工神經網路技術的一些內容。

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


免責聲明!

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



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