json转xml
原始数据集文件夹中图片格式为bmp,标注文件为json,图片和标注文件放在同一个文件夹下面,将json转为xml格式,图片和标注文件分别存放在一个文件夹下面。
headstr = """\
<annotation><folder>VOC</folder><filename>%s</filename><source><database>My Database</database><annotation>COCO</annotation><image>flickr</image><flickrid>NULL</flickrid></source><owner><flickrid>NULL</flickrid><name>company</name></owner><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(xml_path,head,labels,bboxs,tail):f = open(xml_path,'w')f.write(head)for i in range(len(labels)):bbox = bboxs[i]f.write(objstr % (labels[i],bbox[0],bbox[1],bbox[2],bbox[3]))f.write(tail)def json_to_xml(json_file, xml_file):with open(json_file, 'r') as f:data = json.load(f)labels = []bboxs = []for shape in data['shapes']:label = shape['label']labels.append(label)xmin = int(shape['points'][0][0])ymin = int(shape['points'][0][1])xmax = int(shape['points'][1][0])ymax = int(shape['points'][1][1])bboxs.append([xmin, ymin, xmax, ymax])image_name = data['imagePath']imageWidth = data['imageWidth']imageHeight = data['imageHeight']head = headstr % (image_name,imageWidth, imageHeight, 3)tail = tailstrwrite_xml(xml_file, head, labels, bboxs, tail)import os, shutil
from tqdm import tqdm
ori_path = "E:/projects/20240702181159-1Fs/"
img_path = "E:/projects/datasets/img/"
xml_path = "E:/projects/datasets/ann/"
for file in tqdm(os.listdir(ori_path)):if '.json' in file:json_to_xml(os.path.join(ori_path, file), os.path.join(xml_path, file.replace('json', 'xml')))else:shutil.copy(os.path.join(ori_path, file), os.path.join(img_path, file))