HyperLPR Python3车牌识别系统的入门使用
概要
HyperLRP是一個開源的、基于深度學習高性能中文車牌識別庫,由北京智云視圖科技有限公司開發,支持PHP、C/C++、Python語言,Windows/Mac/Linux/Android/IOS 平臺。
github地址:?https://github.com/zeusees/HyperLPR
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:左右邊界回歸模型
可識別和待支持的車牌的類型
HyperLPR的檢測流程
- 使用opencv的HAAR Cascade檢測車牌大致位置
- Extend檢測到的大致位置的矩形區域
- 使用類似于MSER的方式的多級二值化和RANSAC擬合車牌的上下邊界
- 使用CNN Regression回歸車牌左右邊界
- 使用基于紋理場的算法進行車牌校正傾斜
- 使用CNN滑動窗切割字符
- 使用CNN識別字符
環境配置
首先將項目下載到本地,這里我使用了本機上配置的虛擬環境HyperLPR。
創建虛擬環境: conda create -n HyperLPR python=3.7
- 操作系統:windows10
- IDE:Pycharm
- python版本:Anaconda Pyhon3.7
- tensorflow版本:tensorflow-gpu==2.1.0
- cuda版本:10.1
- 顯卡:RTX 2060
- OpenCV: opencv-python==3.4.3.18
- Keras:Keras==2.3.1
大坑之一: HyperLPR python中版本兼容太差,新版本無法兼容老版本,所以所有第三方庫,我們全部指定版本
安裝相關的python庫
下載車牌識別庫
打開Git CMD,輸入下面的指令,將倉庫克隆到本地,–depth=1不克隆歷史,只取最新的一個版本,對我們使用者來說可以節少大量的時間,因為歷史版本對我們沒有什么意義。
git clone --depth=1 https://github.com/zeusees/HyperLPR.git- 1
等待克隆完成
Blackice@Blackice-PC MINGW64 /d/Projects $ git clone --depth=1 https://github.com/zeusees/HyperLPR.git Cloning into 'HyperLPR'... remote: Counting objects: 793, done. remote: Compressing objects: 100% (605/605), done. remote: Total 793 (delta 170), reused 709 (delta 149), pack-reused 0 Receiving objects: 100% (793/793), 92.86 MiB | 86.00 KiB/s, done. Resolving deltas: 100% (170/170), done. Checking out files: 100% (714/714), done.所有文件如下
我們需要把hyperlpr_py3文件夾復制到虛擬環境…\anaconda3\envs\HyperLPR\Lib下,并改名為hyperlpr,完整路徑為…\anaconda3\envs\HyperLPR\Lib\hyperlpr。
然后,我們創建一個LPR的目錄,將開源庫中的Font和model拷到此目錄,創建一個 data的目錄,放置待識別車牌的車輛照片。
在lpr.py文件中寫入如下代碼
from hyperlpr import pipline as pp import cv2 # 自行修改文件名 image = cv2.imread("data/001.jpg") image, res = pp.SimpleRecognizePlate(image) print('-------------') print(res)執行后, 大約幾秒后即可出現結果
(241, 289, 3) 校正角度 h 0 v 90 keras_predict [0.15456393 0.88673264] 0f96bd6b e2e: ('浙B5HC51', 0.896134112562452) 校正 1.6333682537078857 s 分割 0.13702082633972168 254 尋找最佳點 0.021014928817749023 字符識別 0.2136836051940918 分割和識別 0.3737204074859619 s 車牌: 浙B5HC51 置信度: 0.8446585088968277 2.1401290893554688 s ------------- ['浙B5HC51']至此,我們成功地使用開源python庫進行車牌識別,本次提供的樣本顯示出識別需要質量較高的圖像,對于低質量圖像或有逆光干擾的時候,會有多個結果供選擇,我們可以根據置信度,或提高圖像分辨率進行處理與選擇。
錯誤調試
第一次執行的時候,有可能會報如下錯誤。
需要對程序進行部分修改。
將data= np.expand_dims(data,3)中的3改為2。
這里主要關系到np.expand_dims函數的作用。這個函數是用來調整數組維度的。比如有一個二維數組data(1,2),但是你需要輸入3維數組,然后你就需要把數據再加一維。但是需要選擇加在哪一維。二維數組就有三個位置(0, 1,2)。注意axis的值是從0開始的。
總結
以上是生活随笔為你收集整理的HyperLPR Python3车牌识别系统的入门使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号使用Chrome插件:Mark
- 下一篇: 服务器经常崩溃??让我们来看看简单的内存