車牌識別開源項目匯總


一.EasyPR

相關講解(34條消息) 非常詳細的講解車牌識別easypr_再鬧東海7的博客-CSDN博客_easypr

開源庫介紹

  EasyPR是一個中文的開源車牌識別系統,其目標是成為一個簡單、高效、准確的車牌識別引擎。相比於其他的車牌識別系統,EasyPR有如下特點:它基於openCV這個開源庫。這意味着你可以獲取全部源代碼,並且移植到java等平台。它能夠識別中文。例如車牌為蘇EUK722的圖片,它可以准確地輸出std:string類型的"蘇EUK722"的結果。它的識別率較高。圖片清晰情況下,車牌檢測與字符識別可以達到80%以上的精度。

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

完整的EasyPR流程

 

具體說來,EasyPR中PlateDetect與CharsRecognize各包括三個模塊。

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

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

  PlateDetect過程結束后,我們獲得一個圖片中我們真正關心的部分--車牌。那么下一步該如何處理呢。下一步就是根據這個車牌圖片,生成一個車牌號字符串的過程,也就是CharsRecognisze的過程。

CharsRecognise包括的是字符分割,ANN訓練,字符識別三個過程,具體見下圖。

  在CharsRecognise過程中,一副車牌圖塊首先會進行灰度化,二值化,然后使用一系列算法獲取到車牌的每個字符的分割圖塊。獲得海量的這些字符圖塊后,進行手工分類(這個步驟非常耗時間,后面會介紹如何加速這個處理的方法),然后喂入神經網絡(ANN)的MLP模型中,進行訓練。在實際的車牌識別過程中,將得到7個字符圖塊放入訓練好的神經網絡模型,通過模型來預測每個圖塊所表示的具體字符,例如圖片中就輸出了“蘇EUK722”,(這個車牌只是示例,切勿以為這個車牌有什么特定選取目標。車主既不是作者,也不是什么深仇大恨,僅僅為學術說明選擇而已)。

配置實驗環境:

absl-py                0.12.0
astunparse             1.6.3
bleach                 1.5.0
cached-property        1.5.2
cachetools             4.2.2
certifi                2021.5.30
chardet                4.0.0
cycler                 0.10.0
dataclasses            0.8
decorator              4.4.2
easydict               1.9
gast                   0.3.3
google-auth            1.30.1
google-auth-oauthlib   0.4.4
google-pasta           0.2.0
grpcio                 1.38.0
h5py                   2.10.0
html5lib               0.9999999
idna                   2.10
imageio                2.9.0
importlib-metadata     4.5.0
Keras                  2.0.9
Keras-Preprocessing    1.1.2
kiwisolver             1.3.1
Markdown               3.3.4
matplotlib             3.3.4
networkx               2.5.1
numpy                  1.19.5
oauthlib               3.1.1
opencv-python          3.4.3.18
opt-einsum             3.3.0
Pillow                 8.2.0
pip                    21.1.2
protobuf               3.17.2
pyasn1                 0.4.8
pyasn1-modules         0.2.8
pyparsing              2.4.7
python-dateutil        2.8.1
PyWavelets             1.1.1
PyYAML                 4.2b4
requests               2.25.1
requests-oauthlib      1.3.0
rsa                    4.7.2
scikit-image           0.17.2
scipy                  1.4.1
setuptools             49.6.0.post20210108
six                    1.16.0
tensorboard            2.2.2
tensorboard-plugin-wit 1.8.0
tensorflow             1.5.0
tensorflow-estimator   2.2.0
tensorflow-tensorboard 1.5.1
termcolor              1.1.0
tifffile               2020.9.3
typing-extensions      3.10.0.0
urllib3                1.26.5
Werkzeug               2.0.1
wheel                  0.36.2
wincertstore           0.2
wrapt                  1.12.1
zipp                   3.4.1

 准備工作

訓練easypr方法時,請下載easypr_train_data.zip放到data目錄下
測試時請下載data.zip放到data目錄下 easypr的訓練數據和各個模型的訓練模型請從百度雲上下載
將模型文件:

  1. whether_car_20180210T1049.zip
  2. chars_20180210T1038.zip
  3. mrcnn_20180212T2143.zip

解壓放在output下。

最后data文件夾下目錄結構是
├─demo
├─easypr_train_data
│ ├─chars
│ └─whether_car
├─general_test
├─GDSL.txt
└─使用說明.txt
output文件夾下目錄結構是
├─chars_20180210T1038

├─mrcnn_20180212T2143

└─whether_car_20180210T1049

demo測試

# 用easypr的方法
python demo.py --cfg cfgs/easypr.yml --path data/demo/test.jpg

運行結果

輸入圖片:

結果輸出:

Using TensorFlow backend.
Model restored... E:\EasyPR-python\lib\..\output\whether_car_20180210T1049\models\model.ckpt-9
Plate position:
 [[ 871.  774.]
 [ 871.  807.]
 [1012.  807.]
 [1012.  774.]]
Model restored... E:\EasyPR-python\lib\..\output\chars_20180210T1038\models\model.ckpt-9
Chars Recognize:  蘇A0CP56

並生成圖片兩張

功能測試

python func_test.py --cfg cfgs/easypr.yml

結果輸出

Using TensorFlow backend.
--------
功能測試:
1. test plate_detect(車牌檢測);
2. test chars_recognize(字符識別);
3. test plate_recognize(車牌識別);
--------
1
Testing Plate Detect
Model restored... E:\EasyPR-python\lib\..\output\whether_car_20180210T1049\models\model.ckpt-9
Plate position:
 [[ 871.  774.]
 [ 871.  807.]
 [1012.  807.]
 [1012.  774.]]
--------
功能測試:
1. test plate_detect(車牌檢測);
2. test chars_recognize(字符識別);
3. test plate_recognize(車牌識別);
--------
2
Testing Chars Recognize
Model restored... E:\EasyPR-python\lib\..\output\chars_20180210T1038\models\model.ckpt-9
Chars Recognize: 滬AGH092 (CORRECT)
--------
功能測試:
1. test plate_detect(車牌檢測);
2. test chars_recognize(字符識別);
3. test plate_recognize(車牌識別);
--------
3
Testing Plate Recognize
Plate position:
 [[ 871.  774.]
 [ 871.  807.]
 [1012.  807.]
 [1012.  774.]]
Chars Recognize:  蘇A0CP56
--------

批量測試(data目錄下需要有general_test目錄)

python accuracy_test.py --cfg cfgs/easypr.yml

 結果輸出:

Begin to test accuracy
--------
Label:  京A88731
Model restored... E:\EasyPR-python\lib\..\output\whether_car_20180210T1049\models\model.ckpt-9
Model restored... E:\EasyPR-python\lib\..\output\chars_20180210T1038\models\model.ckpt-9
Chars Recognise:  黑A88731
Chars Recognise:  京A88731
time: 13.221395492553711s
--------
--------
Label:  京CX8888
Chars Recognise:  遼X8888
Chars Recognise:  京CX888鄂
Chars Recognise:
Chars Recognise:
time: 77.49492239952087s
--------
--------
Label:  京FK5358
time: 54.39446306228638s
--------
--------
Label:  京H99999
Chars Recognise:  京H99999
time: 6.030373811721802s
--------
--------
Label:  京PC5U22
Chars Recognise:  C5U22
time: 13.862390518188477s
--------
--------
Label:  冀FA3215
Chars Recognise:  冀FA3215
time: 95.06396842002869s
--------

二.HyperLPR

介紹

HyperLPR是一個基於Python的使用深度學習針對對中文車牌識別的實現,與開源的EasyPR相比,它的檢測速度和魯棒性和多場景的適應性都要好於EasyPR。

相關資源

更新

  • 更新了Android實現,增加實時掃描接口 (2019.07.24)
  • 更新Windows版本的Visual Studio 2015 工程至端到端模型(2019.07.03)
  • 更新基於端到端的IOS車牌識別工程。(2018.11.13)
  • 可通過pip一鍵安裝、更新的新的識別模型、傾斜車牌校正算法、定位算法。(2018.08.11)
  • 提交新的端到端識別模型,進一步提高識別准確率(2018.08.03)
  • 增加PHP車牌識別工程@coleflowers (2018.06.20)
  • 添加了HyperLPR Lite 僅僅需160 行代碼即可實現車牌識別(2018.3.12)
  • 感謝 sundyCoder Android 字符分割版本
  • 增加字符分割訓練代碼和字符分割介紹(2018.1.)

TODO

  • 支持多種車牌以及雙層
  • 支持大角度車牌
  • 輕量級識別模型

特性

  • 速度快 720p,單核 Intel 2.2G CPU (MaBook Pro 2015)平均識別時間低於100ms
  • 基於端到端的車牌識別無需進行字符分割
  • 識別率高,卡口場景准確率在95%-97%左右
  • 輕量,總代碼量不超1k行

模型資源說明

  • cascade.xml 檢測模型 - 目前效果最好的cascade檢測模型
  • cascade_lbp.xml 召回率效果較好,但其錯檢太多
  • char_chi_sim.h5 Keras模型-可識別34類數字和大寫英文字 使用14W樣本訓練
  • char_rec.h5 Keras模型-可識別34類數字和大寫英文字 使用7W樣本訓練
  • ocr_plate_all_w_rnn_2.h5 基於CNN的序列模型
  • ocr_plate_all_gru.h5 基於GRU的序列模型從OCR模型修改,效果目前最好但速度較慢,需要20ms。
  • plate_type.h5 用於車牌顏色判斷的模型
  • model12.h5 左右邊界回歸模型

注意事項:

  • Win工程中若需要使用靜態庫,需單獨編譯
  • 本項目的C++實現和Python實現無任何關聯,都為單獨實現
  • 在編譯C++工程的時候必須要使用OpenCV 3.3以上版本 (DNN 庫),否則無法編譯
  • 安卓工程編譯ndk盡量采用14b版本

環境

win10、anaconda4.8.3 、python3.8

github地址:

https://github.com/zeusees/HyperLPR

https://gitee.com/zeusees/HyperLPR

填坑參考網址:

https://www.cnblogs.com/zhupengfei/p/12104504.html

配置參考網址:

https://www.jianshu.com/p/7ab673abeaae

項目配置過程:

(1)實際上只需要 hyperlpr_py3 、Font 、model 三個文件夾。單獨拿出來建個文件夾,再建個car,把測試圖片放里面。

(2)cmd后創建一個新環境 conda create -n hyperlpr36 python=3.6,然后查看自己的環境 conda info -e

(刪除某個環境是 conda remove -n hyperlpr --all)

(3)然后激活它 activate hyperlpr36,使用 conda list 查看里面安裝的包。安裝需要的包,也可以選擇其他的源:

pip install keras==2.0.9 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

pip install Theano==1.0.4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
 pip install numpy==1.16.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install Scipy==1.4.1 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install opencv-python==3.4.3.18 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install scikit-image==0.17.2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install pillow==7.1.2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install tensorflow==1.2.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com  pip install h5py==2.10.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

 

(4)把hyperlpr_py3復制到你的目錄\Anaconda3\envs\hyperlpr36\Lib下,並改名為hyperlpr。

(5)可以在 pycharm 測試,也可以用 jupyter notebook 測試。

pycharm中

新建一個test.py,記得編譯器必須選剛剛建的虛擬環境

from hyperlpr import pipline as  pp
import cv2 # 自行修改文件名 image = cv2.imread("./car/3.jpg") image,res = pp.SimpleRecognizePlate(image) print(res)

jupyter notebook中

在hyperlpr36環境下進入jupyter notebook

找到你的源目錄,new一個python3的test文件,代碼一樣

點擊kernel中的change kernel,選擇你的虛擬環境

這里也許只有python 3選項,因為還沒導入虛擬環境。步驟如下:

1.在cmd中激活hyperlpr36環境

2.在hyperlpr36環境中中安裝好ipykernel

conda install ipykernel


3.在你的C:\ProgramData\jupyter\kernels路徑下生成hyperlpr36文件

python -m ipykernel install --name adda


現在重新打開jupyter notebook,里面就會顯示有這個虛擬環境了

運行結果

輸入圖片:

打印結果:

(518, 690, 3)
校正角度 h  0 v 90 keras_predict [0.15252575 0.8190352 ] c43d6973 e2e: ('京EL0662', 0.9415582844189235) 校正 0.3470723628997803 s 分割 0.14561128616333008 254 尋找最佳點 0.06282758712768555 字符識別 0.21841692924499512 分割和識別 0.4308490753173828 s 車牌: 京EL0662 置信度: 0.99361081634249 1.9338304996490479 s ['京EL0662']

相關問題及解答

Q:Android識別率沒有所傳demo apk的識別率高?

A:請使用Prj-Linux下的模型,android默認包里的配置是相對較早的模型

Q:車牌的訓練數據來源?

A:由於用於訓練車牌數據涉及到法律隱私等問題,本項目無法提供。開放較為大的數據集有CCPD車牌數據集。

Q:訓練代碼的提供?

A:相關資源中有提供訓練代碼

Q:關於項目的來源?

A:此項目來源於作者早期的研究和調試代碼,代碼缺少一定的規范,同時也歡迎PR。

 

三.LPRNet

相關講解LPRnet輕量級實時車牌識別,主網絡代碼以及論文思路簡要介紹 - you-wh - 博客園 (cnblogs.com)(35條消息) PyTorch實現的MTCNN/LPRNet車牌識別_平凡簡單的執着-CSDN博客

LPRNet簡介

  LPRNet全稱就叫做License Plate Recognition via Deep Neural Networks(基於深層神經網絡的車牌識別)。LPRNet由輕量級的卷積神經網絡組成,所以它可以采用端到端的方法來進行訓練。據我們所知,LPRNet是第一個沒有采用RNNs實時車牌識別系統。因此,LPRNet算法可以為LPR創建嵌入式部署的解決方案,即便是在具有較高挑戰性的中文車牌識別上。

LPRNet特性

實時、高精度、支持車牌字符變長、無需字符分割、對不同國家支持從零開始end-to-end的訓練;
第一個不需要使用RNN的足夠輕量級的網絡,可以運行在各種平台,包括嵌入式設備;
魯棒,LPRNet已經應用於真實的交通監控場景,事實證明它可以魯棒地應對各種困難情況,包括透視變換、鏡頭畸變帶來的成像失真、強光、視點變換等。

特征提取骨干網絡架構

  骨干網絡的結構在表[3]中進行了描述。骨干網絡獲取原始的RGB圖片作為輸入,並且計算出大量特征的空間分布。寬卷積(1*13的卷積核)利用本地字符的上下文從而取代了基於LSTM的RNN網絡。骨干子網絡的輸出可以被認為是一個代表對應字符可能性的序列,它的長度剛到等於輸入圖像的寬度。由於解碼器的輸出與目標字符序列的長度是不一致的,因此采用了CTC損失函數,無需分割的端到端訓練。CTC 損失函數是一種廣泛地用於處理輸入和輸出序列不對齊的方法。

  為了進一步地提升模型的表現,增強解碼器所得的中間特征圖,采用用全局上下文關系進行嵌入[12]。它是通過全連接層對骨干網絡的輸出層進行計算,隨后將其平鋪到所需的大小最后再與骨干網絡的輸出進行拼接 ,  加入GAP思想源於Parsenet,parsenet主要圖:,右側部分為加入GAP拼接到feature map上進行識別的表示。

對測試集1000張圖片的實驗結果如下:

[Info] Test Accuracy: 0.894 [894:69:37:1000]
[Info] Test Speed: 0.2548015410900116s 1/1000]

 識別結果打印:

target:  蘇HXN335  ### F ###  predict:  蘇HTXN335
target:  皖AZ787K  ### T ###  predict:  皖AZ787K
target:  皖A6N958  ### T ###  predict:  皖A6N958
target:  皖A6B667  ### T ###  predict:  皖A6B667
target:  皖A32C32  ### F ###  predict:  皖A32C362
target:  皖A753V2  ### T ###  predict:  皖A753V2

 四.alpr-unconstrained

相關講解ALPR:無約束場景中的車牌檢測和識別 - 簡書 (jianshu.com)

簡介

  自動車牌識別( Automatic License Plate Recognition, ALPR)的方法眾多,但大多數現有方法都把注意力放在特定車牌(LP)區域,並且數據集一般是車輛正面車牌比較清晰的區域。本論文提出了一個完整的ALPR系統,適用於任意場景的車輛圖片,其中車牌可能由於傾斜而嚴重失真。主要貢獻是引入了一種新的卷積神經網絡(CNN),該網絡能夠在單個圖像中檢測和校正多個失真的牌照,然后這些校正后的牌照被送到光學字符識別(OCR)方法以獲得最終識別結果。實驗結果表明,本論文提出的方法在沒有任何參數適應或特定場景的微調的情況下,與傳統場景中的最先進的商業方法類似,並且在具有挑戰性的場景中優於學術和商業方法。
  ALPR是在圖像中找到並識別車牌的任務。它通常分為四個子任務,形成一個連續的流程:車輛檢測、車牌檢測、字符分割和字符識別。為簡單起見,通常將最后兩個子任務組合稱為OCR。過去已經提出了許多不同的ALPR任務,通常使用圖像二值化或灰度分析來找到候選區域(即LP和字符),然后是手工制作的特征提取方法和經典的機器學習分類器。

  隨着深度學習的興起,最先進的ALPR技術開始向另一個方向發展,現在許多作品都采用CNN,因為它在通用物體檢測和識別的精度很高。與ALPR相關的是場景文本定位(Scene Text Spotting,STS)和戶外數字讀取問題,目標是在自然場景中找到並讀取文本/數字。盡管ALPR可以被視為STS的一個特例,但這兩個問題具有特殊的特征:在ALPR中,需要學習沒有相關語義信息的字符和數字(沒有太多字體變化),而STS則專注於字體可變性高的文本信息,並探索詞匯和語義信息。數字讀取任務比ALPR的內容簡單,因為它避免了常見的數字/字母混淆,例如B-8,D-0,1-I,5-S。

  使用CNN的ALPR商業系統,比較著名的有SighthoundOpenALPR商業版Amazon Rekognition。盡管這些系統的技術取得了進步,但大多數ALPR系統主要使用車輛和LP的正面視圖,這在諸如收費監控和停車場驗證等應用中很常見。 然而,更寬泛的圖像獲取場景(例如,執法人員使用移動相機或智能電話拍照)可能導致車牌被高度扭曲,但仍然可讀,如圖1所示,即使最先進的商業系統也在為識別這些挑戰性場景中的車牌而努力。

   本論文提出了一個完整的ALPR系統,使用一種新穎的網絡可以在各種場景和攝像機姿勢中檢測LP並估計其失真,從而允許在OCR之前進行整流過程。訓練過程將真實圖像扭曲傾斜來增強訓練數據集,允許使用少於200個手動標記的圖像從頭開始訓練網絡。所提出的網絡和數據增強方案使ALPR系統更加靈活,能夠使用相同的系統參數檢測和識別其他獨立測試集中的車牌。本論文的所有標注數據都是公開可用的,包括汽車數據集,SSIG數據庫和AOLP數據集。

方法介紹

  論文提出的方法由三個主要步驟組成:車輛檢測、車牌檢測和OCR,如圖2所示。給定一張輸入圖像,第一個模塊檢測場景中的車輛。在每個檢測到的車輛區域內,扭曲平面物體檢測網絡( Warped Planar Object Detection Network,wpod-net)會搜索車牌並回歸每次搜索的一個有效變換,可以將車牌區域校正為類似正面視圖的矩形。這些檢測到的車牌和校正后的檢測結果被送入OCR網絡進行最終字符識別。

車輛檢測

  由於車輛是許多經典目標檢測和識別數據集(如Pascal-VOC、ImageNet和Coco)中存在的潛在目標之一,因此作者決定不從頭開始訓練檢測器,而是選擇一個已知模型來執行車輛檢測,並考慮一些標准。一方面,要求較高的召回率,因為任何具有可見LP的漏檢車輛將直接導致整個LP漏檢。另一方面,由於每個錯誤檢測到的車輛必須通過WPOD-NET進行驗證,因此精度過高也可能導致運行時間過長。基於這些考慮,決定使用yolov2網絡,因為它執行速度快(大約70 fps),精度和召回率折衷性好(pascal-voc數據集上有76.8%的mAP)。作者沒有對yolov2進行任何更改或修改,只是將網絡當作黑盒,合並與車輛(比如汽車和公共汽車)相關的輸出,忽略其他類。

  檢測結果(車輛)在被送入wpod-net之前需要調整大小。根據經驗,較大的輸入圖像允許檢測較小的目標,但會增加計算成本。在大致的前/后視圖中,車牌尺寸和車輛邊界框(BB)之間的比率很高。然而,對於斜視/側視而言,此比率往往要小得多,因為傾斜車輛的邊界框往往更大、更長。因此,傾斜視圖的大小應比正面視圖大,以保持LP區域的可識別性。雖然可以使用三維姿態估計方法來確定調整比例,但本論文提出了一個基於車輛邊界框高寬比的簡單快速的過程。當它接近1時,可以使用較小的尺寸,並且必須隨着長寬比的增大而增大。

實驗結果如下:

layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32  0.299 BFLOPs
    1 max          2 x 2 / 2   416 x 416 x  32   ->   208 x 208 x  32
    2 conv     64  3 x 3 / 1   208 x 208 x  32   ->   208 x 208 x  64  1.595 BFLOPs
    3 max          2 x 2 / 2   208 x 208 x  64   ->   104 x 104 x  64
    4 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128  1.595 BFLOPs
    5 conv     64  1 x 1 / 1   104 x 104 x 128   ->   104 x 104 x  64  0.177 BFLOPs
    6 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128  1.595 BFLOPs
    7 max          2 x 2 / 2   104 x 104 x 128   ->    52 x  52 x 128
    8 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256  1.595 BFLOPs
    9 conv    128  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 128  0.177 BFLOPs
   10 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256  1.595 BFLOPs
   11 max          2 x 2 / 2    52 x  52 x 256   ->    26 x  26 x 256
   12 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512  1.595 BFLOPs
   13 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256  0.177 BFLOPs
   14 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512  1.595 BFLOPs
   15 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256  0.177 BFLOPs
   16 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512  1.595 BFLOPs
   17 max          2 x 2 / 2    26 x  26 x 512   ->    13 x  13 x 512
   18 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
   19 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512  0.177 BFLOPs
   20 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
   21 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512  0.177 BFLOPs
   22 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024  1.595 BFLOPs
   23 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024  3.190 BFLOPs
   24 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024  3.190 BFLOPs
   25 route  16
   26 conv     64  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x  64  0.044 BFLOPs
   27 reorg              / 2    26 x  26 x  64   ->    13 x  13 x 256
   28 route  27 24
   29 conv   1024  3 x 3 / 1    13 x  13 x1280   ->    13 x  13 x1024  3.987 BFLOPs
   30 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125  0.043 BFLOPs
   31 detection
mask_scale: Using default '1.000000'
Loading weights from data/vehicle-detector/yolo-voc.weights...Done!
Searching for vehicles using YOLO...
    Scanning samples/test/03009.jpg
        2 cars found
    Scanning samples/test/03016.jpg
        1 cars found
    Scanning samples/test/03025.jpg
        1 cars found
    Scanning samples/test/03033.jpg
        1 cars found
    Scanning samples/test/03057.jpg
        1 cars found
    Scanning samples/test/03058.jpg
        2 cars found
    Scanning samples/test/03066.jpg
        3 cars found
    Scanning samples/test/03071.jpg
        1 cars found
Using TensorFlow backend.
2021-06-10 11:34:50.896375: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
Searching for license plates using WPOD-NET
     Processing /tmp/output/03066_1car.png
        Bound dim: 490, ratio: 1.685950
     Processing /tmp/output/03057_0car.png
        Bound dim: 526, ratio: 1.804819
     Processing /tmp/output/03025_0car.png
        Bound dim: 568, ratio: 1.958333
     Processing /tmp/output/03033_0car.png
        Bound dim: 476, ratio: 1.606780
     Processing /tmp/output/03071_0car.png
        Bound dim: 608, ratio: 2.156250
     Processing /tmp/output/03066_0car.png
        Bound dim: 544, ratio: 1.889503
     Processing /tmp/output/03009_1car.png
        Bound dim: 608, ratio: 3.037433
     Processing /tmp/output/03009_0car.png
        Bound dim: 526, ratio: 1.802211
     Processing /tmp/output/03058_0car.png
        Bound dim: 346, ratio: 1.159664
     Processing /tmp/output/03066_2car.png
        Bound dim: 608, ratio: 2.135135
     Processing /tmp/output/03016_0car.png
        Bound dim: 606, ratio: 2.052117
     Processing /tmp/output/03058_1car.png
        Bound dim: 372, ratio: 1.288136
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   240 x  80 x   3   ->   240 x  80 x  32  0.033 BFLOPs
    1 max          2 x 2 / 2   240 x  80 x  32   ->   120 x  40 x  32
    2 conv     64  3 x 3 / 1   120 x  40 x  32   ->   120 x  40 x  64  0.177 BFLOPs
    3 max          2 x 2 / 2   120 x  40 x  64   ->    60 x  20 x  64
    4 conv    128  3 x 3 / 1    60 x  20 x  64   ->    60 x  20 x 128  0.177 BFLOPs
    5 conv     64  1 x 1 / 1    60 x  20 x 128   ->    60 x  20 x  64  0.020 BFLOPs
    6 conv    128  3 x 3 / 1    60 x  20 x  64   ->    60 x  20 x 128  0.177 BFLOPs
    7 max          2 x 2 / 2    60 x  20 x 128   ->    30 x  10 x 128
    8 conv    256  3 x 3 / 1    30 x  10 x 128   ->    30 x  10 x 256  0.177 BFLOPs
    9 conv    128  1 x 1 / 1    30 x  10 x 256   ->    30 x  10 x 128  0.020 BFLOPs
   10 conv    256  3 x 3 / 1    30 x  10 x 128   ->    30 x  10 x 256  0.177 BFLOPs
   11 conv    512  3 x 3 / 1    30 x  10 x 256   ->    30 x  10 x 512  0.708 BFLOPs
   12 conv    256  3 x 3 / 1    30 x  10 x 512   ->    30 x  10 x 256  0.708 BFLOPs
   13 conv    512  3 x 3 / 1    30 x  10 x 256   ->    30 x  10 x 512  0.708 BFLOPs
   14 conv     80  1 x 1 / 1    30 x  10 x 512   ->    30 x  10 x  80  0.025 BFLOPs
   15 detection
mask_scale: Using default '1.000000'
Loading weights from data/ocr/ocr-net.weights...Done!
Performing OCR...
    Scanning /tmp/output/03009_0car_lp.png
        LP: GN06BG
    Scanning /tmp/output/03016_0car_lp.png
        LP: MPE3389
    Scanning /tmp/output/03025_0car_lp.png
        LP: INS6012
    Scanning /tmp/output/03033_0car_lp.png
        LP: SEZ229
    Scanning /tmp/output/03057_0car_lp.png
        LP: INTT263
    Scanning /tmp/output/03058_1car_lp.png
        LP: C24JBH
    Scanning /tmp/output/03066_0car_lp.png
        LP: 77
    Scanning /tmp/output/03066_2car_lp.png
        LP: HHP8586
    Scanning /tmp/output/03071_0car_lp.png
        LP: 6GQR959

開源數據集

  CCPD(中國城市停車數據集,ECCV)和PDRC(車牌檢測與識別挑戰)。這是一個用於車牌識別的大型國內的數據集,由中科大的科研人員構建出來的。發表在ECCV2018論文Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline
下載地址鏡像/檢測雷科格/ccpd_代碼中國 (csdn.net)

  該數據集在合肥市的停車場采集得來,采集時間早上7:30到晚上10:00。停車場采集人員手持Android POS機對停車場的車輛拍照並手工標注車牌位置。拍攝的車牌照片涉及多種復雜環境,包括模糊、傾斜、陰雨天、雪天等等。CCPD數據集一共包含將近30萬張圖片,每種圖片大小720x1160x3。一共包含8項,具體如下:

 

部分照片示例如下:

 

 

CCPD數據集沒有專門的標注文件,每張圖像的文件名就是對應的數據標注(label)。

例如:025-95_113-154&383_386&473-386&473_177&454_154&383_363&402-0_0_22_27_27_33_16-37-15.jpg

由分隔符'-'分為幾個部分:

1) 025為區域, 

2) 95_113 對應兩個角度, 水平95°, 豎直113°

3) 154&383_386&473對應邊界框坐標:左上(154, 383), 右下(386, 473)

4) 386&473_177&454_154&383_363&402對應四個角點坐標

5) 0_0_22_27_27_33_16為車牌號碼 映射關系如下: 第一個為省份0 對應省份字典皖, 后面的為字母和文字, 查看ads字典.如0為A, 22為Y....

具體的,省份對應標簽如下:

{
  "": 0,
  "": 1,
  "": 2,
  "": 3,
  "": 4,
  "": 5,
  "": 6,
  "": 7,
  "": 8,
  "": 9,
  "": 10,
  "": 11,
  "": 12,
  "": 13,
  "": 14,
  "": 15,
  "": 16,
  "": 17,
  "": 18,
  "": 19,
  "": 20,
  "": 21,
  "": 22,
  "": 23,
  "": 24,
  "西": 25,
  "": 26,
  "": 27,
  "": 28,
  "": 29,
  "": 30
}

字母和數字對應的標簽如下:

{
  "a" : 0,
  "b" : 1,
  "c" : 2,
  "d" : 3,
  "e" : 4,
  "f" : 5,
  "g" : 6,
  "h" : 7,
  "j" : 8,
  "k" : 9,
  "l" : 10,
  "m" : 11,
  "n" : 12,
  "p" : 13,
  "q" : 14,
  "r" : 15,
  "s" : 16,
  "t" : 17,
  "u" : 18,
  "v" : 19,
  "w" : 20,
  "x":  21,
  "y" : 22,
  "z" : 23,
  "0" : 24,
  "1" : 25,
  "2" : 26,
  "3" : 27,
  "4" : 28,
  "5" : 29,
  "6" : 30,
  "7" : 31,
  "8" : 32,
  "9" : 33
}

 五.總結

推理時間對比

  單張推理時間(s)
LPRNet 0.264
EasyPR 18.888
HyperLPR 1.074

 

推理精度對比

  推理精度
LPRNet 0.894
EasyPR 0.142
HyperLPR 0.583


免責聲明!

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



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