将json数据集格式文件转为VOC xml文件。

把json数据集的格式转为voc的。
直接上代码。

import os
import json

headstr = """\
<annotation>
    <folder>%s</folder>
    <filename>%s</filename>
    <path>%s</path>
    <source>
        <database>desk</database>
    </source>
    <size>
        <width>%d</width>
        <height>%d</height>
        <depth>%d</depth>
    </size>
    <segmented>0</segmented>
"""
objstr = """\
    <object>
        <name>%s</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>%d</xmin>
            <ymin>%d</ymin>
            <xmax>%d</xmax>
            <ymax>%d</ymax>
        </bndbox>
    </object>
"""

tailstr = '''\
</annotation>
'''


def write_xml(anno_path, head, objs, tail):
    f = open(anno_path, "w")
    if not os.path.exists(anno_path):
        os.makedirs(anno_path)
    f.write(head)
    for obj in objs:

        f.write(objstr % (obj[0], obj[1], obj[2], obj[3], obj[4]))

    f.write(tail)


def json_to_xml(json_path, xml_path):
    if not os.path.exists(xml_path):
        os.makedirs(xml_path)
    dir = os.listdir(json_path)

    for file in dir:

        file_list = file.split(".")

        with open(os.path.join(json_path, file), encoding="utf-8") as load_f:
   
            json_dict = json.load(load_f)
        print('json_dict:', json_dict)

        studentDesk = json_dict["studentDesk"]
        teacherDesk = json_dict["teacherDesk"]
        images = json_dict["images"]  # images是一个数组[]

        filename = images[0]  # 数组中的元素是对象 {}
        imagefile_list = os.path.split(filename["file_name"])
        jpg_name = imagefile_list[1]

        file, extension = os.path.splitext(jpg_name)

        xml_name = ""
        if extension == ".jpg":
            xml_name = jpg_name.replace(".jpg", ".xml")


            filename["file_name"] = os.path.join(xml_path, xml_name)

        depth = 3

        width = 1920
        height = 1080

        head = headstr % (xml_path, jpg_name, os.path.join(xml_path, jpg_name), width, height, depth)

        dataset = []

        for segmentation in studentDesk:

            coordinate = segmentation["segmentation"]
 
            coordinate = coordinate[0]
            x = []
            y = []

            x = coordinate[::2]
         
            xmin = min(x)
            xmax = max(x)
         
            y = coordinate[1::2]
           
            ymin = min(y)
            ymax = max(y)

            name = "studentDesk"
            

            dataset.append([name, xmin, ymin, xmax, ymax])
          
        tail = tailstr

        write_xml(os.path.join(xml_path, xml_name), head, dataset, tail)


if __name__ == '__main__':
    json_path = "E:\\Desk\\Annotation"  # 该目录为存放json文件的路径
    xml_path = "E:\\Desk\\voc"  # 该目录为放xml文件的路径
    json_to_xml(json_path, xml_path)

参考:https://blog.csdn.net/pursuit_zhangyu/article/details/108146062

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值