json标签批量转为xml标签(VOC数据集制作)
github链接,里面有我最近写的一些标签的转换脚本
这是一份将json格式的数据集标签转为xml类型标签的脚本,供大家参考
先说下我的应用场景:天池街景识别提供的json文件,用于制作VOC格式数据集。
json文件打开如下图:
其中包含以下5个参数:
VOC数据集标签格式:
<annotation> <folder>VOC2012</folder> <filename>2007_000392.jpg</filename> //文件名 <source> //图像来源(不重要) <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> </source> <size> //图像尺寸(长宽以及通道数) <width>500</width> <height>332</height> <depth>3</depth> </size> <segmented>1</segmented> //是否用于分割(在图像物体识别中01无所谓) <object> //检测到的物体 <name>horse</name> //物体类别 <pose>Right</pose> //拍摄角度 <truncated>0</truncated> //是否被截断(0表示完整) <difficult>0</difficult> //目标是否难以识别(0表示容易识别) <bndbox> //bounding-box(包含左下角和右上角xy坐标) <xmin>100</xmin> <ymin>96</ymin> <xmax>355</xmax> <ymax>324</ymax> </bndbox> </object> <object> //检测到多个物体 <name>person</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>198</xmin> <ymin>58</ymin> <xmax>286</xmax> <ymax>197</ymax> </bndbox> </object>
</annotation>
按照此格式编写自己的脚本(对应的图像数据集,需要准备json文件,xml存储路径):
按照此脚本自己按需求改!
# -*- coding: utf-8 -*-
"""
Created on Thu April 8 20:30:10 2021
@author: WU-JL
"""import os
import json
import cv2
import codecs
try: import xml.etree.cElementTree as ET
except ImportError: import xml.etree.ElementTree as ET def json_to_xml(image_path,json_path,save_path):if not os.path.exists(save_path):os.mkdir(save_path)data = json.load(open(json_path))for key in data:img = cv2.imread(image_path+key)img_width=img.shape[1]img_height=img.shape[0]img_depth=img.shape[2]label = data[key]['label']left = data[key]['left']top = data[key]['top']height = data[key]['height']width = data[key]['width']with codecs.open(save_path + key[0:-4] + '.xml', 'w', 'utf-8') as xml:xml.write('\n')xml.write('<annotation>')xml.write('\t<folder>' + "Annotation" + '</folder>\n')xml.write('\t<filename>' + key + '</filename>\n')xml.write('\t<path>')xml.write('path not record')xml.write('\t</path>')xml.write('\t<source>\n')xml.write('\t\t<database>' + 'Unknown' + '</database>\n')xml.write('\t</source>')xml.write('\t<size>\n')xml.write('\t\t<width>' + str(img_width) + '</width>\n')xml.write('\t\t<height>' + str(img_height) + '</height>\n')xml.write('\t\t<depth>' + str(img_depth) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')for i in range(len(label)):xmin = str(left[i])ymin = str(top[i])xmax = str(left[i] + width[i])ymax = str(top[i] + height[i])label_obj= str(label[i])xml.write('\t<object>\n')xml.write('\t\t<name>' + label_obj+ '</name>\n')xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>0</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + xmin + '</xmin>\n')xml.write('\t\t\t<ymin>' + ymin + '</ymin>\n')xml.write('\t\t\t<xmax>' + xmax + '</xmax>\n')xml.write('\t\t\t<ymax>' + ymax + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')xml.write('</annotation>')xml.close()print('json->xml Done.')
json_to_xml('./images/','./mchar.json','./xml/')
结果:
json标签批量转为xml标签(VOC数据集制作)相关推荐
- python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例
本文实例讲述了python实现的批量分析xml标签中各个类别个数功能.分享给大家供大家参考,具体如下: 文章目录 需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码: # -*- co ...
- 比赛中学习(2)-voc数据集制作中将.txt文件变为.xml文件
描述 和voc数据集制作有一点不同的是,因为参加的比赛中坐标给了4个,也就是说目标的形状可能是是平行四边形.所以和voc数据集有点不同啊.放出一张.txt文件的形式 最后的结果大致是这样的(和上面的图 ...
- json文件批量转为txt文件
json文件批量转为txt文件 1 批量json标注文件: 2 json所对应的各个图片: 3 每个json文件内容: [{"type": 1,"x": 116 ...
- 图像分割标签制作,json批量转为png标签 ,用于训练
Segnet网络标签为png格式.我们用labelme制作图片分割的标签,得到的为json文件,我们要提取json文件,将json文件转换为png格式的标签文件,并将标签文件提取出来,遇到多类标签,给 ...
- VOC数据集制作 滑窗切分图片 单通道标签调色板
做PASCAL VOC语义分割数据集的时候, 1.标注工具使用labelme,我是在anaconda下新建了一个名字为labelme的虚拟环境,将labelme安装在了这个环境下面,具体的安装一堆教程 ...
- ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试))
前序 1.环境配置 请自行参考其他博客 本机环境 ubuntu16.04 python3 英伟达显卡驱动:nvidia-396 OpenCV3.4.5 CUDNN7.0.5 CUDA9.0 2.ubu ...
- 解决not well-formed (invalid token)BUG,xml标签转到txt标签,txt标签转到xml标签,滑动窗口切割图像并且同步标签
紧接上次,我的最终目的现在是滑动窗口切割图片并且同步标签.需要对xml文件进行读写. python报错xml.etree.ElementTree.ParseError: not well-formed ...
- 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 设置 xml 标签内容 | 设置 xml 标签属性 )
文章目录 一.使用 MarkupBuilder 生成 xml 数据 二.完整代码示例 一.使用 MarkupBuilder 生成 xml 数据 生成 <student><name c ...
- 织梦php开发tags功能开发,DedeCms织梦二次开发批量添加tag标签 批量修改TAG标签功能的方法...
需求背景: 之前发布了不少文章,后来发现之前的这些文章当时发布时都没有添加tag标签,然而现在需要都添加上tag标签,然而这个在默认的织梦后台是没办法批量实现的,只能一篇篇文章去修改. 思考: 织梦原 ...
最新文章
- python怎么打开交互式窗口-使用pycharm进行交互式shell调试
- Android开发心得-ListView的监听事件
- 使用 docker 部署 mdnice
- 《dp补卡——买卖股票问题》
- 语文高考识记现代汉字的字形【转】
- leetcode —— 523. 连续的子数组和
- 用VBScript实现Zip压缩目录中的所有文件
- 在线文本转2-36任意进制工具
- Java菜鸟学习笔记--面向对象篇(十八):对象转型多态
- DOTween 数字变化
- 【转】Delphi配置系统未能初始化
- nginx常用配置模板
- 车载吸尘器方案-无刷马达运用2
- 谷歌Mediapipe运行环境配置
- html5中背景图片的大小怎么调,css中怎么改变背景图片大小?
- CIE1931-XYZ表色系统
- 更高更快更强!“游戏引擎”发展漫谈
- vue2的vue.config文件
- 前端学习JS第八天(P102--P110)
- 机器学习:线性模型通过python创建机器模型最终预测出儿童身高
热门文章
- ajax取消数据获取
- python内存地址替换原理(20秒读懂)
- python十大必备知识_python学习必备知识汇总
- Python邮件操作实例:发个邮件用Python实现远程自动关机
- 算法导论 练习12.2
- 多层GCN的over-smooth问题
- 线性筛法求质数分解、欧拉函数
- STL中algorithm里的查找
- 【WCF】无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分.
- 创建第一个RMI应用