【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

相关文章

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

浅析Python中的绝对导入与相对导入

《浅析Python中的绝对导入与相对导入》这篇文章主要为大家详细介绍了Python中的绝对导入与相对导入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1 Imports快速介绍2 import语句的语法2.1 基本使用2.2 导入声明的样式3 绝对import和相对i

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

springboot3.4和mybatis plus的版本问题的解决

《springboot3.4和mybatisplus的版本问题的解决》本文主要介绍了springboot3.4和mybatisplus的版本问题的解决,主要由于SpringBoot3.4与MyBat... 报错1:spring-boot-starter/3.4.0/spring-boot-starter-