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库

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
  • 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库进行车牌识别,本次提供的样本显示出识别需要质量较高的图像,对于低质量图像或有逆光干扰的时候,会有多个结果供选择,我们可以根据置信度,或提高图像分辨率进行处理与选择。

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

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开始的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven 基本命令

今天复习了一下maven命令的使用,这里总结一下,作为后续使用的参考:1. mvn clean清理命令,该命令用来清除原来编译生成的.class和.jar 等文件。maven的做法比较暴力,直接将放置这类文件的targer目录删除了!2…

Linux——软件包简单学习笔记

Linux中的是那种软件包: (这里学习是基于redHat的Cent-OS) 1: 二进制软件包管理(RPM、YUM) 2:源代码包安装 3: 脚本安装(Shell或Java脚本) 一: 二…

表单reset无法重置hidden的解决方案

方法一&#xff1a;用text代替hidden&#xff0c;设置text隐藏 <input id"id" name"id" style"display: none;" value"0" /> 方法二&#xff1a;单独处理hidden类型 jQuery("#saveForm").form("reset");jQu…

python http 返回json中文乱码

json.dumps(var,ensure_asciiFalse)并不能解决中文乱码的问题 python 2.7版本 # -*- coding: utf-8 -*- m {a : 你好}print m >{a: \xe4\xbd\xa0\xe5\xa5\xbd}print json.dumps(m) >{"a": "\u4f60\u597d"}print json.dumps(m,ensure_asciiFalse) …

javascript中Array的操作

concat&#xff08;组合数组&#xff09;join&#xff08;数组转字符串&#xff09;pop&#xff08;删除最后一个元素&#xff09;shift&#xff08;删除第一个元素&#xff09;push&#xff08;在数组尾部添加新元素&#xff09;unshift&#xff08;在数组头部添加新元素&…

Github git clone国内mirror加速

Github国内加速克隆及下载 fastgit.orghttps://doc.fastgit.org/ gitclone.comhttps://gitclone.com/ giteehttps://gitee.com/mirrors cnpmjs.orghttps://github.com.cnpmjs.org/ 克隆加速 #原地址 git clone https://github.com/kubernetes/kubernetes.git#改为 git cl…

ASP.NET MVC 5调用其他Action

引用代码&#xff1a; Html.Action("Index", "BaseData", new { d "variety" }) 后台获取参数&#xff1a; RouteData.Values["d"]

OpenscenGraph中控制swapbuffer的方法(用于多机大屏幕同步显示机制)

*************************************************************************************************************************osg多机同步swapbuffer的实现方式。***osg中真正调用opengl::swapbuffer的地方在 osg::GrapicsContext::swapBuffers()中调用的。***如果develope…

linq to entity常用操作

一、聚合函数查询 double sum 0;using (xxxEntities db new xxxEntities()){sum db.userinfo.AsNoTracking().Where(d > d.idid).Sum(m > (double?)m.money).GetValueOrDefault();}return sum; 二、删除操作 int result 0;if (id > 0){using (gghdbEntities db …

python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决

python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决 具体原因&#xff1a; opencv-python 版本还有一定关系&#xff0c;4.2的上面就行。3.4.2的得改成下面。 解决方法&#xff0c;将 contours, hierarchy cv2.findContours(binary,cv…

java简单自定义Annotation

为什么80%的码农都做不了架构师&#xff1f;>>> 原文内容比较多&#xff0c;这里就简单地说一下。java 5以后增加了3个annotation&#xff0c; Override Deprecated SuppressWarnings 以上annotation用途就不说了。java中自定义annotation需要interface关键字和用到…

c#官方推荐md5通用加密类

/// <summary>/// MD5加密/// </summary>/// <param name"input">需要加密的字符串</param>/// <returns></returns>public static string MD5Encrypt(string input){return MD5Encrypt(input, new UTF8Encoding());}/// <su…

Tensorflow Object detection API 在 Windows10 配置

Tensorflow Object detection API 在 Windows10 下的配置不如在 Ubuntu 下配置方便&#xff0c;但还是有方法的&#xff0c;介绍一下我的配置流程。官方目标检测的demo中调用了大量的py文件&#xff0c;不利于项目的部署&#xff0c;因此我将其合并为两个文件 ##1.Tensorflow m…

使用jq的toggle函数实现全选功能遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> 今天做网站后台管理的时候&#xff0c;要实现一个单选全选的功能&#xff0c;很简单的功能&#xff0c;不过&#xff0c;遇到了一个很诡异的问题&#xff0c;写出来跟大家分享下。 功能就不赘述了&#xff0c;大家都懂&…

linq to js使用汇总

用途&#xff1a;方便js操作查询json数据。 下载网址&#xff1a;http://jslinq.codeplex.com/ 使用方法&#xff1a;只需要引用linq.js即可。 查询方法&#xff1a; 一、where查询 var myList [{ Name: "Jim", Age: 20 },{ Name: "Kate", Age: 21 },…

GO国内镜像加速模块下载

众所周知&#xff0c;国内网络访问国外资源经常会出现不稳定的情况。 Go 生态系统中有着许多中国 Gopher 们无法获取的模块&#xff0c;比如最著名的 golang.org/x/...。并且在中国大陆从 GitHub 获取模块的速度也有点慢。 因此设置 CDN 加速代理就很有必要了&#xff0c;以下…

JS过滤emoji

function filterEmoji(text){var ranges [\ud83c[\udf00-\udfff], \ud83d[\udc00-\ude4f], \ud83d[\ude80-\udeff]];return text.replace(new RegExp(ranges.join(|), g), );} 如果上述代码不能适用所有情景&#xff0c;适用调用前的字符length和处理后的字符长度去对比&#…

AbstractEndpoint 和 ProtocolHandler

2019独角兽企业重金招聘Python工程师标准>>> AbstractEndpoint 和 ProtocolHandler /** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additiona…

HOG + SVM 实现图片分类(python3)

前言 大家能看到这篇文章&#xff0c;想必对HOG还是有些了解了&#xff0c;那我就不赘述了&#xff0c;其实我自己不太懂&#xff0c;但是还是比刚开始好一些了。下面我的代码是参考这位博主的&#xff1a;点我查看 上面那位博主是用的cifar-10数据集&#xff0c;但是我们的数…

sql无限递归查询

--------------所有子集数据包括自己---------------------CREATE PROCEDURE ALLSONID INTASBEGINWITH CTE AS(SELECT ID,PID,NAME,0 AS LVL FROM TEST1WHERE ID IDUNION ALLSELECT D.ID,D.PID,D.NAME,LVL1 FROM CTE C INNER JOIN TEST1 DON C.ID D.PID)SELECT * FROM CTEEND…