目标检测--yolov5检测框显示中文标签

目录

前言

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 ET
 
count = 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 + 1
        tree.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文件的时候,那个标签也一定要对应标注的中文类别。

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然,我可以教你如何利用YOLOv5进行目标检测YOLOv5是一种快速、准确的目标检测算法,可以用于检测图像或视频中的多个物体。以下是一些步骤,帮助你开始使用YOLOv5。 步骤1:安装依赖 首先,你需要在你的开发环境中安装必要的依赖项。这包括Python、PyTorch和其他一些常用的Python库。你可以使用以下命令安装PyTorch: ``` pip install torch torchvision ``` 步骤2:下载YOLOv5代码 在你的工作目录中,使用以下命令克隆YOLOv5代码库: ``` git clone https://github.com/ultralytics/yolov5.git ``` 步骤3:准备数据集 准备一个适用于目标检测的数据集。确保每个图像都与相应的标签文件(例如YOLO格式)存在。将训练集、验证集和测试集放在合适的文件夹中。 步骤4:训练模型 使用YOLOv5训练模型,你需要运行以下命令: ``` python train.py --img 640 --batch 16 --epochs 100 --data path/to/data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt ``` 其中,`--img`参数指定输入图像的大小,`--batch`参数指定批量大小,`--epochs`参数指定训练的轮数,`--data`参数指定数据集的配置文件,`--cfg`参数指定模型的配置文件,`--weights`参数指定预训练的权重文件。 步骤5:测试模型 训练完成后,你可以使用YOLOv5测试模型。运行以下命令: ``` python detect.py --weights path/to/best.pt --img 640 --conf 0.4 --source path/to/test/images ``` 其中,`--weights`参数指定训练得到的最佳权重文件,`--img`参数指定输入图像的大小,`--conf`参数指定置信度阈值,`--source`参数指定测试图像的路径。 这些是YOLOv5的基本步骤。你可以根据自己的需求进行调整和优化。希望这对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值