数据转换篇---json to xml格式

这篇具有很好参考价值的文章主要介绍了数据转换篇---json to xml格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、json to xml

# -*- coding:UTF-8 -*-
'''
将json文件转为类似voc中的xml格式
'''
import os
import numpy as np
import codecs
from sklearn.model_selection import train_test_split

import json
from glob import glob
import cv2
import shutil


# 1.fixme: 原始labelme标注数据路径json文件(需要修改路径)
labelme_path = "/app/dataset/json/"
# 保存路径xml
saved_path = "/app/dataset/"

isUseTest=True#是否创建test集
# 2.创建要求文件夹
if not os.path.exists(saved_path + "Annotations"):
    os.makedirs(saved_path + "Annotations")
if not os.path.exists(saved_path + "JPEGImages/"):
    os.makedirs(saved_path + "JPEGImages/")
if not os.path.exists(saved_path + "ImageSets/Main/"):
    os.makedirs(saved_path + "ImageSets/Main/")
# 3.获取待处理文件
files = glob(labelme_path + "*.json")
## windows路径
files = [i.replace("\\","/").split("/")[-1].split(".json")[0] for i in files]
print(files)
# 4.读取标注信息并写入 xml
for json_file_ in files:
    json_filename = labelme_path + json_file_ + ".json"
    json_file = json.load(open(json_filename, "r", encoding="utf-8"))
    #原图文件地址:saved_path+'img/'(需要更换)
    height, width, channels = cv2.imread(saved_path + 'img/' + json_file_ + ".jpg").shape #原图地址
    with codecs.open(saved_path + "Annotations/" + json_file_ + ".xml", "w", "utf-8") as xml:

        xml.write('<annotation>\n')
        xml.write('\t<folder>' + 'ECM' + '</folder>\n')
        xml.write('\t<filename>' + json_file_ + ".jpg" + '</filename>\n')
        xml.write('\t<source>\n')
        xml.write('\t\t<database>ECM_Data</database>\n')
        xml.write('\t\t<annotation>ECM</annotation>\n')
        xml.write('\t\t<image>flickr</image>\n')
        xml.write('\t\t<flickrid>NULL</flickrid>\n')
        xml.write('\t</source>\n')
        xml.write('\t<owner>\n')
        xml.write('\t\t<flickrid>NULL</flickrid>\n')
        xml.write('\t\t<name>XT</name>\n')
        xml.write('\t</owner>\n')
        xml.write('\t<size>\n')
        xml.write('\t\t<width>' + str(width) + '</width>\n')
        xml.write('\t\t<height>' + str(height) + '</height>\n')
        xml.write('\t\t<depth>' + str(channels) + '</depth>\n')
        xml.write('\t</size>\n')
        xml.write('\t\t<segmented>0</segmented>\n')
        for multi in json_file["shapes"]:
            points = np.array(multi["points"])
            labelName=multi["label"]
            xmin = min(points[:, 0])
            xmax = max(points[:, 0])
            ymin = min(points[:, 1])
            ymax = max(points[:, 1])
            label = multi["label"]
            if xmax <= xmin:
                pass
            elif ymax <= ymin:
                pass
            else:
                xml.write('\t<object>\n')
                xml.write('\t\t<name>' + labelName+ '</name>\n')
                xml.write('\t\t<pose>Unspecified</pose>\n')
                xml.write('\t\t<truncated>1</truncated>\n')
                xml.write('\t\t<difficult>0</difficult>\n')
                xml.write('\t\t<bndbox>\n')
                xml.write('\t\t\t<xmin>' + str(int(xmin)) + '</xmin>\n')
                xml.write('\t\t\t<ymin>' + str(int(ymin)) + '</ymin>\n')
                xml.write('\t\t\t<xmax>' + str(int(xmax)) + '</xmax>\n')
                xml.write('\t\t\t<ymax>' + str(int(ymax)) + '</ymax>\n')
                xml.write('\t\t</bndbox>\n')
                xml.write('\t</object>\n')
                print(json_filename, xmin, ymin, xmax, ymax, label)
        xml.write('</annotation>')
# 5.复制图片到 VOC2007/JPEGImages/下

# fixme:自己的图片路径(需要修改路径)
image_files = glob("/app/dataset/img/" + "*.jpg")
print("copy image files to VOC007/JPEGImages/")
for image in image_files:
    shutil.copy(image, saved_path + "JPEGImages/")

json转xml,json,xml,python

2、分割数据集

import random
import os


XML_FILE_PATH = "/app/dataset/Annotations/"
SAVE_BASE_PATH = "/app/dataset/ImageSets/Main"

train_percent = 0.9   # 0.9
trainval_percent = 1

temp_xml = os.listdir(XML_FILE_PATH)
total_xml = []
for xml in temp_xml:
    if xml.endswith(".xml"):
        total_xml.append(xml)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

print("train and val size", tv)
print("traub size", tr)
ftrainval = open(os.path.join(SAVE_BASE_PATH, 'trainval.txt'), 'w')
ftest = open(os.path.join(SAVE_BASE_PATH, 'test.txt'), 'w')
ftrain = open(os.path.join(SAVE_BASE_PATH, 'train.txt'), 'w')
fval = open(os.path.join(SAVE_BASE_PATH, 'val.txt'), 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

json转xml,json,xml,python

3、提取数据

import xml.etree.ElementTree as ET
from os import getcwd
import os


DATA_TXT = "../data/data_txt/{}_{}.txt"
IMAGE_IDS = "/app/project/error_dataset{}/ImageSets/Main/{}.txt"
OPEN_XML_PATH = "/app/project/error_dataset{}/Annotations/{}.xml"
IMAGE_WRITER_PATH = "/app/project/error_dataset{}/JPEGImages/{}.jpg"


sets = [('2022', 'train'), ('2022', 'val'), ('2022', 'test')]

wd = getcwd()

classes = ["ElectricBox", "Dustbin_opening"]


def convert_annotation(year, image_id, list_file):
    in_file = open(OPEN_XML_PATH.format(year, image_id))
    tree = ET.parse(in_file)
    root = tree.getroot()
    list_file.write(IMAGE_WRITER_PATH.format(year, image_id))
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))
        list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

    list_file.write('\n')


for year, image_set in sets:
    image_ids = open(IMAGE_IDS.format(year, image_set)).read().strip().split()
    save_data_path = '/'.join(DATA_TXT.split('/')[:-1])
    if not os.path.exists(save_data_path):
        os.makedirs(save_data_path)
    list_file = open(DATA_TXT.format(year, image_set), 'w')
    for image_id in image_ids:
        convert_annotation(year, image_id, list_file)
    list_file.close()

json转xml,json,xml,python文章来源地址https://www.toymoban.com/news/detail-539023.html

参考

# -*- coding:UTF-8 -*-
'''
将json文件转为类似voc中的xml格式
'''
import os
import numpy as np
import codecs
from sklearn.model_selection import train_test_split

import json
from glob import glob
import cv2
import shutil


# 1.fixme: 原始labelme标注数据路径json文件(需要修改路径)
labelme_path = "/app/dataset/json/"
# 保存路径xml
saved_path = "/app/dataset/"

isUseTest=True#是否创建test集
# 2.创建要求文件夹
if not os.path.exists(saved_path + "Annotations"):
    os.makedirs(saved_path + "Annotations")
if not os.path.exists(saved_path + "JPEGImages/"):
    os.makedirs(saved_path + "JPEGImages/")
if not os.path.exists(saved_path + "ImageSets/Main/"):
    os.makedirs(saved_path + "ImageSets/Main/")
# 3.获取待处理文件
files = glob(labelme_path + "*.json")
## windows路径
files = [i.replace("\\","/").split("/")[-1].split(".json")[0] for i in files]
print(files)
# 4.读取标注信息并写入 xml
for json_file_ in files:
    json_filename = labelme_path + json_file_ + ".json"
    json_file = json.load(open(json_filename, "r", encoding="utf-8"))
    #原图文件地址:saved_path+'img/'(需要更换)
    height, width, channels = cv2.imread(saved_path + 'img/' + json_file_ + ".jpg").shape #原图地址
    with codecs.open(saved_path + "Annotations/" + json_file_ + ".xml", "w", "utf-8") as xml:

        xml.write('<annotation>\n')
        xml.write('\t<folder>' + 'ECM' + '</folder>\n')
        xml.write('\t<filename>' + json_file_ + ".jpg" + '</filename>\n')
        xml.write('\t<source>\n')
        xml.write('\t\t<database>ECM_Data</database>\n')
        xml.write('\t\t<annotation>ECM</annotation>\n')
        xml.write('\t\t<image>flickr</image>\n')
        xml.write('\t\t<flickrid>NULL</flickrid>\n')
        xml.write('\t</source>\n')
        xml.write('\t<owner>\n')
        xml.write('\t\t<flickrid>NULL</flickrid>\n')
        xml.write('\t\t<name>XT</name>\n')
        xml.write('\t</owner>\n')
        xml.write('\t<size>\n')
        xml.write('\t\t<width>' + str(width) + '</width>\n')
        xml.write('\t\t<height>' + str(height) + '</height>\n')
        xml.write('\t\t<depth>' + str(channels) + '</depth>\n')
        xml.write('\t</size>\n')
        xml.write('\t\t<segmented>0</segmented>\n')
        for multi in json_file["shapes"]:
            points = np.array(multi["points"])
            labelName=multi["label"]
            xmin = min(points[:, 0])
            xmax = max(points[:, 0])
            ymin = min(points[:, 1])
            ymax = max(points[:, 1])
            label = multi["label"]
            if xmax <= xmin:
                pass
            elif ymax <= ymin:
                pass
            else:
                xml.write('\t<object>\n')
                xml.write('\t\t<name>' + labelName+ '</name>\n')
                xml.write('\t\t<pose>Unspecified</pose>\n')
                xml.write('\t\t<truncated>1</truncated>\n')
                xml.write('\t\t<difficult>0</difficult>\n')
                xml.write('\t\t<bndbox>\n')
                xml.write('\t\t\t<xmin>' + str(int(xmin)) + '</xmin>\n')
                xml.write('\t\t\t<ymin>' + str(int(ymin)) + '</ymin>\n')
                xml.write('\t\t\t<xmax>' + str(int(xmax)) + '</xmax>\n')
                xml.write('\t\t\t<ymax>' + str(int(ymax)) + '</ymax>\n')
                xml.write('\t\t</bndbox>\n')
                xml.write('\t</object>\n')
                print(json_filename, xmin, ymin, xmax, ymax, label)
        xml.write('</annotation>')
# 5.复制图片到 VOC2007/JPEGImages/下

# fixme:自己的图片路径(需要修改路径)
image_files = glob("/app/dataset/img/" + "*.jpg")
print("copy image files to VOC007/JPEGImages/")
for image in image_files:
    shutil.copy(image, saved_path + "JPEGImages/")
# 6.split files for txt
txtsavepath = saved_path + "ImageSets/Main/"
ftrainval = open(txtsavepath + '/trainval.txt', 'w')
ftest = open(txtsavepath + '/test.txt', 'w')
ftrain = open(txtsavepath + '/train.txt', 'w')
fval = open(txtsavepath + '/val.txt', 'w')
# fixme: 需要修改路径
total_files = glob("/app/dataset/Annotations/*.xml")
total_files = [i.replace("\\","/").split("/")[-1].split(".xml")[0] for i in total_files]
trainval_files=[]
test_files=[]
if isUseTest:
    trainval_files, test_files = train_test_split(total_files, test_size=0.2, random_state=42)
else:
    trainval_files=total_files
for file in trainval_files:
    ftrainval.write(file + "\n")
# split
train_files, val_files = train_test_split(trainval_files, test_size=0.15, random_state=55)
# train
for file in train_files:
    ftrain.write(file + "\n")
# val
for file in val_files:
    fval.write(file + "\n")
for file in test_files:
    print(file)
    ftest.write(file + "\n")
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()


到了这里,关于数据转换篇---json to xml格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

    1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构,不同的数据格式适用于不同的场景。常见的数据格式包括JSON、YAML、XML、CSV等。 数据可视化 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com/jsonformat 2. JSON(JavaScript Object Notation) JSON是一种轻量级

    2024年04月08日
    浏览(44)
  • API接口常用数据格式Json,Json的定义和XML的区别

    现在程序员还有谁不知道 JSON 吗?无论对于前端还是后端,JSON 都是一种常见的数据格式。那么 JSON 到底是什么呢? JSON (JavaScript Object Notation) ,是一种轻量级的数据交换格式。它的使用范围很广,并成为 ECMA 标准,可以被使用在多种编程语言中,用于前后端之间的数据传

    2024年02月12日
    浏览(33)
  • YOLO格式数据集(.txt)如何转换为VOC格式数据集(.xml)

    前言: 安装好python环境与编译器 转换: 将标注文件从文本格式( .txt )转换为 XML 格式( .xml )可以通过以下步骤完成: 解析文本标注文件:打开 .txt 文件,逐行读取每个标注,并解析边界框坐标和类别信息。 创建 XML 文件:使用 Python 的内置库 xml.etree.ElementTree 创建一个

    2024年02月12日
    浏览(29)
  • Day23_学点儿JSON_定义、数据格式、和XML比较、插件

    定义:是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点: 易于程序员阅读和编写。 易于计算机解析和生成。 其实是javascript的子集:原生javascript支持JSON JSON是一种与语言无关的数据交换的格式,作用: 1. 使用ajax进行前后台数据交换 2. 移动端与服务端的数据

    2024年04月16日
    浏览(56)
  • Yolov5数据集标签的txt格式与xml相互转换

    在使用yolov5制作数据集时,yolov5使用txt格式的标签,打标签的工具如labelimg使用的是xml格式的标签,需要进行数据集格式的转换: txt格式的数据集标签转为xml格式 xml格式的数据集标签转为txt格式

    2024年02月15日
    浏览(32)
  • 目标检测实例分割数据集转换:从XML和JSON到YOLOv8(txt)

            如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。 YOLOv8(附带各种任务详细说明链接) 源码下载地址: XMLJSON 目标检测、实例分割标签转换

    2024年02月03日
    浏览(32)
  • 【Python】json 格式转换 ① ( json 模块使用 | 列表转 json | json 转列表 | 字典转 json | json 转字典 )

    json 格式 字符串 与 Python 中的 字典 dict 和 列表 list 变量 可以无缝转换 ; 调用 json.dumps 函数 可以将 Python 列表 / 字典 转为 json ; 调用 json.loads 函数 ,可以将 json 转为 python 列表 / 字典 ; 首先 , 导入 Python 内置的 json 模块 ; 然后 , 准备 python 数据 , 将数据放到 list 列表中 , 列表中

    2024年02月15日
    浏览(40)
  • Python框架下的qt设计之JSON格式化转换小程序

    代码展示: 主程序代码: qt界面py代码 效果展示:

    2024年04月16日
    浏览(31)
  • segmentation后 mask图片数据转换成coco对应的json格式

    segmentation后 mask二值图片数据转换成coco对应的json格式 转出来之后的json数据中segmentation部分会有一些问题,它不是一个1 * n维度的数据 而是包含了很多段,需要合并 如图: 合并之前: 合并之后,所有的边缘点在一个list中: 最终转好的格式如下图: 合并代码:

    2024年02月12日
    浏览(26)
  • Python的pandas库来实现将Excel文件转换为JSON格式的操作

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Python案例分享专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Python的pandas库来实现

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包