怎麼從零實現車牌識別(LPR)?

大家好,最近在做一個車牌識別的項目(公司要求正確識別率達到95%,處理一幀時間50ms)。我做了一個月,用opencv加那幾個函數(邊緣提取,膨脹腐蝕,外接矩形提取等),試了幾種方法效果都不好(頂多達到50%正確率),像盲頭蒼蠅那樣亂撞,根本沒什麼頭緒。

我本身沒什麼基礎,這個項目相當於從零開始,只能在百度或者豆丁搜別人的博客,文檔,然後一個一個方法去試(別人的代碼還不一定看得很懂)。

有沒有什麼大牛指點一下迷津啊?教教我怎麼找資料,怎麼編演算法,怎麼提高。


那就用深度學習吧,有足夠的標註樣本就可以搞定。https://zhuanlan.zhihu.com/p/21344595?refer=xlvector


哈哈, 好像看到自己兩個月前的影子

深度學習方面不知道你有沒有基礎? 這方面我不太了解不過, 聽說現在的SSD(single shot multibox detector)能做到實時

既然是公司應該能有足夠的樣本了

如果不會深度學習的話

既然有實時的要求, 我之前和你說的MSER可能就不太行了..

SWT需要先矯正一下車牌, 太偏斜不能提取, 我用它提出來的文字總是缺胳膊少腿, 我覺得效果不怎麼樣, 實時性也不好

推薦你看的綜述不知道你有沒有看

就是這篇http://wineyard.in/Abstract/mtech/Embedded/bp/13EM9.pdf

我都覺得太晚看到這篇論文了, 因為之前自己瞎搞過一陣, 基本就是像前面答主說的調參碰運氣, 重點是當時我一直沒有固定的樣本來源, 參數很難適用

上面那篇文章提供了很多的思路, 也進行了性能的比較, 雖然數據不知道會不會造假, 我覺得應該不會差太多

我覺得如果實時的要求高, 而且公司催的緊, 應該去看看easypr, 號稱98%(當然是針對特定場景的優化), 我不知道有沒有人亂說, 沒試過不過覺得比起openalpr, 它應該行. 因為我覺得openalpr好像是後面調用的tesseract, 需要你自己去訓練, 而且看網上tesseract說識別中文效果不怎麼樣, 覺得95%是別想了. 畢竟easypr是針對國內車牌的優化

之前要你看的scene text可能就不太適合了, 能做到實時的沒多少, 有些能做到的, 它用的是自己設計特徵, 即使你能把它實現也不一定會有好的效果

--------------------------------------

老實說不太同意easypr的方法, 就是後面字元切分之類的, 不過考慮到你是在公司實習, 覺得要儘快完成項目的話參考它的應該可以

----------------------------------------

ps: 評論區沒人注意到實時性嗎.......我雖然不懂dl, 不過印象里它實時性並不好, 只是聽到yolo和ssd有改善

上面那篇論文對各個方法性能的比較


怒答一記。

如果要求快速實現,可以試下目前有的兩個開源項目。

如果希望有高準確率和速度(針對自己數據集),根據No Free Lunch定理,則必須根據特定情況進行優化才行。沒有演算法可以適用於任何情況,包括上面說的兩個開源項目。

希望這些經驗可以幫助到題主。


正好也在學習,easyPR和openalpr都基本研究過每行代碼。easypr最新用MSER方法提取字元,速度不能接受。而且採用的強種子弱種子加滑動窗口找缺失字元,對稍微大角度的車牌效果就欠佳。openalpr用人臉識別的技術進行定位,速度很快,但需要大量樣本訓練,而且純在漏檢情況。漢字的特殊性,使得後面包括邊緣提取,字元分割,都要自己調整。兩種方法大概也不到百分之50的正確率。主要是小區進出口圖片測試的。也是急需新方法,求推薦。


不要重複造輪子了好嗎? https://github.com/openalpr/openalpr

唯一可能需要更改的是根據中文,識別京、滬、渝等字元,其他的完全可以照搬


GitHub - liuruoze/EasyPR: An open source project for chinese plate recognition. It aims to be Easy, Flexible, and Accurate. Welcome to contribute your expertise !


識別率達到95%,基本上是商用級別啊。

沒GPU要實時,深度學習還是別想了,這玩意在專用晶元未出來之前僅僅存在實驗室里。

不要以為車牌識別看上去很容易,首先你得要有大量標註的樣本。

推薦

HyperLPR - 一個基於深度學習的支持多種車牌的中文開源車牌識別框架

zeusees/HyperLPR


去看EasyPR https://github.com/liuruoze/EasyPR,參考一下作者【計算機的潛意識】的博客


謝邀,我做過opencv的車牌識別demo

我認為主要分為兩個部分:

車牌檢測,車牌識別

車牌檢測主要做的是如何從一張圖中提取出車牌的位置。

主要涉及的方法有矩陣檢測跟一些圖形學的方法 比如做灰度,邊緣檢測,矩陣等 我覺得這部分要做好需要很好的圖形學功底,這裡可以用的一個特點就是車牌第一個漢字與後面字母數字 有個點 可以考慮這個特徵來提取

然後是車牌識別,在找到車牌所在的矩陣後需要對矩陣做"歸一化",比如照片中的車牌是斜著的 那就需要做矩陣變換 讓車牌成為「正視圖」

然後就是車牌數學跟漢字的識別部分了 我覺得這部分傳統分類器就能到達比較好的效果 因為數字都比較標準 當然也有比如車牌數字上沾了泥土的情況 用cnn這類方法也不錯。

總結下傳統方法就是找到車牌位置,歸一化車牌,然後進行車牌識別。主要難點在於車牌檢測部分。

Ps:可能有些細節不太能確定了 但是大體思路就是這樣。此外dl現在這麼火,可以考慮用dl里的方法來做車牌檢測。


估計你說的是一個完整的車牌檢測識別系統。在這裡檢測可以用cascadeboosting,也可以用rcnn等,為了速度快第一壓縮模型大小,第二選用(或自己針對性優化)高效率預測庫(矩陣庫),第三定點化,一般搞個8位定點准招損失很小(1-2%),預測速度可以提高几倍。識別直接cnn[+lstm]+ctc訓練一個深度學習模型吧,不考慮檢測准招,檢測到識別搞到95%以上應該比較容易(如果訓練很慢或訓不動,先去掉lstm或者init+finetune),速度優化如檢測rcnn類。


樣本夠的話,區域分割後上,直接lenet


我大學的時候畢設做的車牌識別。說實話這個東西想把識別率做到95%真的很不容易。需要大量的樣本學習,我當時學習了一段時間的神經網路演算法,最後可能是樣本不夠,效果差強人意。只有60%左右。

給題主的建議是:去github上學習一下高識別率的人怎麼寫的。你識別率只有50%是因為你僅僅用了opencv提供的一些劃分區域的函數,代碼量和難度都不高,所以識別率低很正常。

神經網路是個不錯的辦法,但需要大數據進行糾正。

其實最難的無非是這幾個步驟:把車牌所在區域完好的截出來並作幾何校正,將字元完好的切割出來,進行識別。神經網路主要用於最後這一步。其他的就看你的代碼功底了。


要想實現車牌識別,就要明白什麼是車牌識別,所謂的車牌識別,就是從一幅圖像中找出汽車牌照並辨識該牌照中的汽車號碼。

車牌識別問題,主要有兩個關鍵點,一個是從整幅圖像中提取出牌照區域圖像,另一個是從牌照圖像中識別出其中的字元信息。第一個關鍵點牽扯到圖像定位、分割、識別問題。第二個關鍵點就是字元識別問題。

針對汽車牌照圖像的字元識別一般包含數據清洗、字元分割、字元特徵提取和字元識別幾個主要過程,其中數據清先是指準備好待識別的牌照圖像,將其轉化為固定格式數據,去除其中的無關內容。

為了後面便於識別處理,牌照圖像一般都被轉化為黑白圖像,即圖像中每個圖像的取值為|0,1|,。經過清洗之後的牌照圖像具有規定的長度尺寸。

一般以字元外廓為介,不包含牌照邊框、螺釘和孔洞等內容。字元分割是指把牌圖像分割成一個個字元圖像,每一個子圖像只包含一個字元。字元特徵提取就是從一個字元圖像中提取字元特徵信息,由其構成特徵向量。

字元識別就是對字元特徵向量進行分類,把給定的特徵向量映射到有限字符集合中的某一個字元上。最後把所有識別出來的字元按照順序排列在一起構成車牌字答就完成了一個車牌的識別過程,一定要知道,人工智慧會像水和電一樣成為我們生活的必需品,深刻改變我們的世界! - 人工智慧 多智時代


最好的辦法 就是採用商業級的 哈哈


我們用的傳統的圖像處理,結合深度學習,現已商用,具體可私信。


推薦這個專欄知乎專欄


請百度 easypr,已經實現中文車票識別。

當然,開源項目用於實際,還是要做不少優化的。


推薦閱讀:

如何評價演算法本身的理解不重要 ,只要會用現成的開源工具來實現就可以這種觀點?
如何用TensorLayer做目標檢測的數據增強
Coursera吳恩達《卷積神經網路》課程筆記(3)-- 目標檢測
分分鐘帶你殺入Kaggle Top 1%

TAG:圖像處理 | 機器學習 | OCR光學字元識別 | OpenCV | 深度學習DeepLearning |