【目标检测】TT100K数据集使用,提取标注信息并转换成VOC格式的xml文件或yolo格式的txt文件

文章介绍了如何将TT100K数据集的2021年版本的JSON标注转换为XML和TXT格式。提供了Python代码示例,用于生成符合PASCALVOC标准的XML文件以及针对特定类别的TXT文件。该过程对于后续的图像识别和物体检测模型训练至关重要。

1 TT100K 官网

TT100K官网
TT100K官网详情

1.1 数据集介绍

本人下载的是2021的数据集,训练集 6105张图片, 测试集 3071 张图片,每张图片的分辨率为2048 * 2048,共有232 种标志类别(2016有221种类别)

  • 下载数据集是保证有 100 G 的存储空间

2 下载数据集

可以点击使用教程查看官方教程文档:
点击 Tsinghua-Tencent 100K Annotations 2021 (with more classification) 下载数据集压缩包 .zip 文件 并解压
在这里插入图片描述

3.1 与 3.2 分别是生成 xml 与 txt 格式标注文件的代码, 读者可根据需要跳转对应部分。

3.1 在train、test 同级目录生成同名xml文件

3.1.1 代码

'''
Description: 
version: 
Author: 悠悠青青.
Date: 2023-03-27 09:05:43
LastEditors: Please set LastEditors
LastEditTime: 2023-03-27 09:20:01
'''

import os
import json


'''人为构造xml文件的格式'''
out0 ='''<annotation>
    <filename>%(name)s</filename>
    <source>
        <database>None</database>
    </source>
    <size>
        <width>%(width)d</width>
        <height>%(height)d</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
'''
out1 = '''    <object>
        <name>%(class)s</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>%(xmin)d</xmin>
            <ymin>%(ymin)d</ymin>
            <xmax>%(xmax)d</xmax>
            <ymax>%(ymax)d</ymax>
        </bndbox>
    </object>
'''

out2 = '''</annotation>
'''

def annos2xml(annos, out_dir):
    if not os.path.exists(out_dir):
        os.makedirs(out_dir)

    source = {
   
   }                       # 用于暂存图片名字、尺寸等基本信息
    h,w = 2048, 2048                  # 图片大小
    image_name = annos["path"]		  # eg test/10056.jpg
    out_xml = os.path.join(out_dir, image_name[:-4] + '.xml')
    fxml = open(out_xml, 'w')        # 新建对应 xml 文件
    source['name'] = image_name      # 图片路径

    source['width'] = w              # 图片宽度
    source['height'] = h             # 图片高度

    fxml.write(out0 % source)        # 写入 out0 模板

    label = {
   
   }                       # 暂存当前图片的 box 信息
    for obj in annos['objects']:     # 遍历每个子列表即原 txt 的每一行
        label['class'] = obj['category']           # 写入编号对应类别标签
        
        '''读取框的坐标'''
        label['xmin'] = obj['bbox']['xmin']
        label['ymin'] = obj['bbox']['ymin']
        label['xmax'] = obj['bbox']['xmax']
        label['ymax'] = obj['bbox']['ymax']
        
        fxml.write(out1 % label)                        # 写入 out1 模板
    fxml.write(out2)

def main():
    filedir  = "./annotations_all.json"			# json文件
    ids_file = "./train/ids.txt"				# 指定为 train/test
    ids = open(ids_file).read().splitlines()	# 获取 id 编号
    annos = json.loads(
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值