违章停车车牌识别:使用YOLOv5进行车牌检测与识别

news/2024/11/28 17:51:52/

文末含有完整代码

目录

  1. 介绍
  2. 准备工作
  3. 数据集准备
  4. 训练YOLOv5模型
  5. 车牌识别
  6. 违章停车检测
  7. 总结与展望

1. 介绍

违章停车问题在城市中是一个很常见的交通问题。为了有效地管理违章停车问题,我们需要对违停车辆进行识别。本篇博客将向您展示如何使用YOLOv5进行车牌检测与识别,从而辅助管理违章停车问题。

YOLOv5(You Only Look Once version 5)是一个实时目标检测算法,具有较高的准确性和速度。在本教程中,我们将首先准备车牌检测的数据集,然后使用YOLOv5训练一个车牌检测模型。接着,我们将使用训练好的模型对车牌进行识别。最后,我们将展示如何利用识别结果进行违章停车检测。

2. 准备工作

在开始训练YOLOv5模型之前,我们需要安装一些必要的Python库,包括torchtorchvisionopencv-python等。安装这些库的命令如下:

pip install torch torchvision
pip install opencv-python

接下来,我们需要下载YOLOv5的源代码。您可以从YOLOv5的GitHub仓库下载源代码。

3. 数据集准备

为了训练一个车牌检测模型,我们需要准备一个包含车牌的数据集。数据集应该包含一系列图像,以及每个图像中车牌的位置和标签信息。这些信息通常以XML或者JSON格式存储。

在这个示例中,我们将使用一种简单的文本格式来存储车牌的位置和标签信息。每个图像的标注信息存储在一个与图像同名的.txt文件中。每行代表一个车牌,包含车牌的类别(0表示车牌)、中心点的x和y坐标、宽度和高度。所有坐标和尺寸都是相对于图像宽度和高度的比例。例如:

0 0.5 0.5 0.2 0.1

表示一个车牌位于图像中心,宽度占图像宽度的20%,高度占图像高度的10%。

为了训练YOLOv5模型,我们还需要创建一个数据集配置文件,以告知模型如何加载数据集。配置文件应该包含以下内容:

train: ./data/train.txt
val: ./data/val.txt
nc: 1
names: ['license_plate']

其中trainval字段分别指定了训练集和验证集的图像列表文件。nc字段表示类别数量(本例中只有一个类别:车牌)。names字段列出了每个类别的名称。

4. 训练YOLOv5模型

准备好数据集后,我们可以开始训练YOLOv5模型了。首先,我们需要选择一个预训练模型作为起点。YOLOv5提供了多种尺寸的预训练模型,包括yolov5s(小尺寸,速度快)、yolov5m(中等尺寸,准确性更高)等。在这个示例中,我们将使用yolov5s模型。

接下来,我们可以使用以下命令启动训练:

python train.py --img 640 --batch 16 --epochs 100 --data dataset.yaml --cfg yolov5s.yaml --weights yolov5s.pt

参数说明:

  • --img 640:指定输入图像的尺寸为640x640像素。
  • --batch 16:指定每个批次包含16个样本。
  • --epochs 100:指定训练100个周期。
  • --data dataset.yaml:指定数据集配置文件。
  • --cfg yolov5s.yaml:指定模型配置文件。
  • --weights yolov5s.pt:指定预训练模型的权重文件。

训练完成后,模型权重将保存在runs/train/exp/weights目录下。

5. 车牌识别

训练好车牌检测模型后,我们可以使用它来识别车牌。首先,我们需要加载模型:

import torchmodel = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/train/exp/weights/best.pt', force_reload=True)

然后,我们可以使用模型对图像进行车牌检测:

import cv2
from PIL import Imagedef detect_license_plate(image_path):img = cv2.imread(image_path)img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)results = model(Image.fromarray(img_rgb))return resultsimage_path = 'test_image.jpg'
results = detect_license_plate(image_path)

results对象包含了检测到的车牌的位置和置信度信息。我们可以将检测结果绘制在图像上:

results.render()
cv2.imshow('License Plate Detection', cv2.cvtColor(results.imgs[0], cv2.COLOR_RGB2BGR))
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 违章停车检测

为了检测违章停车,我们需要根据车牌识别结果判断车辆是否停在了禁停区域。这可以通过比较车牌的位置和禁停区域的位置来实现。

首先,我们需要定义一个函数来判断两个矩形是否相交:

def is_overlap(rect1, rect2):x1, y1, w1, h1 = rect1x2, y2, w2, h2 = rect2return not (x1 + w1 < x2 or x2 + w2 < x1 or y1 + h1 < y2 or y2 + h2 < y1)

接下来,我们可以根据车牌检测结果判断车辆是否停在了禁停区域:

def is_illegal_parking(license_plate_results, no_parking_zones):for result in license_plate_results.xywh:for zone in no_parking_zones:if is_overlap(result, zone):return Truereturn Falseno_parking_zones = [(100, 100, 200, 200)]  # 禁停区域的位置
print(is_illegal_parking(results, no_parking_zones))

7. 总结与展望

本篇博客向您展示了如何使用YOLOv5进行车牌检测与识别,以及如何根据识别结果进行违章停车检测。虽然YOLOv5在车牌检测方面表现优异,但是车牌识别仍然有一定的挑战性。在实际应用中,您可能需要使用专门的车牌识别算法对检测到的车牌进行进一步识别。

此外,本篇博客只展示了如何检测单个禁停区域。在实际应用中,您可能需要处理多个禁停区域,以及动态变化的禁停区域。这可能需要您结合其他技术,如地理信息系统(GIS),来实现更高级的违章停车检测

 完整代码(包含所有yolov5车辆识别代码):yolov5


http://www.ppmy.cn/news/109747.html

相关文章

C#初步了解复杂数据类型,函数方法和排序

文章目录 1.复杂数据类型&#xff08;1&#xff09;枚举&#xff08;2&#xff09;数组&#xff08;3&#xff09;结构体 2.数值型和引用类型3.函数4. 初级排序 1.复杂数据类型 &#xff08;1&#xff09;枚举 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 …

Scala基本语法

1.注释 Scala注释使用和Java完全一样。 注释是一个程序员必须要具有的良好编程习惯。 将自己的思想通过注释先整理出来&#xff0c;再用代码去体现。 基本语法 单行注释&#xff1a;// 多行注释&#xff1a;/* */ 文档注释&#xff1a; /** * */ 2.变量和常量 基本语法 va…

EclipseCDT远程交叉编译远程单步调试基于makefile例程(实测有效)

文章目录 前言&#xff1a;1. 新建工程2. 远程编译环境配置2.1 下载sshfs并挂载目录2.2 Debug配置2.3安装EclipseCDT的远程插件2.4 拷贝gdbserver 3. 调试总结: 前言&#xff1a; 之前写过一篇VSCode远程调试linux&#xff0c;当时是把程序以及代码通过远程的方式&#xff0c;…

有奖励!2023陕西省首台(套)重大技术装备产品项目申报条件、认定材料

本文整理了2023陕西省首台&#xff08;套&#xff09;重大技术装备产品项目申报条件&#xff0c;认定材料等相关内容&#xff0c;感兴趣的朋友快跟小编一起来看看吧&#xff01; 一、重点支持方向及领域 重点支持方向及领域&#xff1a;高档工业母机、电力装备、大型矿山和冶金…

Transformer 估算 101

本文主要介绍用于估算 transformer 类模型计算量需求和内存需求的相关数学方法。 引言 其实&#xff0c;很多有关 transformer 语言模型的一些基本且重要的信息都可以用很简单的方法估算出来。不幸的是&#xff0c;这些公式在 NLP 社区中鲜为人知。本文的目的是总结这些公式&…

pyest+appium实现APP自动化测试

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs&#xff1f; 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#x…

python笔记16_实例练习_二手车折旧分析p1

python数据分析练习&#xff0c;具体数据不放出。 分析实践很简单。目的不是做完&#xff0c;而是讲清楚每一步的目的和连带的知识点&#xff08;所以才叫学习笔记&#xff09; 0.数据准备 原始数据格式&#xff1a;csv文件 原始数据结构&#xff1a; 数据格式 字段名 int…

日志 | 使用服务器

一篇稍有些散乱的个人记录。 文章目录 1 命令记录2 操作记录1. 添加用户clf2. 使用yum安装mysql3. 修改mysql密码4. 尝试在多个浏览器同时访问部署的blog 3 Bug记录1. 宝塔面板4042. pip freeze导出依赖&#xff0c;在服务器无法使用3. 安装insightface失败4. conda命令not fou…