python之json⽂件转xml⽂件案例讲解
json⽂件格式
这是yolov4模型跑出来的检测结果result.json
下⾯是截取的⼀张图的检测结果
{
"frame_id":1, #图⽚的序号
"filename":"/media/wuzhou/Gap/rgb-piglet/test/00000000.jpg", #图⽚的路径
"objects": [ #该图中所有的⽬标:⽬标类别、⽬标名称、归⼀化的框的坐标(xywh格式)、置信度
{"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.750913, "center_y":0.402691, "width":0.038380, "height":0.193304}, "confidence":0.995435},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.764775, "center_y":0.199255, "width":0.049979, "height":0.130169}, "confidence":0.994495},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.560050, "center_y":0.482614, "width":0.036331, "height":0.166377}, "confidence":0.994460},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.710756, "center_y":0.406446, "width":0.041782, "height":0.191297}, "confidence":0.993540},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.638335, "center_y":0.238725, "width":0.107689, "height":0.092282}, "confidence":0.992926},  {"class_id":0, "name":"pp", "relative_coordinates":{"cent
er_x":0.780232, "center_y":0.448454, "width":0.041550, "height":0.179540}, "confidence":0.990020},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.563412, "center_y":0.350035, "width":0.103184, "height":0.059460}, "confidence":0.979756},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.522591, "center_y":0.195170, "width":0.083014, "height":0.071478}, "confidence":0.970642},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.658721, "center_y":0.154640, "width":0.103852, "height":0.055686}, "confidence":0.967082},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.537660, "center_y":0.256810, "width":0.101619, "height":0.095211}, "confidence":0.918135},  {"class_id":0, "name":"pp", "relative_coordinates":{"center_x":0.528618, "center_y":0.481005, "width":0.033226, "height":0.177723}, "confidence":0.310291} ]
},
完整代码
代码需要指定图⽚的路径,例如 file_dir = "H:/rgb-piglet/five/test"
注意:result.json⽂件要跟图⽚放⼀起python处理xml文件
代码⽣成的xml与图⽚在同⼀个路径下
import json
import time
import os
from PIL import Image
import cv2
import numpy as np
'''⼈为构造xml⽂件的格式'''
out0 ='''<annotation>
<folder>%(folder)s</folder>
<filename>%(name)s</filename>
<path>%(path)s</path>
<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 read_json(json_dir):
with open(json_dir,"r") as f:
data = json.load(f)
print(type(data),len(data),type(data[0]),data[0]['frame_id'])    return data
'''txt转xml函数'''
def translate(fdir,lists):
source = {}
label = {}
data = read_json(fdir+"/result.json")
k = 0
for jpg in lists:
print(jpg)
if jpg[-4:] == '.jpg':
image= cv2.imread(jpg)#路径不能有中⽂
h,w,_ = image.shape #图⽚⼤⼩
fxml = place('.jpg','.xml')
fxml = open(fxml, 'w');
imgfile = jpg.split('/')[-1]
source['name'] = imgfile
source['path'] = jpg
source['folder'] = os.path.basename(fdir)
source['width'] = w
source['height'] = h
fxml.write(out0 % source)
for obj in data[k]["objects"]:
label['class'] = obj["class_id"]
box = obj["relative_coordinates"]
'''把txt上的数字(归⼀化)转成xml上框的坐标'''
xmin = float(box["center_x"] - 0.5*box["width"])*w                ymin = float(box["center_y"] - 0.5*box["height"])*h                xmax = float(xmin + box["width"]*w)
ymax = float(ymin + box["height"]*h)
label['xmin'] = xmin
label['ymin'] = ymin
label['xmax'] = xmax
label['ymax'] = ymax
fxml.write(out1 % label)
k = k+1
fxml.write(out2)
if __name__ == '__main__':
file_dir = "H:/rgb-piglet/five/test"
lists=[]
for i in os.listdir(file_dir):
if i[-3:]=='jpg':
lists.append(file_dir+'/'+i)
#print(lists)
translate(file_dir,lists)
print('---------------Done--------------')
到此这篇关于python之json⽂件转xml⽂件案例讲解的⽂章就介绍到这了,更多相关python之json⽂件转xml内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。