目录

前言

1、有中文标签的数据集

2、yolov5代码修改为支持中文标签


前言

很多人在训练yolov5目标检测的时候,标签只能显示英文的。怎么样才可以训练一个可以检测物体并且显示中文标签的模型呢。下面我们来一步一步的做。

1、有中文标签的数据集

首先在收集数据集的时候,打部分公开的数据集,标签都是英文的,格式都是voc格式,文件是xml文件,当然xml文件格式的标签是特别直观的,直观的知道标签中的图片大小,标注位置,还有标注的类别。虽然训练yolov5的时候用的是yolo格式的数据集,但是大家在标注数据集的时候尽量标注为voc格式,这样方便又直观,然后训练YOLOv5模型的时候有代码可以一键转换。代码博客:目标检测---数据集格式转化及训练集和验证集划分。

自己制作中文标签的数据集的话,利用labelimg这个工具标注数据集的时候,将标签改成中文就好了,具体的教程博客:目标检测---利用labelimg制作自己的深度学习目标检测数据集。

如果这里有一份英文标签的voc格式的数据集,可以利用如下的代码将数据集中的英文标签转为中文标签。

# encoding:utf-8
import os
import xml.etree.ElementTree as ETcount = 0
list_xml = []
dict = {"ball": "足球","messi": "梅西",}openPath = "VOCdevkit\VOC2007\Annotations"
savePath = "VOCdevkit\VOC2007\Annotations1"
fileList = os.listdir(openPath)         # 得到进程当前工作目录中的所有文件名称列表
for fileName in fileList:               # 获取文件列表中的文件if fileName.endswith(".xml"):       # 只看xml文件print("filename=:", fileName)tree = ET.parse(os.path.join(openPath, fileName))root = tree.getroot()print("root-tag=:", root.tag)   # ',root-attrib:', root.attrib, ',root-text:', root.text)for child in root: # 第一层解析if child.tag == "object":   # 找到object标签print(child.tag)for sub in child:if sub.tag == "name":print("标签名字:", sub.tag, ";文本内容:", sub.text)if sub.text not in list_xml:list_xml.append(sub.text)if sub.text in list(dict.keys()):sub.text = dict[sub.text]print(sub.text)count = count + 1tree.write(os.path.join(savePath, fileName), encoding='utf-8')print("=" * 20)print(count)
for i in list_xml:print(i)

这个代码也可以将中文标签的voc格式的数据集转化为英文标签的数据集。如下图所示,将中文和英文的位置调换就可以了。

中文标签的voc格式的数据集,可以利用目标检测---数据集格式转化及训练集和验证集划分这篇博客中的代码将voc格式的数据集转化为yolo数据集,并划分为训练集和验证集。

至此中文标签的数据集就准备好了

2、yolov5代码修改为支持中文标签

特别要说明一下,该博客所用的是yolov5的5.0版本。

(1)train.py文件修改,在py文件中的63行,代码修改如下:

with open(opt.data, encoding='UTF-8') as f:

(2)test.py文件文件修改,在py文件中的73行,代码修改如下:

with open(opt.data, encoding='UTF-8') as f:

(3)utils/general.py文件文件修改,在这个代码中导入如下的包:

from PIL import Image, ImageDraw, ImageFont

(4)utils/plots.py文件修改,在py文件中的64行,修改 plot_one_box 函数,if label之后的代码改为:

tf = max(tl - 1, 1)  # font thickness
t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
font_size = t_size[1]
font = ImageFont.truetype('msyh.ttc', font_size)
t_size = font.getsize(label)
c2 = c1[0] + t_size[0], c1[1] - t_size[1]
cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA)  # filled
img_PIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
draw.text((c1[0], c2[1] - 2), label, fill=(255, 255, 255), font=font)
return cv2.cvtColor(np.array(img_PIL), cv2.COLOR_RGB2BGR)

(5)utils/plots.py文件修改,在py文件中的184行,修改plot_images 函数:

mosaic = plot_one_box(box, mosaic, label=label, color=color, line_thickness=tl)

(6)detect.py文件修改,在py文件中的113行,代码修改如下:

im0 = plot_one_box(xyxy, im0, label=label, color=colors(c, True), line_thickness=3)

至此为了支持中文标签的代码就修改完了。

如果后面的模型训练和推理测试工作可以参考博客:目标检测---教你利用yolov5训练自己的目标检测模型。

这里特别要说明一下,就是修改data目录下的yaml文件的时候,那个标签也一定要对应标注的中文类别。

yolov5检测框显示中文标签相关推荐

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

    <记录自己在使用yolov5遇到的一些问题>同时也供大家参考,如果对你们有帮助,希望大家可以给个点赞.收藏鼓励下,非常感谢! 以自带的一张图片作为示例,yolov5(6.1版本)的初始检测 ...

  2. 解决YOLOv5算法中的中文标签显示问题

    在前面的文章中已经详细介绍了在本机上安装YOLOv5的教程,安装YOLOv5可参考前面的文章 YOLOv5训练自己的数据集(超详细) 本人使用的是YOLOv5-5.0版本 一. 训练YOLOv5时ma ...

  3. 目标检测算法——YOLOv5/YOLOv7如何改变bbox检测框的粗细大小

    深度学习Tricks,第一时间送达 目标检测 YOLOv5 常见的边框(bounding box )坐标表示方法 边框是在图像上标记目标的矩形.边框的标注有多种格式.每种格式都使用其特定的边框坐标表示 ...

  4. 【yolo】ubuntu18.04 yolo打开摄像头实时检测框目标 转化pth文件为onnx

    heziyi@heziyi-ZenBook-UX425IA-U4700IA:~/桌面/PyTorch-YOLOv3$ python3 video.py yolov3_ckpt_69.onnx Trac ...

  5. YOLOv3 物体识别显示中文标签

    问题 最近在做yolov3识别物体,想着把coco.name修改为中文,从而实现显示中文标签,结果发现,emmmm,显示出来是????????就是下面这个鬼样子 之前的代码是这样子的: import ...

  6. 点云检测框投影到图像上(mmdetection3d)

    原模型检测时候只有点云的检测框,本文主要是将demo文件中的pcd_demo.py中的代码,将点云检测出的3d框投影到图像上面显示. # Copyright (c) OpenMMLab. All ri ...

  7. YOLOV5检测代码detect.py注释与解析

    YOLOv5代码注释版更新啦,注释的是最近的2021.07.14的版本,且注释更全 github: https://github.com/Laughing-q/yolov5_annotations Y ...

  8. yolov5目标框预测

    yolov5目标检测模型中,对模型结构的描述较多,也容易理解.但对如何获得目标预测方面描述较少,或总感觉云山雾罩搞不清楚.最近查阅一些资料,并加上运行yolov5程序的感受,总结一下对目标特征参数的预 ...

  9. 基于PyQt5的YOLOv5检测界面——YOLOv5检测目标后声音告警的美化

    之前的博文写了如何使YOLOv5在检测到目标后进行声音告警提示,本次的博文是对其进行界面上的优化,让其更加方便易用,距离产品更近了一步. 主要参考了这位大佬的代码,并根据自己的需要,进行了添入语音告警 ...

最新文章

  1. HTML:基本的标签
  2. 3.2.3节:特权级
  3. SharePoint 2010 各个常用级别对象的获取
  4. 29/07/2010 sunrise
  5. Linux中Oracle的sqlplus下退格和Del键无效的问题解决
  6. 2021年上半年系统集成项目管理工程师综合知识真题及答案解析
  7. 【leetcode学习笔记】leecode是什么?
  8. 图像分割(多分类)将mask变为one hot label
  9. 超市商品管理系统php,超市商品管理系统(含附源代码)超市商品管理系统(含附源代码).doc...
  10. 魅族手机在开发调试中无法打印log的解决方法
  11. 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现二
  12. html5小游戏猴子爬树源码,猴子爬树小班教案
  13. java appdata_纯手写!!转移系统用户资料和更改AppData路径的方法 不接受反驳!...
  14. 查找网站真实IP的方法大全
  15. 软件工程学习(十)常见的软件架构
  16. 华为:中国平安城市发展白皮书
  17. 浅析Content Negotation在Nancy的实现和使用
  18. python的re_research是什么意思_research在线翻译_英语_读音_用法_例句_海词词典
  19. 【支付宝】Android-支付宝支付时显示:系统繁忙,请稍后再试。错误码:ALI40247
  20. 豹子概率大还是顺金概率大?99%的人都搞错的问题

热门文章

  1. UE5的Lumen和传统光线追踪对比,哪个更好?
  2. 【实测】基于开源硬加速平台RIFFA架构的PCIe DMA性能测试及分析
  3. vue element 表格头换行
  4. java毕业生设计高校企业实训系统计算机源码+系统+mysql+调试部署+lw
  5. Python一行命令实现5G大文件快速传输(Windows Linux Mac)
  6. 取出两个有序数组里面的公共元素 java_C语言计算两个有序数组中的公共元素
  7. 加密域可逆信息隐藏 ,针对异或加密的唯密文攻击
  8. UE4 C++ 一个Character踩地雷
  9. Proteus原理仿真之霓虹灯实验
  10. python入门实战小例子(一朵花的绽放)(花が咲く)