欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 08:56:20
...

概要

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 开源车牌识别系统的入门使用

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

等待克隆完成

aaa@qq.com 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 开源车牌识别系统的入门使用

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

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

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

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

在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 开源车牌识别系统的入门使用

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

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

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

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

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

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

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

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

上一篇: 每日一练

下一篇: 每日一练