json转xml转txt,coco转yolo转voc

json转xml转txt,coco转yolo转voc

介绍

json转xml格式,代码1代码2适用于两种json格式
其他转换:
自动xml转txt,最简单,不报错

txt格式转换xml格式数据集,yolo转voc

自动xml转json,voc转coco格式

json转xml转txt,coco转yolo转voc

代码

代码1

最常见的json格式,coco数据集标准格式,包含images,categories,annotations,
以下是instances_val2017.json的具体内容:

{
    "images": [
        {
            "file_name": "20230707_151435.png",
            "height": 1080,
            "width": 1920,
            "id": 1
        },
        {
            "file_name": "20230707_151559.png",
            "height": 1080,
            "width": 1920,
            "id": 2
        },
        {
            "file_name": "20230710_101945.png",
            "height": 1080,
            "width": 1920,
            "id": 3
        },
        {
            "file_name": "20230710_101949.png",
            "height": 1080,
            "width": 1920,
            "id": 4
        }
    ],
    "categories": [
        {
            "supercategory": "3_2",
            "id": 1,
            "name": "3_2"
        },
        {
            "supercategory": "9_1",
            "id": 2,
            "name": "9_1"
        },
        {
            "supercategory": "2_1",
            "id": 3,
            "name": "2_1"
        },
        {
            "supercategory": "8",
            "id": 4,
            "name": "8"
        },
        {
            "supercategory": "10_1",
            "id": 5,
            "name": "10_1"
        },
        {
            "supercategory": "10_2",
            "id": 6,
            "name": "10_2"
        },
        {
            "supercategory": "9_2",
            "id": 7,
            "name": "9_2"
        },
        {
            "supercategory": "2_2",
            "id": 8,
            "name": "2_2"
        },
        {
            "supercategory": "3_1",
            "id": 9,
            "name": "3_1"
        }
    ],
    "annotations": [
        {
            "image_id": 1,
            "bbox": [
                761,
                409,
                191,
                422
            ],
            "category_id": 7,
            "iscrowd": 0,
            "id": 1,
            "area": 80602
        },
        {
            "image_id": 1,
            "bbox": [
                924,
                395,
                177,
                427
            ],
            "category_id": 7,
            "iscrowd": 0,
            "id": 2,
            "area": 75579
        },
        {
            "image_id": 1,
            "bbox": [
                1094,
                393,
                163,
                430
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 3,
            "area": 70090
        },
        {
            "image_id": 1,
            "bbox": [
                1262,
                399,
                154,
                431
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 4,
            "area": 66374
        },
        {
            "image_id": 2,
            "bbox": [
                818,
                257,
                214,
                458
            ],
            "category_id": 7,
            "iscrowd": 0,
            "id": 5,
            "area": 98012
        },
        {
            "image_id": 2,
            "bbox": [
                998,
                263,
                197,
                470
            ],
            "category_id": 7,
            "iscrowd": 0,
            "id": 6,
            "area": 92590
        },
        {
            "image_id": 2,
            "bbox": [
                1188,
                261,
                173,
                475
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 7,
            "area": 82175
        },
        {
            "image_id": 2,
            "bbox": [
                1364,
                255,
                176,
                477
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 8,
            "area": 83952
        },
        {
            "image_id": 3,
            "bbox": [
                766,
                386,
                200,
                434
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 9,
            "area": 86800
        },
        {
            "image_id": 3,
            "bbox": [
                932,
                390,
                198,
                445
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 10,
            "area": 88110
        },
        {
            "image_id": 3,
            "bbox": [
                1109,
                343,
                189,
                479
            ],
            "category_id": 5,
            "iscrowd": 0,
            "id": 11,
            "area": 90531
        },
        {
            "image_id": 3,
            "bbox": [
                1306,
                347,
                192,
                495
            ],
            "category_id": 6,
            "iscrowd": 0,
            "id": 12,
            "area": 95040
        },
        {
            "image_id": 4,
            "bbox": [
                820,
                299,
                206,
                432
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 13,
            "area": 88992
        },
        {
            "image_id": 4,
            "bbox": [
                986,
                281,
                186,
                446
            ],
            "category_id": 2,
            "iscrowd": 0,
            "id": 14,
            "area": 82956
        },
        {
            "image_id": 4,
            "bbox": [
                1164,
                293,
                189,
                485
            ],
            "category_id": 5,
            "iscrowd": 0,
            "id": 15,
            "area": 91665
        },
        {
            "image_id": 4,
            "bbox": [
                1358,
                269,
                186,
                484
            ],
            "category_id": 6,
            "iscrowd": 0,
            "id": 16,
            "area": 90024
        }
    ]
}

转换代码

import os
import json
import xml.dom.minidom as minidom

CLASSES=['9','8' ,'7']


def convert_json_to_xml(json_file, output_folder):
    with open(json_file, "r") as f:
        json_data = json.load(f)

    # Create XML document
    doc = minidom.Document()

    # Create root element
    root = doc.createElement("annotation")
    doc.appendChild(root)

    # Add object information for each detection

    bboxes = json_data["bboxes"]
    labels = json_data["labels"]
    scores = json_data["scores"]

    for bbox, label, score in zip(bboxes, labels, scores):
        object_element = doc.createElement("object")
        root.appendChild(object_element)

        name = doc.createElement("name")
        name.appendChild(doc.createTextNode(CLASSES[int(label)]))
        object_element.appendChild(name)

        score_element = doc.createElement("score")
        score_element.appendChild(doc.createTextNode(str(score)))
        object_element.appendChild(score_element)

        bndbox = doc.createElement("bndbox")
        object_element.appendChild(bndbox)

        xmin = doc.createElement("xmin")
        xmin.appendChild(doc.createTextNode(str(int(bbox[0]))))
        bndbox.appendChild(xmin)

        ymin = doc.createElement("ymin")
        ymin.appendChild(doc.createTextNode(str(int(bbox[1]))))
        bndbox.appendChild(ymin)

        xmax = doc.createElement("xmax")
        xmax.appendChild(doc.createTextNode(str(int(bbox[2]))))
        bndbox.appendChild(xmax)

        ymax = doc.createElement("ymax")
        ymax.appendChild(doc.createTextNode(str(int(bbox[3]))))
        bndbox.appendChild(ymax)

    # Save XML file with formatting
    json_filename = os.path.basename(json_file)
    xml_filename = os.path.splitext(json_filename)[0] + ".xml"
    xml_path = os.path.join(output_folder, xml_filename)

    with open(xml_path, "w", encoding="utf-8") as f:
        doc.writexml(f, addindent="\t", newl="\n")

    print(f"Converted {json_file} to {xml_path}")


def batch_convert_json_to_xml(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)

    for file_name in os.listdir(input_folder):
        if file_name.endswith(".json"):
            json_file = os.path.join(input_folder, file_name)
            convert_json_to_xml(json_file, output_folder)


# 批量转换JSON文件为VOC XML格式
input_folder = r"C:\Users\GW\Desktop\mmd\outputs\preds"
output_folder = r"C:\Users\GW\Desktop\mmd\outputs\xmls"

batch_convert_json_to_xml(input_folder, output_folder)

代码2

目标检测生成的json文件,格式如下:

{"labels": [
    ["9", [852, 100, 1052, 525], 0.8942],
    ["9", [1009, 74, 1195, 502], 0.932], 
    ["9", [1172, 59, 1347, 509], 0.8437],
    ["9", [1331, 50, 1497, 475], 0.9314]]}

分别对应classes,bbox,score

转换代码

import os
import json
import xml.dom.minidom as minidom


def convert_json_to_xml(json_file, output_folder):
    with open(json_file, "r") as f:
        json_data = json.load(f)

    # Create XML document
    doc = minidom.Document()

    # Create root element
    root = doc.createElement("annotation")
    doc.appendChild(root)

    # Add filename
    filename = os.path.splitext(os.path.basename(json_file))[0] + ".png"
    filename_element = doc.createElement("filename")
    filename_element.appendChild(doc.createTextNode(filename))
    root.appendChild(filename_element)

    # Add object information for each detection
    for output in json_data["labels"]:
        label, bbox, score = output

        object_element = doc.createElement("object")
        root.appendChild(object_element)

        name = doc.createElement("name")
        # label is already a correct class name, no need for int conversion
        name.appendChild(doc.createTextNode(label))
        object_element.appendChild(name)

        score_element = doc.createElement("score")
        score_element.appendChild(doc.createTextNode(str(score)))
        object_element.appendChild(score_element)

        bndbox = doc.createElement("bndbox")
        object_element.appendChild(bndbox)

        xmin = doc.createElement("xmin")
        xmin.appendChild(doc.createTextNode(str(int(bbox[0]))))
        bndbox.appendChild(xmin)

        ymin = doc.createElement("ymin")
        ymin.appendChild(doc.createTextNode(str(int(bbox[1]))))
        bndbox.appendChild(ymin)

        xmax = doc.createElement("xmax")
        xmax.appendChild(doc.createTextNode(str(int(bbox[2]))))
        bndbox.appendChild(xmax)

        ymax = doc.createElement("ymax")
        ymax.appendChild(doc.createTextNode(str(int(bbox[3]))))
        bndbox.appendChild(ymax)

    # Save XML file with formatting
    json_filename = os.path.basename(json_file)
    xml_filename = os.path.splitext(json_filename)[0] + ".xml"
    xml_path = os.path.join(output_folder, xml_filename)

    with open(xml_path, "w", encoding="utf-8") as f:
        doc.writexml(f, addindent="\t", newl="\n")

    print(f"Converted {json_file} to {xml_path}")


def batch_convert_json_to_xml(input_folder, output_folder):
    os.makedirs(output_folder, exist_ok=True)

    for file_name in os.listdir(input_folder):
        if file_name.endswith(".json"):
            json_file = os.path.join(input_folder, file_name)
            convert_json_to_xml(json_file, output_folder)


# 批量转换JSON文件为VOC XML格式
input_folder = r"C:\Users\GW\Desktop\20230725\2-2"
output_folder = r"C:\Users\GW\Desktop\20230725\2-2"

batch_convert_json_to_xml(input_folder, output_folder)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: yolo-txtcoco-json工具是一种将YOLO格式的文本标注文件换为COCO格式的JSON标注文件的工具。YOLO(You Only Look Once)是一种目标检测算法,而COCO(Common Objects in Context)是一个常见的目标检测和图像分割数据集。有时候我们从YOLO标注工具中获得的标注结果是文本文件的形式,而在使用COCO数据集进行训练和评估时,我们需要将标注结果化为COCO格式的JSON文件。 这个工具可以实现这样的换过程,首先读取YOLO格式的文本文件并解析每个物体的位置、类别和边界框信息。然后根据这些信息结构化生成COCO JSON文件,其中包含了每个物体的类别、标签和位置信息。这样换之后,我们就可以直接使用COCO数据集上的目标检测算法进行训练或者评估。 使用yolo-txtcoco-json工具可以大大简化我们在YOLOCOCO之间进行标注格式换的过程,省去了手动编写换代码的复杂性和耗时。此外,将标注结果换为COCO格式也使得我们能够更加方便地使用COCO数据集的相关工具和算法进行目标检测任务的处理。 总之,yolo-txtcoco-json工具是一个方便实用的工具,可以帮助我们轻松地将YOLO格式的文本标注文件换为COCO格式的JSON标注文件,提高了目标检测任务的效率和准确性。 ### 回答2: yolo-txtcoco-json工具是一种用于将YOLO格式的标注文件换为COCO格式的工具。YOLO(You Only Look Once)是一种目标检测算法,其标注文件是以txt格式存储的,而COCO(Common Objects in Context)是一种通用的目标检测数据集格式,其标注文件以json格式存储。 使用yolo-txtcoco-json工具可以方便地将YOLO标注文件换为COCO格式,以便于在COCO格式下进行目标检测任务或者使用COCO预训练模型进行迁移学习。 这个工具的主要功能是将YOLO标注文件中的目标边界框的位置信息、类别信息等提取出来,并按照COCO格式的要求,将这些信息整理为json格式的标注文件。 具体使用这个工具的步骤是:首先,将YOLO标注文件和对应的图片放置在同一个目录下;然后,运行工具提供的命令或脚本,指定输入目录和输出目录;最后,工具会自动遍历输入目录下的所有YOLO标注文件,将其换为相应的COCO格式,并输出到指定的输出目录中。 通过使用yolo-txtcoco-json工具,可以减少手动地从YOLO格式换为COCO格式的工作量,提高工作效率。同时,换后的COCO格式标注文件可以更方便地与其他基于COCO格式的目标检测算法或工具进行兼容和集成,便于进一步的数据处理和模型训练。 ### 回答3: yolo-txtcoco-json工具是一种用于将YOLO格式的标注文件换为COCO格式的标注文件的工具。YOLO格式的标注文件通常是一种纯文本文件,其中包含了每个目标物体的类别、位置和大小等信息。而COCO格式的标注文件是一种结构化的JSON文件,用于存储目标检测任务中的图像标注信息。 这个工具的主要功能是将YOLO格式的标注文件解析,并根据解析结果生成对应的COCO格式的标注文件。在换过程中,它会将YOLO的坐标信息进行换,以适应COCO标注的要求。同时,它还会将目标物体的类别信息换为COCO数据集中所使用的类别编码。换完成后,可以方便地使用生成的COCO格式的标注文件进行目标检测任务的训练和评估。 使用这个工具的好处是可以快速、准确地将YOLO格式的标注文件换为COCO格式的标注文件,从而方便地在COCO数据集上进行目标检测任务。这对于需要使用COCO格式数据集训练模型的研究人员和开发者来说非常有帮助。 总之,yolo-txtcoco-json工具是一种方便的工具,用于将YOLO格式的标注文件换为COCO格式的标注文件,使得目标检测任务的数据处理更加便捷高效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值