yolov5修改标签和检测框显示

《记录自己在使用yolov5遇到的一些问题》同时也供大家参考

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

 首先有一些参数作者已经放在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里修改一些参数,后面会说到,虽然大了但是会出现失真,标签会变得模糊。)

yolov5修改标签和检测框显示

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

yolov5修改标签和检测框显示

 想要修改其他信息就要打开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 线型 

yolov5修改标签和检测框显示

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

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

yolov5修改标签和检测框显示

最后应该就是标签文本信息的修改了,可以配合上面两行代码一起修改,单独注释效果如下图: 

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 线型

yolov5修改标签和检测框显示

 不知道为什么,我自己在单独使用cv2.puttext的命令时,会出标签比较模糊的现象,如果有读者知道了也希望可以告知,万分感谢。

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)

yolov5修改标签和检测框显示

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}')

 yolov5修改标签和检测框显示

 

注:以上只是本人对自己学习过程的总结,仅供大家参考,如果出现错误,希望大家可以理解并指正。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年2月11日 下午8:51
下一篇 2023年2月11日 下午8:55

相关推荐