yolov5/v7修改标签和检测框显示【最全】

《记录自己在使用yolov5遇到的一些问题》同时也供大家参考,如果对你们有帮助,希望大家可以给个点赞、收藏鼓励下,非常感谢!

以自带的一张图片作为示例,yolov5(6.1版本)的初始检测框应该是如下图所示

修改线条粗细、隐藏标签、隐藏置信度

 首先有一些参数作者已经放在detect.py的parse_opt()里,如下代码所示:

parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')
parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')
parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')

顾名思义,“--line-thickness” 是修改矩形框和文本标签线条的粗细的,如果你觉得标签小了可以直接调整这里的数值(本人之前在这里踩了大坑,还去plot.py里修改一些参数,后面会说到,虽然大了但是会出现失真,标签会变得模糊。)

 "--hide-labels"(隐藏标签)和"--hide-conf"(隐藏置信度)就比较直观了,直接上图:

 想要修改其他信息就要打开utils文件夹里的plots.py文件了。打开文件后搜索(ctrl+f)box_label()这个函数,大概在82行左右。

def box_label(self, box, label='', color=(128, 128, 128), txt_color=(255, 255, 255)):# Add one xyxy box to image with labelif self.pil or not is_ascii(label):self.draw.rectangle(box, width=self.lw, outline=color)  # boxif label:w, h = self.font.getsize(label)  # text width, heightoutside = box[1] - h >= 0  # label fits outside boxself.draw.rectangle((box[0],box[1] - h if outside else box[1],box[0] + w + 1,box[1] + 1 if outside else box[1] + h + 1), fill=color)# self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls')  # for PIL>8.0self.draw.text((box[0], box[1] - h if outside else box[1]), label, fill=txt_color, font=self.font)else:  # cv2p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)if label:tf = max(self.lw - 1, 1)  # font thicknessw, h = cv2.getTextSize(label, 0, fontScale=self.lw / 3, thickness=tf)[0]  # text width, heightoutside = p1[1] - h - 3 >= 0  # label fits outside boxp2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filledcv2.putText(self.im, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0, self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)

如果想隐藏检测框只需要注释下面这行代码即可,如果要修改检测框的大小等参数,对应修改就行,效果如下图:

cv2.rectangle(self.im, p1, p2, color, thickness=self.lw, lineType=cv2.LINE_AA)
#self.img 图片
#p1  所画检测框的左上角坐标
#p2  所画检测框的右下角坐标
#thick 线的粗细
#linetype 线型 

如果想隐藏标签框只需要注释掉下面这行代码即可,同样如果要修改标签框的大小等参数,对应修改就行效果如下图:

cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filled
#self.img 图片
#p1  所画框的左上角坐标
#p2  所画框的右下角坐标
#color 框的颜色,可以以自己修改(b,g,r)
#-1  框的粗细  如果为负值则代表填充整个框
#cv2.LINE_AA 线型 

修改标签文本信息,可以配合上面两行代码一起修改,单独注释效果如下图: 

cv2.putText(self.im, label, (p1[0], p1[1] - 2 if outside else p1[1] + h + 2), 0,self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)
#self.im 输出在哪一张图片,这里就是检测的图片
#label   输出内容(str格式),这里就是标签
#(p1[0], p1[1] - 2 if outside else p1[1] + h + 2) 左上角坐标位置
#0 官方解释是Font scale factor that is multiplied by the font-specific base size.感觉这里也是改变字体的粗细
#tetcolor 文字颜色
#thickness  用于绘制文本的线条的粗细
#LineTypes 线型

2022/10/25日新增:有同学私信跟我交流如何添加坐标信息,本人的思路是直接用putText(),将打印内容改成你想打印的坐标(我这里打印的是左上角的坐标),稍微调整一下打印在图上的位置坐标。

cv2.putText(self.im, "("+str(p1[0])+","+str(p1[1])+")", (p1[0]+5, p1[1] -50 if outside else p1[1] + h + 2), 2, self.lw / 3, txt_color,thickness=tf, lineType=cv2.LINE_AA)

2022/11/22日新增:有同学私信我跟我交流如何只显示部分标签和置信度,本人的思路是在detect.py中找到标签显示语句:

label = None if hide_labels  else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

原标签显示逻辑为:“标签 = 无 如果“隐藏标签”否则显示标签”,我们只需要再加入我们所需要的判断条件即可,比如不想显示“person”只需修改代码为:

label = None if hide_labels or names[c]=="person" else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

2023/4/3日新增:有同学私信问:如何给不同物体自定义方框颜色,比如想定义框选person的框为紫色(128,0,128),框选tie的为灰色(169,169,169)。我的思路:在画框的前加一个if判断,代码(101行左右)如下:

else:  # cv2p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))if 'person' in label:cv2.rectangle(self.im, p1, p2, (128,0,128), thickness=self.lw, lineType=cv2.LINE_AA)if 'tie' in label:cv2.rectangle(self.im, p1, p2, (169, 169, 169), thickness=self.lw, lineType=cv2.LINE_AA)if label:

如果想显示部分目标框也是同理,比如你只想显示person,你就在画框的代码前加一个if判断是否为”person",就不要加后面“tie”的判断了。

2023/5/16新增:v5之前的版本可能跟上面的差别比较大,其实道理是一样的,你在detect.py里找到打印标签的的那一行,如下图所示,ctrl+鼠标左键plot_one_box,就可以进入这个函数,之后根据自己的需求修改就行。

2023/5/18新增:评论区提问:“检测出来的都是显示到小数点后一位,怎么可以让他显示到后两位呀?”思路:其实就是修改打印的置信度精度(conf),在detect.py里搜索conf,找到下面这行代码:最后的{conf:.2f}代表保留小数点后两位,根据需求修改即可,结果如下图:

 label = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')

 

注:以上只是本人对自己学习过程的总结,仅供大家参考,如果出现错误,希望大家可以理解并指正。博主现在也比较忙(笑发财了,被放养,根本不知道忙啥),佛系更新,大家如果问题解决了,可以把方法评论下来,或者私信给博主,我会跟新博文并添加上你的名字。

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

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

相关文章

EI论文故障识别程序:DBN深度置信/信念网络的故障识别Matlab程序,数据由Excel导入,直接运行!

​适用平台:Matlab2021b版及以上 本程序参考中文EI期刊《基于变分模态分解和改进灰狼算法优化深度置信网络的自动转换开关故障识别》中的深度置信网络(Deep Belief Network,DBN)部分进行故障识别,程序注释清晰&#x…

Python之学生信息管理系统

目录 一、基础界面实现 1、主函数 2、保持循环,获取用户需求 二、函数实现模块功能 1、添加学生信息 2、删除学生信息 3、修改学生信息 4、查找全部学生信息 5、退出系统 三、整合代码 1、 完整代码 2、完整实现过程 实现 打印功能菜单、添加学生信息、删…

想自学软件测试?一般人我还是劝你算了吧。。。

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

<keep-alive>作用及用法

<keep-alive>是Vue.js的内置组件。它用于缓存具有相同组件树的组件。当组件使用<keep-alive>包裹时&#xff0c;组件不会被销毁&#xff0c;而是会缓存到内存中&#xff0c;等到下次再次渲染时&#xff0c;直接使用缓存中的组件实例。 <keep-alive>有以下几…

【Linux】共享内存

文章目录 一、共享内存的原理详谈共享内存的实现过程二、共享内存的接口函数1.shmget2. shmatshmdtshmctl 进程间使用共享内存通信三、共享内存的特性 关于代码 一、共享内存的原理 共享内存是由操作系统维护和管理的一块内存。 共享内存的本质是内核级的缓冲区。 一个进程向…

C语言精华题目锦集1

第一题 test.c文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的是&#xff08;&#xff09;【多选】 #define INT_PTR int* typedef int* intptr; INT_PRT a,b; int_ptr c,d;A:a  B:b  C:c  D:d #define是宏定义&#xff0c;此时在程序中IN…

SQLite3 数据库学习(六):Qt 嵌入式 Web 服务器详解

参考引用 SQLite 权威指南&#xff08;第二版&#xff09;SQLite3 入门 1. Apache 搭建 cgi 环境 1.1 什么是 Apache Apache 是世界使用排名第一的 Web 服务器软件 它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用 1.2 具体搭建流程…

一、用户管理

一、后端数据库初始化 1.1 因为版本问题&#xff0c;始终报错&#xff0c;按照报错信息去查询解决方案&#xff0c;无法解决 灵机一动&#xff1a; 网址&#xff1a; Spring Boot 3.0 升级 实战踩坑记录 - 掘金 (juejin.cn) &#xff11;.&#xff12; 个人配置【运行成功…

c++的三目运算符

C三目运算符增强 C中的三目运算符表达式返回的可以是一个变量&#xff0c;但是C语言中返回的是一个常量。 C语言中&#xff1a; void test05() { int a 10; int b 20; printf("%d\n", a < b ? a : b); //在C语言中三目运算符返回的是表达式的值&am…

Javascript每天一道算法题(十三)——最大子数组和_中等

文章目录 动态规划题三个重要步骤&#xff08;了解思路&#xff09;1、问题2、示例3、解决方法&#xff08;1&#xff09;方法1——动态规划 总结 动态规划题三个重要步骤&#xff08;了解思路&#xff09; &#xff08;1&#xff09;定义数组元素的含义 用一个数组来保存历史数…

2020年06月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下脚本后舞台上的角色将 ? A:先克隆自身,克隆体出现后被删除。 B:先克隆自身,克隆体出现后删除本体。 C:克隆出自身后本体与克隆体同时被删除。 D:克隆出自身后本体与克…

docker常用命令, 镜像版本的导入、导出并加载,打包镜像的命令

文章目录 docker常用命令&#xff1a;打镜像包&#xff1a;镜像版本的导入、导出并加载 docker常用命令&#xff1a; 打镜像包&#xff1a; ​ docker build -t calc:20230630 /home/apps/calc/docker/ 删除某个镜像的版本&#xff0c;allen_mysql的5.7版本 docker rmi all…

Redis深入理解-内核请求处理流程、数据传输协议

Redis 内核级请求处理流程 Redis Server 其实就是 Linux 服务器中的一个进程 主要还是下图的流程 应用先和 server 端建立 TCP 连接建立连接之后&#xff0c;server 端就会有一个与该客户端通信的 socket&#xff0c;客户端的读写请求发送到服务端的 socket那么通过 IO 多路…

分组背包问题学习笔记 AcWing 9. 分组背包问题

原题 有 N&#xfffd; 组物品和一个容量是 V&#xfffd; 的背包。 每组物品有若干个&#xff0c;同一组内的物品最多只能选一个。 每件物品的体积是 vij&#xfffd;&#xfffd;&#xfffd;&#xff0c;价值是 wij&#xfffd;&#xfffd;&#xfffd;&#xff0c;其中 …

PC8233(CC/CV控制)高耐压输入5V/3.4A同步降压电路内建补偿带恒流恒压输出

概述 PC8233&#xff08;替代CX8853&#xff09;是一款同步降压调节器,输出电流高达3.4A,操作范围从8V到32V的宽电源电压。内部补偿要求最低数量现成的标准外部组件。PC8233在CC&#xff08;恒定输出电流&#xff09;模式或CV&#xff08;恒定输出电压&#xff09;模式&#x…

【前端】前端监控⊆埋点

文章目录 前端监控分为三个方面前端监控流程异常监控常见的错误捕获方法主要是 try / catch 、window.onerror 和window.addEventListener 等。Promise 错误Vue 错误React 错误 性能监控用户行为监控常见的埋点方案来源 前端监控分为三个方面 异常监控&#xff08;监控前端页面…

基于element-ui后台模板,日常唠嗑

后面会补充github地址 文章目录 目录 文章目录 案例说明 1.引入库 2.创建布局组件 3.创建布局组件 4.菜单效果展示 5.创建顶部组件 5.创建顶部面包屑组件 6.创建内容区域组件 7.效果总览 7.布丁&#xff08;实现一些小细节&#xff09; 前言一、pandas是什么&#xff1f;二、使…

CentOS7中升级OpenSSL详细教程

文章目录 一. 引言二. 升级前的准备1.备份现有配置2. 检查系统版本3. 安装依赖 三. OpenSSL安装四. 验证 一. 引言 OpenSSL: 是用于保护数据安全的重要工具。它能提供加密&#xff0c;解密等多项功能。 然而&#xff0c;随着技术的发展和新的安全漏洞的出现&#xff0c;使用最…

管理类联考——英语二——备考 100 句涵盖所有词汇

全中 在海里的这个地区&#xff0c;熊猫们喜欢就着苏打碗豆喝茶。而大洋州的民兵则喜欢经过半岛&#xff0c;带着编剧本的公式上餐厅去。附件的电影院里有额外的歌剧和香蕉&#xff0c;这一时代的斑马们被外面的天线所吸引。实验室里的蟹想用它的肋骨去戳四肢象灯炮的小羊。但…

千梦网创:创业,一场游戏一场梦

创业这件事就好比一场养成类游戏&#xff0c;而我们自己就是游戏主角。 这个游戏有一个特殊之处在于&#xff1a;SSS级装备有穿戴等级设定&#xff0c;就算你氪重金买到了一把神器&#xff0c;自身阅历不够也根本无法发挥它的强大威力而只能当个装饰。 这就要求我们真正沉浸在…