【Python文字识别】基于HyperLPR3实现车牌检测和识别(Python版本快速部署)

本文主要是介绍【Python文字识别】基于HyperLPR3实现车牌检测和识别(Python版本快速部署),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        闲来无事,想复现一下网上的基于YOLO v5的单目测距算法。然后就突然想在这个场景下搞一下车牌识别,于是就有了这篇文章。今天就给大家分享基于HyperLPR3实现车牌检测和识别。

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

1、HyperLPR3介绍

        HyperLPR3是一个高性能开源中文车牌识别框架,由北京智云视图科技有限公司开发。它是一个基于Python的深度学习实现,用于中文车牌的识别。与开源的EasyPR相比,HyperLPR3在检测速度、鲁棒性和多场景的适应性方面都有更好的表现。

        HyperLPR3支持多种类型的车牌,包括新能源汽车等。其安装和使用都非常方便,可以通过Python的pip工具直接进行安装,并使用命令行工具对本地图像或在线URL进行快速测试。

        此外,HyperLPR3还支持PHP、C/C++、Python语言,以及Windows/Mac/Linux/Android/IOS平台,具有广泛的适用性。

2、HyperLPR3安装

2.1 Github地址

HyperLPR- 基于深度学习高性能中文车牌识别

2.2 快速安装

pip install hyperlpr3

2.3 支持的车牌类别

  • 单行蓝牌
  • 单行黄牌
  • 新能源车牌
  • 教练车牌
  • 白色警用车牌
  • 使馆/港澳车牌
  • 双层黄牌
  • 武警车牌

3、代码

        Github里可以下载各类语言的demo,也有开放的接口可以直接线上检测车牌。我这里基于官方demo写了一份图片和视频的车牌识别代码。

3.1 辅助函数

def draw_plate_on_image(img, box1, text1, font):x1, y1, x2, y2 = box1  # 识别框的四至范围# random_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2, cv2.LINE_AA)  # 车牌外框# cv2.rectangle(img, (x1, y1 - 25), (x2, y1-3), (139, 139, 102), -1)  # 识别文本底色data = Image.fromarray(img)  # 读取图片draw = ImageDraw.Draw(data)  # PIL绘制图片draw.text((x1, y1 - 27), text1, (0, 0, 255), font=font)  # 添加识别文本res = np.asarray(data)  # 返回叠加识别结果的图片return res

3.2 图片识别

def license_recognition_image(path):image = cv2.imread(path)  # 读取图片results = catcher(image)  # 执行识别算法for code, confidence, type_idx, box in results:# [['京Q58A77', 0.9731929, 0, [150, 160, 451, 259]]]text = f"{code} - {confidence:.2f}"image = draw_plate_on_image(image, box, text, font=font_ch)  # 绘制识别结果cv2.imshow("License Plate Recognition(Directed By RSran)", image)  # 显示检测结果cv2.waitKey(0)

3.3 视频识别

def license_recognition_video(path):video = cv2.VideoCapture()video.open(path)i = 0while True:i += 1ref, image = video.read()  # 组帧打开视频if ref:if i % 10 == 0:results = catcher(image)  # 执行识别算法for code, confidence, type_idx, box in results:# [['京Q58A77', 0.9731929, 0, [150, 160, 451, 259]]]text = f"{code} - {confidence:.2f}"image = draw_plate_on_image(image, box, text, font=font_ch)  # 绘制识别结果cv2.imshow("License Plate Recognition(Directed By RSran)", image)  # 显示检测结果if cv2.waitKey(10) & 0xFF == ord('q'):break  # 退出else:break

3.4 效果展示

下图为百度图片库中检索的案例,如有侵权请联系作者删除。

4、完整代码

# -*- coding: utf-8 -*-
"""
@Time : 2024/4/19 13:59
@Auth : RS迷途小书童
@File :License Plate Recognition.py
@IDE :PyCharm
@Purpose:车辆拍照识别
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
# 导入cv相关库
import cv2
import random
import warnings
import numpy as np
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
import hyperlpr3 as lpr3def draw_plate_on_image(img, box1, text1, font):x1, y1, x2, y2 = box1  # 识别框的四至范围# random_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2, cv2.LINE_AA)  # 车牌外框# cv2.rectangle(img, (x1, y1 - 25), (x2, y1-3), (139, 139, 102), -1)  # 识别文本底色data = Image.fromarray(img)  # 读取图片draw = ImageDraw.Draw(data)  # PIL绘制图片draw.text((x1, y1 - 27), text1, (0, 0, 255), font=font)  # 添加识别文本res = np.asarray(data)  # 返回叠加识别结果的图片return resdef license_recognition_video(path):video = cv2.VideoCapture()video.open(path)i = 0while True:i += 1ref, image = video.read()  # 组帧打开视频if ref:if i % 10 == 0:results = catcher(image)  # 执行识别算法for code, confidence, type_idx, box in results:# [['京Q58A77', 0.9731929, 0, [150, 160, 451, 259]]]text = f"{code} - {confidence:.2f}"image = draw_plate_on_image(image, box, text, font=font_ch)  # 绘制识别结果cv2.imshow("License Plate Recognition(Directed By RSran)", image)  # 显示检测结果if cv2.waitKey(10) & 0xFF == ord('q'):break  # 退出else:breakdef license_recognition_image(path):image = cv2.imread(path)  # 读取图片results = catcher(image)  # 执行识别算法for code, confidence, type_idx, box in results:# [['京Q58A77', 0.9731929, 0, [150, 160, 451, 259]]]text = f"{code} - {confidence:.2f}"image = draw_plate_on_image(image, box, text, font=font_ch)  # 绘制识别结果cv2.imshow("License Plate Recognition(Directed By RSran)", image)  # 显示检测结果cv2.waitKey(0)if __name__ == "__main__":warnings.filterwarnings("ignore", message="Mean of empty slice")  # 忽略“Mean of empty slice”的警告warnings.filterwarnings("ignore", message="invalid value encountered in scalar divide")# 忽略“invalid value encountered in scalar divide”的警告font_ch = ImageFont.truetype("resource/font/platech.ttf", 20, 0)  # 中文字体加载catcher = lpr3.LicensePlateCatcher(detect_level=lpr3.DETECT_LEVEL_HIGH)  # 实例化识别对象file = r"Y:\2024-04-19 14-49-09.mp4"license_recognition_video(file)

这篇关于【Python文字识别】基于HyperLPR3实现车牌检测和识别(Python版本快速部署)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954847

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可