python之json文件转xml文件案例讲解

json文件格式 这是yolov4模型跑出来的检测结果result.json
python之json文件转xml文件案例讲解
文章图片

下面是截取的一张图的检测结果

{ "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":{"center_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文件要跟图片放一起
代码生成的xml与图片在同一个路径下
import jsonimport timeimport osfrom PIL import Imageimport cv2import numpy as np'''人为构造xml文件的格式'''out0 ='''%(folder)s%(name)s%(path)sNone%(width)d%(height)d30'''out1 = '''%(class)sUnspecified00%(xmin)d%(ymin)d%(xmax)d%(ymax)d'''out2 = ''''''def read_json(json_dir):with open(json_dir,"r") as f:data = https://www.it610.com/article/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 = https://www.it610.com/article/read_json(fdir+"/result.json")k = 0for jpg in lists:print(jpg)if jpg[-4:] == '.jpg':image= cv2.imread(jpg)#路径不能有中文h,w,_ = image.shape #图片大小fxml = jpg.replace('.jpg','.xml')fxml = open(fxml, 'w'); imgfile = jpg.split('/')[-1]source['name'] = imgfile source['path'] = jpgsource['folder'] = os.path.basename(fdir)source['width'] = wsource['height'] = hfxml.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"])*wymin = float(box["center_y"] - 0.5*box["height"])*hxmax = float(xmin + box["width"]*w)ymax = float(ymin + box["height"]*h)label['xmin'] = xminlabel['ymin'] = yminlabel['xmax'] = xmaxlabel['ymax'] = ymaxfxml.write(out1 % label)k = k+1fxml.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文件案例讲解的文章就介绍到这了,更多相关python之json文件转xml内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读