coco数据集 json文件转化为xml文件

#translate coco_json to xml
#使用时仅需修改21、22、24行路径文件
import os
import time
import json
import pandas as pd
from tqdm import tqdm
from pycocotools.coco import COCO

def trans_id(category_id):
    names = []
    namesid = []
    for i in range(0, len(cats)):
        names.append(cats[i]['name'])
        namesid.append(cats[i]['id'])
        #print('id:{1}\t {0}'.format(names[i], namesid[i]))
    index = namesid.index(category_id)
    return index


root = '/home/***/datasets/COCO/coco2017/'  # 你下载的 COCO 数据集所在目录
dataType = 'train2017'
anno  = '{}/annotations/instances_{}.json'.format(root, dataType)
xml_dir = '{}/xml/{}_xml'.format(root, dataType)

coco = COCO(anno)  # 读文件
cats = coco.loadCats(coco.getCatIds())  # 这里loadCats就是coco提供的接口,获取类别



# Create anno dir
dttm = time.strftime("%Y%m%d%H%M%S", time.localtime())
if os.path.exists(xml_dir):
    os.rename(xml_dir, xml_dir + dttm)
os.mkdir(xml_dir)


with open(anno, 'r') as load_f:
    f = json.load(load_f)

imgs = f['images']

df_cate = pd.DataFrame(f['categories'])
df_cate_sort = df_cate.sort_values(["id"], ascending=True)
categories = list(df_cate_sort['name'])
print('categories = ',categories)
df_anno = pd.DataFrame(f['annotations'])



for i in tqdm(range(len(imgs))):
    xml_content = []
    file_name = imgs[i]['file_name']
    height = imgs[i]['height']
    img_id = imgs[i]['id']
    width = imgs[i]['width']

    xml_content.append("<annotation>")
    xml_content.append("	<folder>VOC2007</folder>")
    xml_content.append("	<filename>" + file_name + "</filename>")
    xml_content.append("	<size>")
    xml_content.append("		<width>" + str(width) + "</width>")
    xml_content.append("		<height>" + str(height) + "</height>")
    xml_content.append("	</size>")
    xml_content.append("	<segmented>0</segmented>")
    # 通过img_id找到annotations
    annos = df_anno[df_anno["image_id"].isin([img_id])]

    for index, row in annos.iterrows():
        bbox = row["bbox"]
        category_id = row["category_id"]
        cate_name = categories[trans_id(category_id)]
      
        # add new object
        xml_content.append("	<object>")
        xml_content.append("		<name>" + cate_name + "</name>")
        xml_content.append("		<pose>Unspecified</pose>")
        xml_content.append("		<truncated>0</truncated>")
        xml_content.append("		<difficult>0</difficult>")
        xml_content.append("		<bndbox>")
        xml_content.append("			<xmin>" + str(int(bbox[0])) + "</xmin>")
        xml_content.append("			<ymin>" + str(int(bbox[1])) + "</ymin>")
        xml_content.append("			<xmax>" + str(int(bbox[0] + bbox[2])) + "</xmax>")
        xml_content.append("			<ymax>" + str(int(bbox[1] + bbox[3])) + "</ymax>")
        xml_content.append("		</bndbox>")
        xml_content.append("	</object>")
    xml_content.append("</annotation>")

    x = xml_content
    xml_content = [x[i] for i in range(0, len(x)) if x[i] != "\n"]
    ### list存入文件
    xml_path = os.path.join(xml_dir, file_name.replace('.jpg', '.xml'))
    with open(xml_path, 'w+', encoding="utf8") as f:
        f.write('\n'.join(xml_content))
    xml_content[:] = []

本文主要参考博文:梦飞天

  • 17
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
coco数据集是一个用于图像识别和物体检测的常用数据集,它包含了大量带有标注的图像。Coco数据集的标注信息以json格式存储,包含了每张图像中物体的位置、类别等信息。 拆分coco数据集json文件通常有两个常见的需求:按照类别拆分和按照图像拆分。 按照类别拆分json文件可以通过遍历json文件中的每个标注,将同一类别的标注存储到对应的类别文件中。具体步骤如下: 1. 读取coco数据集json文件,解析出每个标注所对应的图像ID和类别ID。 2. 创建一个字典,以类别ID为键,对应的值为一个列表,用于存储该类别的所有标注。 3. 遍历每个标注,将同一类别的标注添加到对应的列表中。 4. 将每个类别的标注列表保存为单独的json文件。 按照图像拆分json文件可以通过遍历coco数据集中的每个图像,将每个图像的标注信息存储到对应的图像文件中。具体步骤如下: 1. 读取coco数据集json文件,获取所有图像的列表。 2. 遍历每个图像,获取该图像对应的标注信息。 3. 将每个图像的标注信息保存为单独的json文件。 无论是按照类别拆分还是按照图像拆分,我们都可以使用Python中的json库来进行json文件的读取和写入操作。 拆分coco数据集json文件可以帮助我们更好地管理和使用数据集的标注信息,方便进行数据预处理、训练模型和评估结果等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值