天天看點

opencv車牌定位_車牌識别

背景

汽車車牌尺寸是多少?

1 大型汽車前:440mm×140mm,黃底黑字黑框線;總品質4.5t(含)、乘坐人數20人(含)和車長。後:440mm×220mm(含)以上的汽車、無軌電車及有軌電車;

2 小型汽車:440mm×140mm,藍底白字白框線,除大型汽車以外的各種汽車;

3、兩、三輪機車前:220mm×95mm,黃底黑字黑框線,兩輪機車和三輪機車;

4、輕便機車後:220mm×140mm,藍底白字白框線,輕便機車;

5、農用運輸車:300mm×165mm,黃底黑字黑框線,四輪農用運輸車、輪式自行專用機械和電瓶車等;

6、拖拉機:黃底黑字,各種在道路行駛的拖拉機;

7、挂車:同大型汽車後号牌,全挂車和不與牽引車固定使用的半挂車;

8、教練汽車:440mm×140mm,黃底黑字黑框線,教練用的汽車及其他機動車不含機車和輕便機車;

9、教練機車 同機車号牌 教練用的機車和輕便機車;

10、試驗汽車:440mm×140mm,試驗用的汽車及其他機動車不含機車和輕便機車;

11、試驗機車:同機車号牌,試驗用的機車和輕便機車;

12、臨時入境汽車:300mm×165mm,白底紅字黑“臨時入境”字紅框線(字有金色廓線) 臨時入境參加旅遊、比賽等活動的汽車;

13、臨時入境機車:220mm×120mm,臨時入境參加旅遊、比賽等活動的機車;

14、臨時行駛車:220mm×140mm,白底(有藍色暗紋)黑字黑框線,無牌時需要臨時行駛的機動車。

車牌規則:

1、傳統車牌

第1位為省份簡稱(漢字),第二位為發牌機關代号(A-Z的字母)第3到第7位為序号(由字母或數字組成,但不存在字母I和O,防止和數字1、0混淆,另外最後一位可能是“挂學警港澳使領”中的一個漢字)。

2、新能源車牌

第1位和第2位與傳統車牌一緻,第3到第8位為序号(比傳統車牌多一位)。新能源車牌的序号規則如下:

小型車:第1位隻能是字母D或F,第2為可以是數字或字母,第3到6位必須是數字。

大型車:第1位到第5位必須是數字,第6位隻能是字母D或F。

參考:https://blog.csdn.net/qq_41619796/article/details/104767844

更詳細的參考:https://my.oschina.net/chenyoca/blog/1571062

資料集:

開源車牌識别:https://github.com/detectRecog/CCPD

資料格式,标注,樣本量:https://blog.csdn.net/qianbin3200896/article/details/103009221

CCPD資料集沒有專門的标注檔案,每張圖像的檔案名就是對應的資料标注(label),因為沒有字元分割和車牌檢測框,是以隻适用于端到端的車牌識别。并且省份分布也比較失衡,絕大部分是皖。

opencv車牌定位_車牌識别

CCPD資料集

算法:

綜述:

超強合集:OCR 文本檢測幹貨彙總:https://zhuanlan.zhihu.com/p/54708641

目前中文車牌識别現狀(2018年9月) :https://www.jianshu.com/p/82174681e89f

傳統算法:

傳統算法的一般思路是:

車牌區域提取 ---- 字元分割 -- 子符識别

其中關鍵是定位車牌區域,分割字元,然後識别單個字元,判斷是否子符區域一般會用到SVM,字元識别一般會用到ANN。

針對一些确定的場景,傳統算法的效果跟CNN差别不會很大,無論是精度還是速度,經過長期優化的傳統算法還是很能打的。而CNN因為模型容量有限,可能會出現不可預知卻不可容忍的錯誤。

easyPR
opencv車牌定位_車牌識别

車牌識别流程

opencv車牌定位_車牌識别

車牌檢測流程

opencv車牌定位_車牌識别

字元識别流程

車牌檢測:

邊緣檢測:基于Sobel,代碼中的函數為plateSobelLocate()

基于顔色的搜尋:函數為plateColorLocate(),分步并行處理三種顔色:藍色,黃色,白色,當然需要的可以進行代碼修改,增加綠色牌的搜尋;

EasyPR--開發詳解(5)顔色定位與偏斜扭轉:https://www.cnblogs.com/subconscious/p/4351007.html

基于文字區域的搜尋:這裡使用了MSER(最大穩定極值區域)算子,來處理有字元的區域,函數為plateMserLocate();

字元分割:

首先對矩形框進行二值化:為了消除燈光的音響,用了Otsu門檻值化,函數為spatial_ostu();

通過0和1像素的跳躍次數,來去除車牌上的柳釘以及幹擾直線,函數為clearLiuDing();

去除幹擾後,利用輪廓查找找到左右可能是字元的矩形框Rect,然後利用位置比例找到屬于特定字元的Rect,函數為GetSpecialRect();

字元識别:

字元識别這裡,用了最簡單的MLP進行訓練,中文字元31個,數字字元10個,字母字元24個(I和O不用),白天場景下可得到80+的識别準确率,應該還是不錯的了,當然需要的話,可以自己用更多更新的樣本進行重新訓練,以得到更高的準确率。

參考連結:

https://blog.csdn.net/eternity1118_/article/details/79181207

https://www.cnblogs.com/subconscious/p/3979988.html

https://github.com/liuruoze/EasyPR

MSER(最大穩定極值區域)

參考:

https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E7%A8%B3%E5%AE%9A%E6%9E%81%E5%80%BC%E5%8C%BA%E5%9F%9F

https://blog.csdn.net/zizi7/article/details/50379973

效果:

參考:https://blog.csdn.net/daydayup_668819/article/details/84135940

某次實踐

車牌識别實踐(python+OpenCV+CNN)

字元分割

水準投影:将二值化的車牌圖檔水準投影到Y軸,得到連續投影最長的一段作為字元區域,因為車牌四周有白色的邊緣,這裡可以把水準方向上的連續白線過濾掉。

垂直投影:因為字元與字元之間總會分隔一段距離,是以可以作為水準分割的依據,分割後的字元寬度必須達到平均寬度才能算作一個字元,這裡可以排除車牌第2、3字元中間的“.”。

參考連結:https://blog.csdn.net/GK_2014/article/details/84779166

https://github.com/simple2048/CarPlateIdentity

深度學習 某端到端方法

1.利用u-net圖像分割得到二值化圖像(車牌mask區域)

2.獲得車牌區域坐标,并将車牌圖形矯正,

3.利用卷積神經網絡cnn進行車牌多标簽端到端識别

結果:亮點主要是用了圖像分割來擷取車牌區域,非矩形區域,很容易算出車牌傾斜角度。

後面部分确實是端到端,輸入車牌圖檔,輸出是1*7向量。

基于u-net,cv2以及cnn的中文車牌定位,矯正和端到端識别軟體

參考連結:https://blog.csdn.net/qq_32194791/article/details/106748685

代碼:https://github.com/duanshengliu/End-to-end-for-chinese-plate-recognition

HyperLPR

基于深度學習高性能中文車牌識别 High Performance Chinese License Plate Recognition Framework.

Pipeline:

  1. plateDetection->plateDetectionRough

cascade.detectMultiScale

使用opencv的CascadeClassifier,用在人臉檢測中。cvHaarDetectObjects是opencv1中的函數,opencv2中人臉檢測使用的是 detectMultiScale函數。它可以檢測出圖檔中所有的人臉,并将人臉用vector儲存各個人臉的坐标、大小(用矩形表示),函數由分類器對象調用。

這裡用來檢測車牌。

1、fineMapping->FineMappingVertical

這個看起來像是對上面得到的預選框進行仿射變換

2、fastdeskew

疑似傾斜校正

3、下面是子符識别,分為Segmentation-based和Segmentation-free

Segmentation-based:

  1. FineMappingHorizon,一個小網絡輸出front 和 back,用來調成車牌ROI
  2. 滑動視窗分割
  3. 模闆比對查找
  4. CNN識别字元

Segmentation-free:

  1. FineMappingHorizon,一個小網絡輸出front 和 back,用來調成車牌ROI
  2. 端到端輸出子符,模型如下
opencv車牌定位_車牌識别

參考:

https://github.com/zeusees/HyperLPR

ANPR

檢測車牌用yolo。we detect digits using connected contours then padding and reshaping to have the same input shape and finally we use a convolution neural network for prediction.

In order to read Tunisian plates we detect digits using Sommation of histogram projection after doing some preprocessing then padding and reshaping to have the same input shape and finally we use a multi layer perceptron for prediction.

Code:

https://github.com/GuiltyNeuron/ANPR

DEEP-ANPR

Reading Car License Plates Using Deep Convolutional Neural Networks and LSTMs

arxiv: http://arxiv.org/abs/1601.05610

Number plate recognition with Tensorflow

opencv車牌定位_車牌識别

blog: http://matthewearl.github.io/2016/05/06/cnn-anpr/

github(Deep ANPR): https://github.com/matthewearl/deep-anpr

end-to-end-for-plate-recognition

github: https://github.com/szad670401/end-to-end-for-chinese-plate-recognition

ConvNet-RNN

Segmentation-free Vehicle License Plate Recognition using ConvNet-RNN

intro: International Workshop on Advanced Image Technology, January, 8-10, 2017. Penang, Malaysia. Proceeding IWAIT2017

arxiv: https://arxiv.org/abs/1701.06439

通過使用卷積神經網絡(ConvNet)進行特征提取并使用遞歸神經網絡(RNN)進行排序,我們解決了滑動視窗方法無法通過将整個圖像作為輸入來通路整個圖像的問題。 到ConvNet。 這具有能夠在帶有标簽的完整車牌圖像上對整個模型進行端到端訓練的附加好處。 将ConvNet-RNN架構與基于滑動視窗的方法進行比較的實驗結果表明,ConvNet-RNN架構的性能明顯更好。

Sighthounds

License Plate Detection and Recognition Using Deeply Learned Convolutional Neural Networks

這項工作詳細介紹了Sighthounds全自動車牌檢測和識别系統。 該系統的核心技術是使用一系列深層卷積神經網絡(CNN)與準确而高效的算法交織而成的。 對CNN進行了教育訓練和微調,以使其在不同條件下(例如姿勢,照明,遮擋等的變化)具有魯棒性,并且可以在各種車牌模闆(例如大小,背景,字型等)上工作。 對于定量分析,我們表明我們的系統在幾個基準上都優于領先的車牌檢測和識别技術,即ALPR。

arxiv: https://arxiv.org/abs/1703.07330

api: https://www.sighthound.com/products/cloud

RNN

Adversarial Generation of Training Examples for Vehicle License Plate Recognition

https://arxiv.org/abs/1707.03124

生成對抗網絡(GAN)最近引起了很多研究關注,進而為自然圖像生成帶來了令人印象深刻的結果。 但是,迄今為止,在使用GAN生成的圖像來改善分類任務方面幾乎未見成功。 在這裡,我們嘗試在車牌識别的背景下探索是否有可能使用GAN生成綜合訓練資料以提高識别準确性。 通過精心設計的管道,我們表明答案是肯定的。 首先,使用GAN生成器生成大型圖像集,而無需人工注釋。 然後,将這些圖像饋入深度卷積神經網絡(DCNN),然後饋入具有長短期記憶(LSTM)的雙向遞歸神經網絡(BRNN),以執行特征學習和序列标記。 最後,在實際圖像上微調了預訓練模型。 我們在一些資料集上的實驗結果證明了使用GAN圖像的有效性:與強大的基線相比,可提供中等大小的實際資料,提高了7.5%。 我們表明,提出的架構在具有挑戰性的測試資料集上實作了競争性識别準确性。 我們還利用深度方向獨立的卷積來構造輕量級的卷積RNN,其大小約為一半,在CPU上快2倍。 結合此架構和提議的管道,我們在移動和嵌入式裝置上執行準确識别方面取得了進展。

RPnet

Towards End-to-End Car License Plates Detection and Recognition with Deep Neural Networks

arxiv: https://arxiv.org/abs/1709.08828

opencv車牌定位_車牌識别

網絡架構

給定輸入RGB圖像,在單個正向計算中,RPnet同時預測LP邊界框和相應的LP數。 RPnet首先利用Box回歸層來預測邊界框。然後,參考每個要素圖中邊界框的相對位置,RPnet從幾個已生成的要素圖中提取ROI,在将它們彙集到相同的寬度和高度(16 * 8)後合并它們,并将組合要素圖提供給後續的分類器。

opencv車牌定位_車牌識别

結果

參考:

https://zhuanlan.zhihu.com/p/79760989

https://www.jianshu.com/p/3c103fe3243a

https://www.jianshu.com/p/b59df561f8b5

Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline

paper: http://openaccess.thecvf.com/content_ECCV_2018/papers/Zhenbo_Xu_Towards_End-to-End_License_ECCV_2018_paper.pdf

github: https://github.com/detectRecog/CCPD

dataset: https://drive.google.com/file/d/1fFqCXjhk7vE9yLklpJurEwP9vdLZmrJd/view

巴西車牌端到端ALPR系統

https://zhuanlan.zhihu.com/p/75271545

作者針對真實場景中圖像分辨率比較大(1920×1080像素),并且車輛可能離相機比較遠的問題(考慮到車牌檢測前一般都是進行車輛檢測,可以減少搜尋區域和假正例的數量),提出了一個僅基于帶标注的LP提取汽車前部的簡單方法,并使用它周圍的區域來訓練檢測網絡。網絡結構也基本采用yolo來實作,因為速度較快。最後執行後處理步驟,将混亂的字母交換為數字或數字交換為字母,因為巴西牌照由正好三個字母後跟四個數字組成。

opencv車牌定位_車牌識别
opencv車牌定位_車牌識别

在本文中,作者提出了一種基于深度學習的巴西車牌端到端ALPR系統。建立了兩個基于YOLO的CNN網絡:第一個(FV / LPD-NET)檢測以級聯模式運作的汽車正面視圖和車牌檢測,第二個(LPS / CR-NET)檢測并識别裁剪車牌内的字元。

ALPR

https://zhuanlan.zhihu.com/p/75245831

arxiv:https://arxiv.org/pdf/1802.09567.pdf

整篇論文還是按照基本套路來實作:車輛檢測,車牌檢測,字元分割和識别。車輛/車牌檢測采用yolo實作,速度較快;字元分割和識别是two-stage的過程,主要是進行了簡單的資料增強,包括倒置車牌和翻轉字元。最後采用時間備援組合結果來得到更精确的車輛檢測結果.

opencv車牌定位_車牌識别

車輛/車牌檢測

訓練兩個網絡分别進行,基于fast yolo

opencv車牌定位_車牌識别

字元分割

網絡CR-NET進行字元分割,兩個網絡進行字元識别。并沒有将所有的類别統為35類(0-9, A-Z,除了O和0相似),而是單獨對字母26類和數字10類進行分類。這裡敲重點來了,講到單行/雙行車牌進行字元分割的解決辦法,之前的輸入是cars單行車牌的寬高比是3:1,現在我們加入motocycle資料集(比例為1.17:1)後,在執行字元分割之前水準都放大所有檢測到(2.75:1)。

ALPR in Unscontrained Scenarios

code: https://github.com/sergiomsilva/alpr-unconstrained

論文:https://openaccess.thecvf.com/content_ECCV_2018/papers/Sergio_Silva_License_Plate_Detection_ECCV_2018_paper.pdf

參考:

ECCV2018 ALPR in Unconstrained Scenarios - Mario的文章 - 知乎

https://zhuanlan.zhihu.com/p/74879525

LPRNet

LPRNet: License Plate Recognition via Deep Neural Networks

intro: works in real-time with recognition accuracy up to 95% for Chinese license plates: 3 ms/plate on nVIDIAR GeForceTMGTX 1080 and 1.3 ms/plate on IntelR CoreTMi7-6700K CPU.

arxiv: https://arxiv.org/abs/1806.10447

code:

https://github.com/lyl8213/Plate_Recognition-LPRnet (tensorflow版本,輸入94*24車牌),模型與下面的pytorch版本一緻,與論文還是略有差別,測試效果不差。

https://github.com/sirius-ai/LPRNet_Pytorch (pytorch版本,輸入94*24車牌)

https://github.com/xuexingyu24/License_Plate_Detection_Pytorch (ptorch版本,MTCNN+STN+LPRNET,輸入大圖)

https://github.com/lqian/light-LPR(CNN base on MNN)

官方代碼,與論文比較一緻,與上述版本有差別:https://github.com/opencv/openvino_training_extensions/tree/develop/tensorflow_toolkit/lpr

參考:

https://blog.csdn.net/qq_37053885/article/details/82598916

https://www.cnblogs.com/ywheunji/p/12268340.html

LPRNet論文詳解 - 勤菜鳥的文章 - 知乎

https://zhuanlan.zhihu.com/p/144530956

How many labeled license plates are needed?

intro: Chinese Conference on Pattern Recognition and Computer Vision

arxiv: https://arxiv.org/abs/1808.08410

訓練良好的深度學習模型通常需要大量帶注釋的資料。 由于通常很難收集大量标記資料,甚至更難以注釋,是以在訓練深度神經網絡的過程中廣泛使用了資料擴充和資料生成。 但是,對于獲得令人滿意的性能需要多少标記資料尚無明确的共識。 在本文中,我們嘗試使用車牌字元識别作為示例應用程式來解決此類問題。 我們應用計算機圖形腳本和Generative Adversarial Networks從少量真實的,手動标記的車牌圖像中生成并增強大量帶有逼真的顔色,字型和字元組成的帶注釋的合成車牌圖像。 混合生成的資料和增強的資料,并将其用作從DenseNet修改的車牌識别網絡的訓練資料。 實驗結果表明,從生成的混合訓練資料中訓練出的模型具有良好的泛化能力,即使在原始原始資料數量非常有限的情況下,該方法也能在Dataset-1和AOLP上達到新的最新精度。 車牌。 另外,當減少标記圖像的數量時,由資料生成引起的精度提高變得更加顯着。 當标記圖像的數量增加時,資料增強也起着更為重要的作用。

An End-to-End Neural Network for Multi-line License Plate Recognition
  • intro: ICPR 2018
  • paper: https://sci-hub.se/10.1109/ICPR.2018.8546200#
  • github: https://github.com/deeplearningshare/multi-line-plate-recognition
DeepANPR

https://github.com/hsuRush/DeepANPR

modified yolov3 and modified ResNet+GRU.