网站开发属于哪个大学专业,盗版网站是如何做的,微信注册,如何在局域网上做网站《记录自己在使用yolov5遇到的一些问题》同时也供大家参考#xff0c;如果对你们有帮助#xff0c;希望大家可以给个点赞、收藏鼓励下#xff0c;非常感谢#xff01;
以自带的一张图片作为示例,yolov5(6.1版本)的初始检测框应该是如下图所示
修改线条粗细、隐藏标签、隐…
《记录自己在使用yolov5遇到的一些问题》同时也供大家参考如果对你们有帮助希望大家可以给个点赞、收藏鼓励下非常感谢
以自带的一张图片作为示例,yolov5(6.1版本)的初始检测框应该是如下图所示
修改线条粗细、隐藏标签、隐藏置信度 首先有一些参数作者已经放在detect.py的parse_opt()里如下代码所示
parser.add_argument(--line-thickness, default3, typeint, helpbounding box thickness (pixels))
parser.add_argument(--hide-labels, defaultFalse, actionstore_true, helphide labels)
parser.add_argument(--hide-conf, defaultFalse, actionstore_true, helphide confidences)
顾名思义“--line-thickness” 是修改矩形框和文本标签线条的粗细的如果你觉得标签小了可以直接调整这里的数值本人之前在这里踩了大坑还去plot.py里修改一些参数后面会说到虽然大了但是会出现失真标签会变得模糊。 --hide-labels(隐藏标签)和--hide-conf隐藏置信度就比较直观了直接上图 想要修改其他信息就要打开utils文件夹里的plots.py文件了。打开文件后搜索ctrlfbox_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, widthself.lw, outlinecolor) # 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), fillcolor)# self.draw.text((box[0], box[1]), label, filltxt_color, fontself.font, anchorls) # for PIL8.0self.draw.text((box[0], box[1] - h if outside else box[1]), label, filltxt_color, fontself.font)else: # cv2p1, p2 (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))cv2.rectangle(self.im, p1, p2, color, thicknessself.lw, lineTypecv2.LINE_AA)if label:tf max(self.lw - 1, 1) # font thicknessw, h cv2.getTextSize(label, 0, fontScaleself.lw / 3, thicknesstf)[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,thicknesstf, lineTypecv2.LINE_AA)
如果想隐藏检测框只需要注释下面这行代码即可如果要修改检测框的大小等参数对应修改就行效果如下图
cv2.rectangle(self.im, p1, p2, color, thicknessself.lw, lineTypecv2.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,thicknesstf, lineTypecv2.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,thicknesstf, lineTypecv2.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的框为紫色1280128框选tie的为灰色169169169。我的思路:在画框的前加一个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), thicknessself.lw, lineTypecv2.LINE_AA)if tie in label:cv2.rectangle(self.im, p1, p2, (169, 169, 169), thicknessself.lw, lineTypecv2.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}) 注以上只是本人对自己学习过程的总结仅供大家参考如果出现错误希望大家可以理解并指正。博主现在也比较忙笑发财了被放养根本不知道忙啥佛系更新大家如果问题解决了可以把方法评论下来或者私信给博主我会跟新博文并添加上你的名字。