我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 label        if self.pil or not is_ascii(label):            self.draw.rectangle(box, width=self.lw, outline=color)  # box            if label:                w, h = self.font.getsize(label)  # text width, height                outside = box[1] - h >= 0  # label fits outside box                self.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.0                self.draw.text((box[0], box[1] - h if outside else box[1]), label, fill=txt_color, font=self.font)        else:  # cv2            p1, 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 thickness                w, h = cv2.getTextSize(label, 0, fontScale=self.lw / 3, thickness=tf)[0]  # text width, height                outside = p1[1] - h - 3 >= 0  # label fits outside box                p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3                cv2.rectangle(self.im, p1, p2, color, -1, cv2.LINE_AA)  # filled                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)

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

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:  # cv2 p1, 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}')

 

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

来源地址:https://blog.csdn.net/dal1223/article/details/126727191

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录