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

这段代码是一个使用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.mfbz.cn/a/145060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业控制(ICS)学习笔记

目标:工业互联网安全的比赛 工控CTF之协议分析1——Modbus_ctf modbus-CSDN博客 常见的工控协议有:Modbus、MMS、IEC60870、MQTT、CoAP、COTP、IEC104、IEC61850、S7comm、OMRON等 不用看了,没太多技术含量,做了一会发现全得看答案…

敏捷开发工具有哪些?这款在线敏捷工具好评如潮!

随着软件开发的日渐复杂,敏捷开发方法已经成为当前软件开发的主流方式之一。敏捷开发是一种快速且灵活的软件开发方法,以快速响应需求变化和提供高质量软件为目标。在敏捷开发过程中,使用合适的敏捷工具能够更好地辅助开发团队进行协作和管理…

接口自动化测试(Python+Requests+Unittest)合集详解教程

(1)接口自动化测试的优缺点 优点: 测试复用性。维护成本相对UI自动化低一些。回归方便。可以运行更多更繁琐的测试。 自动化的一个明显的好处是可以在较少的时间内运行更多的测试。为什么UI自动化维护成本更高? 因为前端页面变…

小程序实现语音识别功能

不废话&#xff0c;直接上代码 <template><view><u-popupround"16" :show"recordShow" :close-on-click-overlay"false":safe-area-inset-bottom"false"close"close"open"open"><view clas…

直播推流与拉流简概

推流&#xff1a;将直播内容推送至服务器的过程 拉流&#xff1a;为服务器已有直播内容&#xff0c;用指定地址进行拉取的过程 在推流中&#xff0c;我们想要进行传输到服务端, 那么肯定要将数据使用传输协议进行封装&#xff0c;变成流数据。常用的流传输协议有哪几种呢? RT…

数字化转型时代,商业智能BI到底是什么?

据国际数据公司&#xff08;IDC&#xff09;预测&#xff0c;2025年时中国产生的数据量预计将达48.6ZB&#xff0c;在全球中的比例为27.8%。商业智能BI这一专为企业提供服务的数据类解决方案&#xff0c;仅2021年上半年在中国商业智能BI市场规模就达到了3.2亿美元&#xff0c;商…

19C进入数据库出现问号

问题情况如图所示&#xff1a; 解决方法&#xff1a; su - oracle echo "NLS_LANGAMERICAN_AMERICA.ZHS16GBK;export NLS_LANG" >> ~/.bash_profilesource ~/.bash_profileofile

解决 vue3 element 表格和图片预览样式有冲突

查看表格中的预览出现样式问题冲突 <el-image:src"${realSrc}"fit"cover":style"width:${realWidth};height:${realHeight};":preview-src-list"realSrcList":append-to-body"true"><template #error><div c…

微服务nacos实战入门

注册中心 在微服务架构中&#xff0c;注册中心是最核心的基础服务之一 主要涉及到三大角色&#xff1a; 服务提供者 ---生产者 服务消费者 服务发现与注册 它们之间的关系大致如下&#xff1a; 1.各个微服务在启动时&#xff0c;将自己的网络地址等信息注册到注册中心&#x…

基础课2——中国智能客服发展历程

智能客服的发展历程可以追溯到20世纪90年代&#xff0c;当时互联网刚刚兴起&#xff0c;企业开始意识到在线客户服务的重要性。最初的智能客服系统主要基于电话呼叫中心软件&#xff0c;客户可以通过电话与机器人进行交互&#xff0c;获取所需的信息和服务。 随着互联网的普及…

日常生活小技巧 -- Visual Studio Code 简单使用

讲一下 Visual Studio Code 简单使用&#xff0c;怕以后长时间不用忘记了。 资源管理器 快捷键 ctilshiftE 搜索 快捷键 ctilshiftF 全部折叠 区分大小写、全字匹配 替换、全部替换 切换搜索详细信息 例如排除.h 和 .bat文件 *.h;*.bat源代码管理 暂存更改、放弃更…

深入解析 Azure 机器学习平台:架构与组成部分

Azure机器学习平台是Microsoft Azure提供的一种云上机器学习服务&#xff0c;为开发者和数据科学家提供了一个全面且易于使用的环境来创建、训练、部署和管理机器学习模型。本文将对Azure机器学习平台的基本架构和组成部分进行深入解析&#xff0c;帮助读者全面了解该平台的工作…

瑞为技术智助登机方案精彩亮相新加坡APEX未来旅客体验展

2023年11月8-9日&#xff0c;瑞为技术智助登机方案精彩亮相新加坡APEX未来旅客体验展&#xff0c;智慧化的卓越效果和技术先进性不仅吸引了海外专业观众的围观、体验&#xff0c;成为热门展区&#xff0c;同时更引发全行业对于智慧化登机的热议。 智慧化机场是全球机场的未来发…

《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)

这个demo用QT实现了对多个图形项的绘制&#xff0c;包括矩形的绘制&#xff0c;直线的绘制和多边形的绘制&#xff0c;是之前一章中绘制矩形的增强版&#xff0c;之前一章节关于矩形的绘制可以参考&#xff1a;《QT从基础到进阶十五》用鼠标绘制矩形&#xff08;QGraphicsView、…

【VS Code插件开发】创建终端(八)

🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋‍♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! ✨优质专栏:VS Code插件开发极速入门 📢 资料领取:前端进阶资料可以找我免费领取 目录 一、createTerminal创建终端二、终端方法1、…

PowerBI 一些基础功能(2)

1、表时间创建&#xff1a; 日期表2 ADDCOLUMNS( CALENDAR(date(2019,1,1),date(2019,12,31)), "年", YEAR ( [Date] ), "季度", ROUNDUP(MONTH([Date])/3,0), "月", MONTH([Date]), "周", weeknum([Date]), "年季度"…

uni-app微信小程序如何开发蓝牙功能

一. 前言。 蓝牙功能在我们日常软件中的使用率还是蛮高的----譬如各类共享单车/电单车。正因此&#xff0c;我们开发中接触蓝牙功能也是日渐增长。对于很多从未开发过蓝牙功能的童鞋来说&#xff0c;当PM小姐姐扔过来一个蓝牙协议要你接入时&#xff0c;简直一头雾水&#xff…

如何修改文件的修改时间?

如何修改文件的修改时间&#xff1f;随着当代社会科技的不断进步&#xff0c;我们对信息和数据的依赖程度与日俱增。在这个信息化时代&#xff0c;文件处理已经成为数字化办公中不可或缺的一部分。文件处理的范围非常广&#xff0c;其中有一个比较冷门的操作技巧&#xff0c;那…

C语言从入门到精通之【char类型】

char类型用于储存字符&#xff08;如&#xff0c;字母或标点符号&#xff09;&#xff0c;但是从技术层面看&#xff0c;char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符&#xff0c;即用特定的整数表示特定的字符。 char类型占1个字…

Debug知识点解析!超实用教程

一、Debug简介 二、IDEA中的Debug步骤 2.1 步过调试按钮(F8) 2.2 步入调试按钮(F7) 2.3 强制步入调试按钮(Alt Shift EZ) 2.4 步出调试按钮(Shift F8) 2.5 回退断点 2.6 运行到光标处&#xff08;F9&#xff09; 2.7 计算表达式按钮(Alt F8) 三、条件断点 在断点处右…
最新文章