基于Yolov5 的红绿灯识别

2024-02-22 16:50
文章标签 yolov5 识别 红绿灯

本文主要是介绍基于Yolov5 的红绿灯识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

项目简介

数据集的标注

模型训练

小结


项目简介

基于YOLO的红绿灯识别是一种计算机视觉技术,用于识别交通图像中的红绿灯状态。该技术利用了目标检测算法,特别是YOLO(You Only Look Once)算法,来快速准确地检测图像中的红绿灯区域,并对其状态进行分类。基于YOLO的红绿灯识别在智能交通系统、自动驾驶等领域具有重要的应用价值

数据集的标注

数据集标注可以使用:labelimg 进行标注

labelimg 标注工具可到相关博主或者github去找    也可以采用我网盘存储的标注工具 :
https://pan.baidu.com/s/1BrkiKbjEj0XiK1QMC331mg    提取码:6npe

Labelimg是一款开源的数据标注工具,可以标注三种格式。

  1. VOC标签格式,保存为xml文件。

  2. yolo标签格式,保存为txt文件。

  3. createML标签格式,保存为json格式。

 这里我们采用 Yolo标签进行标注

并创建以下文件 名字可自行修改  这里我命名为 Mydata

images:用于存储图片,里面包含两个子文件夹 trian 和 val

labels:  用于存储标注后产生的标签 (txt格式)同样包含两个子文件夹 trian 和 val  标签与image存储图片需要一 一对应

在机器学习和深度学习中,通常将数据集分为训练集(train)和验证集(val)。以下是关于这两者的简要介绍:

  1. 训练集(Train Set)

    • 用途:主要用于模型训练。

    • 数据量:通常占据整个数据集的大部分,有时甚至达到80-90%。

    • 目的:通过使用训练集,模型可以学习从输入特征到输出目标的映射。

    • 操作:在训练过程中,模型会多次迭代地查看训练数据,并调整其内部参数以最小化某个损失函数。

  2. 验证集(Validation Set)

    • 用途:主要用于模型验证和调整。

    • 数据量:通常比训练集小,占整个数据集的10-20%。

    • 目的:验证集用于评估模型在未见过的数据上的性能,防止过拟合,并帮助调整超参数。

    • 操作:在每个训练周期结束时,模型会使用验证集进行评估,以了解其性能如何。如果模型在验证集上的性能持续下降,这可能意味着它正在过拟合,这时可能需要采取措施,例如调整超参数或早停训练。

模型训练

当数据标注完成后 就可开始模型训练了

 下载解压后打开安装/配置所需要的的环境

下载所需要的模型文件(需要基于这个模型去训练自己的数据集)

这里我们采用的是 yolov5s.pt 的模型文件 如果下载不了可到网盘进行下载

https://pan.baidu.com/s/1BrkiKbjEj0XiK1QMC331mg    提取码:6npe

修改train 程序文件 进行修改 自己的模型训练

根据上面图片进行修改项目文件 names 标签名 nc 标签数量

训练时出现下面错误  在代码前面添加     os.environ['GIT_PYTHON_REFRESH'] = 'quiet'

 训练完成后 会在 runs/train/ 下生成 weights 里面有一个 best.pt 模型文件  将该文件替换 detect.py 里的权重文件即可开始推理

推理结果

修改代码识别红灯、绿灯、黄灯

数学公式:

代码如下 可适当修改判断条件的 数值 以便提高识别的准确性

# ---- 自己添加部分 ----# im0 为当前推理图片或者视频帧 转换为灰度图gray = cv2.cvtColor(im0,cv2.COLOR_BGRA2GRAY)# 将红绿灯分成三等分 用于识别 红灯、绿灯、黄灯 的状态# xyxy 中存储了 推理结果的矩形框坐标 分别为左上 右下# 每一个灯的距离width = int((xyxy[2] - xyxy[0])) // 3# 使用 ROI 获取 红灯、绿灯、黄灯 区域的灰度值red = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]):int(xyxy[0]) + width]yellow = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]) + width:int(xyxy[0]) + width * 2]green = gray[int(xyxy[1]):int(xyxy[3]), int(xyxy[0]) + width * 3:int(xyxy[2])]# 计算区域的灰度值的平均值red_mean = np.mean(red)yellow_mean = np.mean(yellow)green_mean = np.mean(green)# 红灯、绿灯、黄灯 的状态判断if red_mean > 40:cv2.putText(im0, 'red', (50, 50), 1, 5, (0, 0, 255), 3)elif yellow_mean > 40:cv2.putText(im0, 'yellow', (50, 50), 1, 5, (0, 255, 255), 3)elif green_mean > 40:cv2.putText(im0, 'yellow', (50, 50), 1, 5, (0, 128, 0), 3)else:cv2.putText(im0, 'wait', (50, 50), 1, 5, (255, 255, 255), 3)# ---- 自己添加部分 ----

 最终推理结果

小结

基于YOLOV5 v7.0 红绿灯的代码 已基本完成 后续可根据自己的需求进行修改。 第一次编写,了能用些许不足望理解

这篇关于基于Yolov5 的红绿灯识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码,https://github.com/ultralytics/yolov5/tree/v5.0,解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件,pip install -r requirements.txt 如果作者没有提供requirement.txt文件

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下: