YOLOv5/YOLOv8和LPRNet的车牌识别系统

本文介绍了YOLOv5/YOLOv8作为目标检测算法在车牌识别中的应用,以及LPRNet的车牌字符识别能力。通过实例展示了如何将两者结合实现车牌检测与识别,并详细讲解了数据集制作和模型训练的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

YOLOv5 /YOLOv8和 LPRNet:车牌识别系统

随着计算机视觉技术的不断进步,车牌识别技术正变得越来越普遍和重要。在这个领域,YOLO和 LPRNet 是两个备受关注的开源项目,它们为车牌识别带来了新的突破。笔者将会介绍相关功能代码以及自己做的车牌识别系统项目。

YOLO:下一代目标检测算法

YOLO(You Only Look Once)是一种流行的实时目标检测算法,它以其高效的检测速度和准确性而闻名。在之前YOLO 版本的基础YOLOv5/YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。

# YOLOv5 示例代码
import cv2
import yolov5
import numpy as np

model = yolov5.load("path/to/your/yolov5_license.pt")
frame = cv2.imread('path/to/your/license.png')
results = model(frame)
predictions = results.pred[0]
for r in predictions:
    x_min, y_min, x_max, y_max = map(int, r[:4])
    cv2.rectangle(frame, (int(x_min), int(y_min)), (int(x_max), int(y_max)), (0, 0, 255), 3)
cv2.imshow('detecting', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

LPRNet:高效的车牌识别网络

LPRNet 是一种专门设计用于车牌识别的深度学习网络,它能够准确地检测并识别车牌中的字符。与传统的基于模板匹配的方法相比,LPRNet 在复杂场景下表现更加稳定和可靠。

# LPRNet 示例代码
import torch
from data.load_data import CHARS
from model.LPRNet import build_lprnet

lpr_max_len = 8
dropout_rate = 0
phase_train = False
pretrained_model = "./weights/Final_LPRNet_model.pth"
lprnet = build_lprnet(lpr_max_len=lpr_max_len, phase=phase_train, class_num=len(CHARS), 
                                   dropout_rate=dropout_rate)
state_dict = torch.load(pretrained_model, map_location=torch.device("cpu"))
print(lprnet)

YOLOv5 和 LPRNet 在车牌识别中的应用

将 YOLOv5 /YOLOv8和 LPRNet 结合起来,可以构建一个完整的车牌检测与识别系统。首先,利用 YOLOv5/YOLOv8 对图像中的车辆进行检测,然后将检测到的车牌区域输入到 LPRNet 中进行字符识别,最终实现对车牌的准确识别。

# YOLOv5 和 LPRNet 结合示例代码
for r in detection_results.xyxy[0]:
    # 获取检测框坐标
    x_min, y_min, x_max, y_max = map(int, r[:4])
    # 提取车牌图像
    # plate_img = frame[y_min:y_max, x_min:x_max]
    plate_number = self.recognize_plate_single_image(self.lprnet, frame, r[:4].squeeze())
    # 在原图上绘制检测框
    cv2.rectangle(frame, (int(x_min), int(y_min)), (int(x_max), int(y_max)), (0, 0, 255), 3)

这种组合应用不仅可以应用于交通管理、智能停车等领域,还可以扩展到安防监控、智慧城市等更广泛的应用场景中。

制作LPRNet数据集(YOLO标签)

import cv2
import os
from PIL import Image

# 图像文件夹路径
image_folder_path = r'D:\YOLO_LPRNet\datasets\train\images'  

# 标签文件夹路径
label_folder_path = r'D:\YOLO_LPRNet\datasets\train\labels'  

# LPRNet数据集保存路径
lprnet_data_path = r'D:\YOLO_LPRNet\LPRNet_data\train'

# 遍历图像文件夹
for image_filename in os.listdir(image_folder_path):
    # 构建标签文件名
    label_filename = os.path.splitext(image_filename)[0] + '.txt'
    label_filepath = os.path.join(label_folder_path, label_filename)
    
    # 读取图像
    image_filepath = os.path.join(image_folder_path, image_filename)
    image = cv2.imread(image_filepath)
    
    # 读取标签
    with open(label_filepath, 'r') as label_file:
        label_content = label_file.readline().strip().split()
    
    # 提取车牌区域坐标
    x_center = float(label_content[1])
    y_center = float(label_content[2])
    width = float(label_content[3])
    height = float(label_content[4])
    
    # 计算边界框左上角和右下角坐标
    image_height, image_width, _ = image.shape
    xmin = int((x_center - width / 2) * image_width)
    xmax = int((x_center + width / 2) * image_width)
    ymin = int((y_center - height / 2) * image_height)
    ymax = int((y_center + height / 2) * image_height)
    
    # 裁剪车牌区域
    plate_region = image[ymin:ymax, xmin:xmax]
    
    # 将图像从 BGR 格式转换为 RGB 格式
    plate_rgb = cv2.cvtColor(plate_region, cv2.COLOR_BGR2RGB)
    
    # 调整车牌尺寸
    plate_image = Image.fromarray(plate_rgb)
    plate_image = plate_image.resize((94, 24), Image.LANCZOS)
    
    # 保存裁剪后的车牌区域
    save_filename = os.path.splitext(image_filename)[0] + '_plate.jpg'
    save_filepath = os.path.join(lprnet_data_path, save_filename)
    plate_image.save(save_filepath)

print("LPRNet数据集制作完成。")

训练LPRNet模型过程(demo)

在这里插入图片描述

  • 附训练LPRNet模型例子:
  • 百度网盘链接
链接:https://pan.baidu.com/s/1PUmFHQ9aGrmPgial5VlPfg?pwd=1234 
提取码:1234

车牌识别系统项目

  • 面包多:https://mbd.pub/o/bread/ZpWTlpZx
  • 闲鱼用户:欧阳孤云(头像为🐶)
  • 功能:支持图片,本地视频,摄像头车牌识别检测
  • 源码包含YOLO车牌数据集和训练好的YOLOv5和YOLOv8车牌模型
  • 哔哩哔哩展示
    在这里插入图片描述

运行说明

  • 创建虚拟环境
python -m venv venv
  • 激活虚拟环境
activate ./venv/Scripts/activate

或者

./venv/Scripts/activate

如果遇到报错,执行以下指令,然后输入1回车,即可激活虚拟环境

Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy -Scope CurrentUser
  • 环境安装
pip install yolov5==7.0.13 imutils==0.5.4 -i https://pypi.mirrors.ustc.edu.cn/simple/
  • 运行程序
python UI.py

结语

YOLOv5 /YOLOv8和 LPRNet 代表了目标检测和车牌识别领域的最新进展,它们的出现为开发者提供了强大的工具和技术支持。随着深度学习技术的不断发展,我们有理由相信,车牌识别技术将会在更多领域展现出强大的应用价值。

如果你对这个项目感兴趣,不妨亲自动手尝试一下,也许你会发现更多有趣的应用和发现!

参考

https://github.com/sirius-ai/LPRNet_Pytorch
https://github.com/ultralytics/ultralytics

03-09
### LPRNet介绍 LPRNet全称为License Plate Recognition via Deep Neural Networks,由Intel于2018年发表。作为一种轻量级卷积神经网络模型,LPRNet专为车牌识别而设计[^1]。 #### 实时性独特性 值得注意的是,LPRNet是首个无需依赖循环神经网络(RNN)即可实现实时车牌检测的算法。该特性使得其在处理速度上具有显著优势。具体而言,在NVIDIA GeForce GTX 1080 GPU环境下,每帧处理时间仅为3毫秒;而在Intel Core i7-6700K CPU平台上,则缩短至1.3毫秒。此外,前向传播所需的浮点运算次数仅需约0.34 GFLOPs,表明了极高的计算效率资源利用率[^2]。 #### 架构特点 架构方面,LPRNet采用了端到端的设计理念,即在整个流程中不再需要预先执行字符分割操作。这意味着输入图像可以直接送入网络进行整体解析,从而简化了预处理步骤并提高了系统的鲁棒性。为了增强特征提取能力,还引入了一个名为LocNet的小模块用于局部调整图片中的文字清晰度,但这部分并非强制组件。 ```python import torch from lprnet import build_lprnet lprnet = build_lprnet(lpr_max_len=8, phase=False, class_num=len(CHARS), dropout_rate=0.5) print("Loading pretrained model...") pretrained_model = "./weights/Final_LPRNet_model.pth" lprnet.load_state_dict(torch.load(pretrained_model)) lprnet.eval() ``` 此代码片段展示了如何加载训练好的LPRNet模型以便后续使用,其中`build_lprnet()`函数负责构建完整的LPRNet实例化对象,并设置必要的参数配置[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值