yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本

news2025/1/17 22:04:05

这段代码是一个使用YOLO模型进行目标检测的Python脚本。下面我将逐步解释脚本的主要部分,并提供一些关于超参数的使用方法。
在这里插入图片描述

1. 脚本结构

  • 导入相关库
  • 设置配置参数
  • 加载YOLO模型
  • 运行目标检测
  • 处理检测结果
  • 显示或保存结果

2. 超参数说明

  • --weights: 指定YOLO模型的权重文件路径。
  • --source: 指定输入数据源,可以是图像文件、视频文件、摄像头设备或包含文件路径的文本文件。
  • --img-size: 指定图像的输入尺寸,用于调整模型的输入大小。
  • --conf-thres: 目标置信度阈值,低于该阈值的目标将被过滤掉。
  • --iou-thres: 非极大值抑制(NMS)的IOU(交并比)阈值,用于合并重叠的边界框。
  • --device: 指定计算设备,可以是GPU编号或’cpu’。
  • --view-img: 是否显示检测结果图像。
  • --save-txt: 是否保存目标框信息到文本文件。
  • --save-conf: 是否保存目标置信度到文本文件(在--save-txt启用时有效)。
  • --nosave: 是否禁止保存检测结果的图像或视频。
  • --classes: 指定要检测的目标类别,可以是一个或多个类别的索引。
  • --agnostic-nms: 是否使用类别无关的NMS。
  • --augment: 是否使用数据增强进行推理。
  • --update: 是否更新所有模型。
  • --project: 结果保存的项目路径。
  • --name: 结果保存的名称。
  • --exist-ok: 是否允许覆盖现有的项目/名称。

3. 代码解释

  • detect()函数:主要负责加载模型、运行目标检测、处理检测结果以及保存结果等操作。
  • 通过LoadStreamsLoadImages选择数据加载方式,分别用于摄像头流和图像/视频加载。
  • detect_image()函数调用模型进行目标检测,然后应用NMS(非极大值抑制)和可选的分类器。
  • 处理检测结果,包括绘制检测框、标签和单目测距。
  • 结果可以选择显示在窗口中或保存为图像或视频。

4. 超参数的使用

python detect.py --weights weights/v5lite-s.pt --source data/images/ --img-size 640 --conf-thres 0.45 --iou-thres 0.5 --view-img

这是一个使用示例,其中--weights指定了模型权重文件的路径,--source指定了输入图像的路径,--img-size设置了输入图像的尺寸,--conf-thres--iou-thres分别设置了目标置信度和NMS的IOU阈值。--view-img用于显示检测结果图像。
在这里插入图片描述

在这段代码中,目标框的颜色和单目测距取点的逻辑主要集中在draw_boxes()函数和plot_one_box()函数中。这两个函数用于在图像上绘制检测到的目标框,并根据条件确定框的颜色以及添加单目测距的信息。

draw_boxes()函数:

def draw_boxes(detections, image, colors):
    for detection in detections:
        x, y, w, h = detection[2][0], detection[2][1], detection[2][2], detection[2][3]
        label = detection[0]
        color = colors[label]
        cv2.rectangle(image, (int(x - w/2), int(y - h/2)), (int(x + w/2), int(y + h/2)), color, 2)
        cv2.putText(image, label, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

在这个函数中,detections是目标检测的结果,其中包含了每个目标的坐标、大小、置信度等信息。colors是一个列表,包含了不同类别的目标框颜色。函数通过遍历detections,为每个目标框绘制矩形和标签,并使用colors中的颜色。

plot_one_box()函数:

def plot_one_box(xyxy, im0, label=None, color=None, line_thickness=None):
    tl = line_thickness or round(0.002 * max(im0.shape[0:2])) + 1  # line/font thickness
    color = color or [random.randint(0, 255) for _ in range(3)]
    c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))
    cv2.rectangle(im0, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)
    if label:
        tf = max(tl - 1, 1)  # font thickness
        t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
        c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3
        cv2.rectangle(im0, c1, c2, color, -1, cv2.LINE_AA)  # filled
        cv2.putText(im0, label, (c1[0], c1[1] - 2), cv2.FONT_HERSHEY_SIMPLEX, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)

这个函数用于在图像上绘制一个目标框,它接受目标框的坐标(xyxy)、原始图像(im0)、标签(label)、颜色(color)和线条厚度(line_thickness)作为输入。它会在图像上绘制一个矩形框,填充矩形内的标签,并根据条件设置矩形的颜色。

在这里,color参数可以手动设置,也可以根据目标的测距结果(distance)来动态设置,以区分不同的距离范围,从而实现目标框颜色的动态变化。
YOLO(You Only Look Once)是一种实时目标检测算法,detect.py文件是YOLO的一个脚本,用于在图像或视频上运行已经训练好的YOLO模型并检测目标。

以下是对detect.py主要部分的简要解释,包括目标框颜色、单目测距取点等方面。

1. 导入必要的库和模块

import cv2
import numpy as np
from darknet import Darknet
from util import *

这部分代码导入了需要的Python库和自定义的模块。darknet模块通常包含YOLO的网络结构,而util模块包含一些工具函数。

2. 加载配置文件和权重文件

def load_network(cfgfile, weightfile):
    net = Darknet(cfgfile)
    net.load_weights(weightfile)
    return net

这个函数用于加载YOLO的配置文件(.cfg)和权重文件(.weights)并返回一个YOLO网络。

3. 运行目标检测

def detect(cfgfile, weightfile, imgfile):
    net = load_network(cfgfile, weightfile)
    image = cv2.imread(imgfile)
    sized = cv2.resize(image, (net.width, net.height))
    detections = detect_image(net, imgfile)
    return detections

这个函数调用load_network加载YOLO网络,然后调用detect_image进行目标检测。detect_image函数通常包含了YOLO的前向传播过程,根据模型输出的预测框和类别信息,返回检测到的目标。

4. 处理检测结果

detections = detect(cfgfile, weightfile, imgfile)
draw_boxes(detections, image, colors)
cv2.imshow('predictions', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里调用了detect函数获取目标检测结果,然后使用draw_boxes函数将检测结果绘制在原图上,给不同的类别框上不同的颜色。

5. 目标框颜色和单目测距取点

具体实现可能会在draw_boxes函数中进行。这个函数通常会遍历检测到的目标框,为每个目标框绘制矩形,并根据目标的类别给框上不同的颜色。单目测距和取点的功能通常不在YOLO的基础代码中,可能需要根据具体需求在其他函数中实现。

以下是一个简化的例子:

def draw_boxes(detections, image, colors):
    for detection in detections:
        x, y, w, h = detection[2][0], detection[2][1], detection[2][2], detection[2][3]
        label = detection[0]
        color = colors[label]
        cv2.rectangle(image, (int(x - w/2), int(y - h/2)), (int(x + w/2), int(y + h/2)), color, 2)
        cv2.putText(image, label, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

在这个例子中,假设detections是一个包含目标信息的列表,colors是一个字典,将不同的类别映射到不同的颜色。draw_boxes函数遍历检测到的目标框,绘制矩形和类别标签,并根据类别选择颜色。这里只是一个简化的例子,实际应用中可能需要更复杂的处理逻辑。
需要注意的是,根据测距结果设置颜色的逻辑可能需要根据具体的测距方法和要求进行修改。在这个例子中,通过比较distance和阈值来判断目标的距离,并选择相应的颜色进行标记。在实际应用中,可能需要更复杂的逻辑来处理不同的距离范围。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

屏蔽机房与普通机房有什么不同?

屏蔽机房与普通机房在设计和功能上存在一些明显的区别。下面是一些区别的主要方面: 电磁屏蔽:屏蔽机房采用了电磁屏蔽材料来减少电磁波的干扰。屏蔽机房能够有效地将外部的电磁干扰隔离开来,确保机房内设备的安全运行。 物理安全:…

halcon里面显示红色三角或者黄色三角+感叹号的算子代表什么含义

有时候,在Halcon里面使用某些算子的时候,左侧有红色或者黄色三角感叹号的提示。 如下图: 可以把鼠标放到红色感叹号上面,发现提示: 有这些标志的算子代表是Halcon中不推荐使用,可以淘汰的算子,…

Bobo Python 学习笔记

安装 Bobo 可以通过通常的方式安装,包括使用setup.py install 命令。当然,您可以使用Easy Install、Buildout或pip。 安装bobo Collecting boboDownloading bobo-2.4.0.tar.gz (17 kB) Collecting WebObDownloading WebOb-1.8.7-py2.py3-none-any.whl…

Stable Diffusion (version x.x) 文生图模型实践指南

前言:本篇博客记录使用Stable Diffusion模型进行推断时借鉴的相关资料和操作流程。 相关博客: 超详细!DALL E 文生图模型实践指南 DALLE 2 文生图模型实践指南 目录 1. 环境搭建和预训练模型准备环境搭建预训练模型下载 2. 代码 1. 环境搭建…

python基础练习题库实验八

文章目录 前言题目1代码 题目2代码 题目3代码 总结 前言 🎈关于python小题库的这模块我已经两年半左右没有更新了,主要是在实习跟考研,目前已经上岸武汉某211计算机,目前重新学习这门课程,也做了一些新的题目 &#x…

部署LCM(Latent Consistency Models)实现快速出图

LCM(Latent Consistency Models)可以通过很少的迭代次数就可以生成高清晰度的图片,目前只可以使用一个模型Dreamshaper_v7,基于SD版本Dreamshaper微调而来的。 LCM模型下载: https://huggingface.co/SimianLuo/LCM_D…

使用flutter的Scaffold脚手架开发一个最简单的带tabbar的app模板

flutter自带的scaffold脚手架可以说还是挺好用的,集成了appBar,还有左侧抽屉,还有底部tabbar,可以说拿来就可以用了啊,所以我今天也体验了一下,做了一个最简单的demo,就当是学习记录了。 效果展…

后端接口错误总结

今天后端错误总结: 1.ConditionalOnExpression(“${spring.kafka.exclusive-group.enable:false}”) 这个标签负责加载Bean,因此这个位置必须打开,如果这个标签不打开就会报错 问题解决:这里的配置在application.yml文件中 kaf…

Spring Framework 简介与起源

Spring是用于企业Java应用程序开发的最流行的应用程序开发框架。全球数百万开发人员使用Spring Framework创建高性能、易于测试和可重用的代码。 Spring Framework是一个开源的Java平台。它最初由Rod Johnson编写,并于2003年6月在Apache 2.0许可下首次发布。 Spri…

laravel日期字段carbon 输出格式转换

/*** The attributes that should be cast.** var array*/ protected $casts [created_at > datetime:Y-m-d, ]; 滑动验证页面https://segmentfault.com/q/1010000043327049

PyQt中QFrame窗口中的组件不显示的原因

文章目录 问题代码(例)原因和解决方法 问题代码(例) from PyQt5.QtWidgets import * from PyQt5.QtGui import QFont, QIcon, QCursor, QPixmap import sysclass FrameToplevel(QFrame):def __init__(self, parentNone):super().…

Newman

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 一)如何安装Newman 1、下载并安装NodeJs 在官网下载NodeJs: Download | Node.js(官网的…

首周聚焦百度智能云千帆大模型平台使用,《大模型应用实践》实训营11月16日开讲!

百度智能云千帆大模型平台官方出品的《大模型应用实践》实训营本周正式上线!这是百度智能云推出的首个系列课程,课程内容满满干货! 11月16日本周四即将开课,首周由百度智能云千帆大模型平台产品经理以及百度智能云千帆资深用户知…

DM8数据守护集群安装部署_手动切换

一.安装前准备 1.1 硬件环境建议 数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。 1.1.1 网络环境 心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影…

Linux C 进程间通信

进程间通信 概述进程间通信方式管道概述管道函数无名管道 pipe有名管道 makefifo删除有名管道 rmove 有名管道实现 双人无序聊天 例子 信号信号概述信号处理过程信号函数传送信号给指定的进程 kill注册信号 signal查询或设置信号处理方式 sigaction设置信号传送闹钟 alarm 有名…

天软特色因子看板 (2023.11 第10期)

该因子看板跟踪天软特色因子A05006(近一月单笔流入流出金额之比(%)该因子为近一个月单笔流入流出金额之比(%)均值因子,用以刻画 市场日内分时成交中流入、流出成交金额的差异性特点,发掘市场主力资金的作用机制。 今日为该因子跟踪第10期,跟踪…

《红蓝攻防对抗实战》十三.内网穿透之利用HTTP协议进行隧道穿透

内网穿透之利用HTTP协议进行隧道穿透 一.前言二.前文推荐三.利用HTTP协议进行隧道穿透1. Reduh进行端口转发2. ReGeorg进行隧道穿透3. Neo-reGeorg加密隧道穿透4. Tunna进行隧道穿透5 .Abptts加密隧道穿透6. Pivotnacci加密隧道穿透 四.本篇总结 一.前言 本文介绍了利用HTTP协…

python 实验7

姓名:轨迹 学号:6666 专业年级:2021级软件工程 班级: 66 实验的准备阶段 (指导教师填写) 课程名称 Python开发与应用 实验名称 文件异常应用 实验目的 (1)掌握基本文件读写的方式; …

基于消息队列+多进程编写的银行模拟系统

银行模拟系统 概述客户端 client.c服务端 serve.c开户 enroll.c存款 save.c转账 transfer.c取款 take.cmakefile文件 概述 该案例大体过程为,服务器先启动,初始化消息队列和信号,用多线程技术启动开户、存钱、转账、取钱模块,并且…

Python基础-解释器安装

一、下载 网址Welcome to Python.orgPython更新到13了,我们安装上一个12版本。 这里我保存到网盘里了,不想从官网下的,可以直接从网盘里下载。 链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间…