【车牌识别和动态称重系统】(二)基于树莓派+HyperLPR的中文车牌识别

本文介绍了如何使用HyperLPR库在Windows和树莓派上配置开发环境,进行车牌识别。HyperLPR是一个高性能的中文车牌识别库,其速度和鲁棒性优于EasyPR。在代码解析部分,详细讲述了从车牌定位、精确定位到字符识别的流程,涉及了CascadeClassifier、model_finemapping和model_seq_rec等关键函数。
摘要由CSDN通过智能技术生成

引言

在这里插入图片描述
HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP、C/C++、Python语言,Windows/Mac/Linux/Android/IOS平台。与较为流行的开源的EasyPR相比,它的检测速度和鲁棒性和多场景的适应性都要好于目前开源的EasyPR,HyperLPR可以识别多种中文车牌包括白牌,新能源车牌,使馆车牌,教练车牌,武警车牌等。

  • TODO
    支持多种车牌以及双层
    支持大角度车牌
    轻量级识别模型
  • 特性
    速度快 720p,单核 Intel 2.2G CPU (MaBook Pro 2015)平均识别时间低于100ms
    基于端到端的车牌识别无需进行字符分割
    识别率高,卡口场景准确率在95%-97%左右
    轻量,总代码量不超1k行


一、开发环境配置

⭕️Win

1、在Anaconda所建环境的命令行中输入

pip3 install hyperlpr -i https://mirrors.aliyun.com/pypi/simple/

2、下载整个开源库文件
https://gitee.com/zeusees/HyperLPR/tree/master/
在这里插入图片描述

把hyperlpr_py3并改名为hyperlpr复制到Anaconda3安装路径\envs\环境名\lib\python3.6\site-packages,与原目录下的hyperlpr合并

3、新建开发文件
将开源库中的Font、model、HyperLprGUI.py、HyperLprLite.py、demo.py拷到此目录中,创建一个Images的目录,放置待识别车牌的车辆照片,命名为plate1.jpg、plate2.jpg、plate3.jpg。

4、测试代码demo.py(单张图片检测部分)

from hyperlpr.pipline import drawRectBox
import HyperLPRLite as pr
import cv2
import numpy as np
grr = cv2.imread("./Images/plate3.png")
model = pr.LPR("model/cascade.xml","model/model12.h5","model/ocr_plate_all_gru.h5")
for pstr,confidence,rect in model.SimpleRecognizePlateByE2E(grr):
        if confidence>0.7:
            image = drawRectBox(grr, rect, pstr+" "+str(round(confidence,3)))
            print("plate_str:")
            print(pstr)
            print("plate_confidence")
            print(confidence)

cv2.imshow("image",image)
cv2.waitKey(0)

⭕️树莓派

1、在命令行里输入sudo pip3 install hyperlpr
2、将上面的hyperlpr_py3并改名为hyperlpr拷贝到树莓派/home/pi/.local/lib/python3.7/site-packages

二、代码解析

demo.py(单张图片检测部分)

demo中总的流程分为:
1)利用cascade进行车牌定位
2)对粗定位的车牌进行左右边界回归,去除车牌两边多余的部分
3)将精定位的车牌送入CRNN网络进行字符识别

1、输入模块

from hyperlpr.pipline import drawRectBox
import HyperLPRLite as pr
import cv2

Github : https://github.com/icepoint666/HyperLPR

Forked from zeusees/HyperLPR 略加改动

只需要三个代码文件:

  • multi_demo.py
  • demo.py
  • HyperLPRLite.py

2、输入图片识别处理

grr = cv2.imread("./Images/plate3.png")

opencv2的imread函数导入图片, 返回的是Mat类型。

model = pr.LPR("model/cascade.xml","model/model12.h5","model/ocr_plate_all_gru.h5")

HyperLPRLiite.py中的LPR类构造函数导入model, 参数就是训练好的三个模型文件,名字分别是:

  • model/cascade.xml cascade模型
  • model/model12.h5 左右边界回归模型
  • model/ocr_plate_all_gru.h5 字符识别模型
  • HyperLPRLite.py LPR类中的int()函数
 def __init__(self,model_detection,model_finemapping,model_seq_rec):
     self.watch_cascade = cv2.CascadeClassifier(model_detection)
     self.modelFineMapping = self.model_finemapping()
     self.modelFineMapping.load_weights(model_finemapping)
     self.modelSeqRec = self.model_seq_rec(model_seq_rec)

参数 model_detection 就是文件 model/cascade.xml 用到了opencv2的CascadeClassifier()函数

- cv2.CascadeClassifier()函数

参数输入.xml或者.yaml文件,表示加载模型,是一种基于Haar特征的级联分类器用于物体检测的模型

- model_finemapping()函数:车牌精定位
def model_finemapping(self):
    input = Input(shape=[16, 66, 3])  # change this shape to [None,None,3] to enable arbitraty shape input
    x = Conv2D(10, (3, 3), strides=1, padding='valid', name='conv1')(input)
    x = Activation("relu", name='relu1')(x)
    x = MaxPool2D(pool_size=2)(x)
    x = Conv2D(16, (3, 3), strides=1, padding='valid', name='conv2')(x)
    x = Activation("relu", name='relu2'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值