HyperLPR 开源车牌识别系统的入门使用

概要

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 开源车牌识别系统的入门使用_第1张图片

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库

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 开源车牌识别系统的入门使用_第2张图片

我们需要把hyperlpr_py3文件夹复制到虚拟环境…\anaconda3\envs\HyperLPR\Lib下,并改名为hyperlpr,完整路径为…\anaconda3\envs\HyperLPR\Lib\hyperlpr。

HyperLPR 开源车牌识别系统的入门使用_第3张图片

然后,我们创建一个LPR的目录,将开源库中的Font和model拷到此目录,创建一个 data的目录,放置待识别车牌的车辆照片。

HyperLPR 开源车牌识别系统的入门使用_第4张图片

在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']

HyperLPR 开源车牌识别系统的入门使用_第5张图片

至此,我们成功地使用开源python库进行车牌识别,本次提供的样本显示出识别需要质量较高的图像,对于低质量图像或有逆光干扰的时候,会有多个结果供选择,我们可以根据置信度,或提高图像分辨率进行处理与选择。

错误调试
第一次执行的时候,有可能会报如下错误。

numpy.AxisError: axis 3 is out of bounds for array of dimension 3

需要对程序进行部分修改。

HyperLPR 开源车牌识别系统的入门使用_第6张图片

HyperLPR 开源车牌识别系统的入门使用_第7张图片

将data= np.expand_dims(data,3)中的3改为2。

这里主要关系到np.expand_dims函数的作用。这个函数是用来调整数组维度的。比如有一个二维数组data(1,2),但是你需要输入3维数组,然后你就需要把数据再加一维。但是需要选择加在哪一维。二维数组就有三个位置(0, 1,2)。注意axis的值是从0开始的。

你可能感兴趣的:(深度学习,车牌识别,深度学习,python)