当前位置:网站首页>将 .json 格式 转换成 .xml格式
将 .json 格式 转换成 .xml格式
2022-08-09 13:10:00 【花椒酱不吃花椒喵】
原文链接:https://blog.csdn.net/weixin_42419002/article/details/100161294
1. 转换前的 .json 格式文件的内容:
json 是一个字典,具体内容看下面这个链接:
https://blog.csdn.net/weixin_42419002/article/details/100159408
2. 转换后的 .xml 格式文件的内容:
<annotation>
<folder>VOC2012</folder> # 这些值训练的时候不会被用到
<filename>2007_000661.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
</source>
<size>
<width>500</width> # 这个值需要改变
<height>375</height> # 这个值需要改变
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>sofa</name> # 这个值需要改变
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>119</xmin> # 这个值需要改变
<ymin>177</ymin> # 这个值需要改变
<xmax>331</xmax> # 这个值需要改变
<ymax>278</ymax> # 这个值需要改变
</bndbox>
</object>
<object>
<name>chair</name> # 这个值需要改变
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>133</xmin> # 这个值需要改变
<ymin>159</ymin> # 这个值需要改变
<xmax>179</xmax> # 这个值需要改变
<ymax>197</ymax> # 这个值需要改变
</bndbox>
</object>
</annotation>
3. 将 .json 转换成 .xml 格式代码:
import os
import json
from lxml import etree as ET
from xml.dom import minidom
def edit_xml(objects, id, dir):
save_xml_path = os.path.join(dir, "%s.xml" % id) # xml
root = ET.Element("annotation")
# root.set("version", "1.0")
folder = ET.SubElement(root, "folder")
folder.text = "none"
filename = ET.SubElement(root, "filename")
filename.text = "none"
source = ET.SubElement(root, "source")
source.text = "201908"
owner = ET.SubElement(root, "owner")
owner.text = "YZN"
size = ET.SubElement(root, "size")
width = ET.SubElement(size, "width")
width.text = str(2048)
height = ET.SubElement(size, "height")
height.text = str(2048)
depth = ET.SubElement(size, "depth")
depth.text = "3"
segmented = ET.SubElement(root, "segmented")
segmented.text = "0"
for obj in objects: #
object = ET.SubElement(root, "object")
name = ET.SubElement(object, "name") # number
name.text = obj["category"]
# meaning = ET.SubElement(object, "meaning") # name
# meaning.text = inf_value[0]
pose = ET.SubElement(object, "pose")
pose.text = "Unspecified"
truncated = ET.SubElement(object, "truncated")
truncated.text = "0"
difficult = ET.SubElement(object, "difficult")
difficult.text = "0"
bndbox = ET.SubElement(object, "bndbox")
xmin = ET.SubElement(bndbox, "xmin")
xmin.text = str(int(obj["bbox"]["xmin"]))
ymin = ET.SubElement(bndbox, "ymin")
ymin.text = str(int(obj["bbox"]["ymin"]))
xmax = ET.SubElement(bndbox, "xmax")
xmax.text = str(int(obj["bbox"]["xmax"]))
ymax = ET.SubElement(bndbox, "ymax")
ymax.text = str(int(obj["bbox"]["ymax"]))
tree = ET.ElementTree(root)
tree.write(save_xml_path, encoding="UTF-8", xml_declaration=True)
root = ET.parse(save_xml_path)
file_lines = minidom.parseString(ET.tostring(root, encoding="Utf-8")).toprettyxml(
indent="\t")
file_line = open(save_xml_path, "w", encoding="utf-8")
file_line.write(file_lines)
file_line.close()
def getDirId(dir): # get the id list of id.png
names = os.listdir(dir)
ids = []
for name in names:
# path = os.path.join(dir, name)
# img = cv2.imread(path)
# w, h, c = img.shape
# if name.endswith(".jpg") or name.endswith(".png"):
# ids["%s" % name.split(".")[0]] = [w, h, c]
ids.append(name.split(".")[0])
return ids
filedir = "annotations.json"
annos = json.loads(open(filedir).read())
trainIds = getDirId("Tinghua100K/images/train/")
testIds = getDirId("Tinghua100K/images/test/")
ids = annos["imgs"].keys() # all img ids in .json
for id in ids:
# json 中的ID图片有待检测目标,且该id图片在 train文件夹中
if len(annos["imgs"][id]["objects"]) > 0 and (id in trainIds) and :
objects = annos["imgs"][id]["objects"]
edit_xml(objects, id, dir = "xmlLabel/train")
elif len(annos["imgs"][id]["objects"]) > 0 and (id in testIds):
objects = annos["imgs"][id]["objects"]
edit_xml(objects, id, dir = "xmlLabel/test")
边栏推荐
猜你喜欢

RobotFramework 之 库与关键字

pytest 之 重运行机制与测试报告

技嘉显卡 RGBFusion 不能调光解决方法

GIN file upload and return

gin's middleware and routing grouping

Ledong Fire Rescue Brigade was invited to carry out fire safety training for cadres

IDEA Gradle 常遇问题(一)

微信实现扫码支付(native)

面试攻略系列(四)-- 你不知道的大厂面试

Map mixed density function and quantile added line
随机推荐
FFmpeg相机花屏花图问题解决方法
Record the system calls and C library functions used in this project-2
puzzle(016.5)逻辑电路
NC193 二叉树的前序遍历
剑指 Offer 56 - II. 数组中数字出现的次数 II(位运算)
RTP打包发送H.264
IDEA Gradle 常遇问题(一)
Q_06_02 类型模型
Explanation of RTSP protocol
Q_04_07 进一步探索
X264性能优化
缓存和数据库一致性问题
周末看点回顾|我国IPv6网络全面建成;2022昇腾AI开发者创享日·南京站成功举办…
企业公众号开通微信支付
LeetCode 37.解数独
vim常用命令
vivo手机上的系统级消息推送平台的架构设计实践
ArcEngine(八) 选择要素并高亮显示
group by的工作原理和优化思路
JS本地存储 sessionStorage和localStorage