主頁(yè) > 知識(shí)庫(kù) > python之json文件轉(zhuǎn)xml文件案例講解

python之json文件轉(zhuǎn)xml文件案例講解

熱門(mén)標(biāo)簽:電梯新時(shí)達(dá)系統(tǒng)外呼顯示e 南昌地圖標(biāo)注 地圖標(biāo)注與注銷(xiāo) 無(wú)錫智能外呼系統(tǒng)好用嗎 百應(yīng)電話(huà)機(jī)器人總部 西青語(yǔ)音電銷(xiāo)機(jī)器人哪家好 旅游廁所地圖標(biāo)注怎么弄 宿州電話(huà)機(jī)器人哪家好 成都呼叫中心外呼系統(tǒng)哪家強(qiáng)

json文件格式

這是yolov4模型跑出來(lái)的檢測(cè)結(jié)果result.json

下面是截取的一張圖的檢測(cè)結(jié)果

{
 "frame_id":1, #圖片的序號(hào)
 "filename":"/media/wuzhou/Gap/rgb-piglet/test/00000000.jpg", #圖片的路徑
 "objects": [ #該圖中所有的目標(biāo):目標(biāo)類(lèi)別、目標(biāo)名稱(chēng)、歸一化的框的坐標(biāo)(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與圖片在同一個(gè)路徑下

import json
import time
import os
from PIL import Image
import cv2
import numpy as np

'''人為構(gòu)造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轉(zhuǎn)xml函數(shù)'''
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 = jpg.replace('.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上的數(shù)字(歸一化)轉(zhuǎn)成xml上框的坐標(biāo)'''
                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!!!--------------')            
                

到此這篇關(guān)于python之json文件轉(zhuǎn)xml文件案例講解的文章就介紹到這了,更多相關(guān)python之json文件轉(zhuǎn)xml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python中rapidjson參數(shù)校驗(yàn)實(shí)現(xiàn)
  • Python常用配置文件ini、json、yaml讀寫(xiě)總結(jié)
  • Python中json.load()和json.loads()有哪些區(qū)別
  • Python中json.dumps()函數(shù)的使用解析
  • python 存儲(chǔ)json數(shù)據(jù)的操作
  • 解決python3 json數(shù)據(jù)包含中文的讀寫(xiě)問(wèn)題
  • python json.dumps中文亂碼問(wèn)題解決
  • Python如何把不同類(lèi)型數(shù)據(jù)的json序列化

標(biāo)簽:濰坊 許昌 七臺(tái)河 西安 贛州 辛集 雅安 渭南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python之json文件轉(zhuǎn)xml文件案例講解》,本文關(guān)鍵詞  python,之,json,文件,轉(zhuǎn),xml,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python之json文件轉(zhuǎn)xml文件案例講解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于python之json文件轉(zhuǎn)xml文件案例講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章