一.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的訓練數據和各個模型的訓練模型請從百度雲上下載
將模型文件:
- whether_car_20180210T1049.zip
- chars_20180210T1038.zip
- 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配置教程
- python配置教程
- Linux下C++配置教程
- 帶UI界面的工程(感謝群內小伙伴的工作)。
- 端到端(多標簽分類)訓練代碼(感謝群內小伙伴的工作)。
- 端到端(CTC)訓練代碼(感謝群內小伙伴工作)。
更新
- 更新了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)
簡介
隨着深度學習的興起,最先進的ALPR技術開始向另一個方向發展,現在許多作品都采用CNN,因為它在通用物體檢測和識別的精度很高。與ALPR相關的是場景文本定位(Scene Text Spotting,STS)和戶外數字讀取問題,目標是在自然場景中找到並讀取文本/數字。盡管ALPR可以被視為STS的一個特例,但這兩個問題具有特殊的特征:在ALPR中,需要學習沒有相關語義信息的字符和數字(沒有太多字體變化),而STS則專注於字體可變性高的文本信息,並探索詞匯和語義信息。數字讀取任務比ALPR的內容簡單,因為它避免了常見的數字/字母混淆,例如B-8,D-0,1-I,5-S。
使用CNN的ALPR商業系統,比較著名的有Sighthound、OpenALPR商業版 和 Amazon Rekognition。盡管這些系統的技術取得了進步,但大多數ALPR系統主要使用車輛和LP的正面視圖,這在諸如收費監控和停車場驗證等應用中很常見。 然而,更寬泛的圖像獲取場景(例如,執法人員使用移動相機或智能電話拍照)可能導致車牌被高度扭曲,但仍然可讀,如圖1所示,即使最先進的商業系統也在為識別這些挑戰性場景中的車牌而努力。
方法介紹
車輛檢測
由於車輛是許多經典目標檢測和識別數據集(如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 |
