HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP、C/C++、Python语言,Windows/Mac/Linux/Android/IOS 平台。
github地址: https://github.com/zeusees/HyperLPR
首先将项目下载到本地,这里我使用了本机上配置的虚拟环境HyperLPR。
创建虚拟环境: conda create -n HyperLPR python=3.7
大坑之一: HyperLPR python中版本兼容太差,新版本无法兼容老版本,所以所有第三方库,我们全部指定版本
安装相关的python库
pip install Keras==2.3.1
pip install Theano
pip install Numpy
pip install Scipy
pip install opencv-python==3.4.3.18
pip install scikit-image
pip install pillow
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==2.1.0
下载车牌识别库
打开Git CMD,输入下面的指令,将仓库克隆到本地,–depth=1不克隆历史,只取最新的一个版本,对我们使用者来说可以节少大量的时间,因为历史版本对我们没有什么意义。
git clone --depth=1 https://github.com/zeusees/HyperLPR.git
等待克隆完成
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库进行车牌识别,本次提供的样本显示出识别需要质量较高的图像,对于低质量图像或有逆光干扰的时候,会有多个结果供选择,我们可以根据置信度,或提高图像分辨率进行处理与选择。
错误调试
第一次执行的时候,有可能会报如下错误。
numpy.AxisError: axis 3 is out of bounds for array of dimension 3
需要对程序进行部分修改。
将data= np.expand_dims(data,3)中的3改为2。
这里主要关系到np.expand_dims函数的作用。这个函数是用来调整数组维度的。比如有一个二维数组data(1,2),但是你需要输入3维数组,然后你就需要把数据再加一维。但是需要选择加在哪一维。二维数组就有三个位置(0, 1,2)。注意axis的值是从0开始的。