深度学习02-数据集格式转换

背景:

通常搜集完数据图片后,我们会用labelimg进行图片标注,比较高版本的labelimg支持的标注格式有三种,PascalVOC、YOLO、CreateML,标注的时候可以根据自己的算法模型数据集需求选择相应的格式,当然,也可以三种方式同时标注,不过会耗时间一些。有时候我们仅仅标注了一种格式转,而实际算法建模的时候可能需要对相应的格式进行转换。

xml转json:

默认选用PascalVOC方式的话,标注的数据集格式为XML,实例如下(2.xml):

复制代码
<annotation>
	<folder>Desktop</folder>
	<filename>ng2.png</filename>
	<path>C:\Users\Xiao\Desktop\ng2.png</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>1892</width>
		<height>851</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>60</xmin>
			<ymin>381</ymin>
			<xmax>354</xmax>
			<ymax>583</ymax>
		</bndbox>
	</object>
</annotation>

将该文档转换为json格式并保存的代码如下:

复制代码
import xml.etree.ElementTree as ET
import json

def xml_to_json(xml_file, json_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()

    data = []
    for obj in root.findall('object'):
        obj_data = {}
        obj_data['name'] = obj.find('name').text
        obj_data['bbox'] = {
            'xmin': int(obj.find('bndbox/xmin').text),
            'ymin': int(obj.find('bndbox/ymin').text),
            'xmax': int(obj.find('bndbox/xmax').text),
            'ymax': int(obj.find('bndbox/ymax').text)
        }
        data.append(obj_data)

    json_data = {
        'filename': root.find('filename').text,
        'size': {
            'width': int(root.find('size/width').text),
            'height': int(root.find('size/height').text),
            'depth': int(root.find('size/depth').text)
        },
        'objects': data
    }

    with open(json_file, 'w') as f:
        json.dump(json_data, f, indent=4)

# Example usage
xml_file = r'C:\Users\Xiao\Desktop\tools\2.xml'
json_file = r'C:\Users\Xiao\Desktop\tools\2.json'
xml_to_json(xml_file, json_file)
print('数据转换完成!')

实际使用的时候需要适当修改一下文档路径才可以。

转换完之后的json内容如下(2.json):

复制代码
{
    "filename": "ng2.png",
    "size": {
        "width": 1892,
        "height": 851,
        "depth": 3
    },
    "objects": [
        {
            "name": "1",
            "bbox": {
                "xmin": 60,
                "ymin": 381,
                "xmax": 354,
                "ymax": 583
            }
        }
    ]
}
相关推荐
文心快码 Baidu Comate20 分钟前
双十一将至,用Rules玩转电商场景提效
人工智能·ai编程·文心快码·智能编程助手·comate ai ide
瞻邈27 分钟前
LION运行笔记
人工智能·深度学习
CoovallyAIHub43 分钟前
外科医生离手术世界模型还有多远?首次提出SurgVeo基准,揭示AI生成手术视频的惊人差距
深度学习·算法·计算机视觉
Serverless 社区1 小时前
助力企业构建 AI 原生应用,函数计算FunctionAI 重塑模型服务与 Agent 全栈生态
大数据·人工智能
大千AI助手1 小时前
参考先验(Reference Priors)详解:理论与Python实践
人工智能·机器学习·贝叶斯·大千ai助手·参考先验·贝叶斯推断·先验
Baihai_IDP1 小时前
面向 LLM 的 GPU 系统工程方法论
人工智能·面试·gpu
北京耐用通信1 小时前
冶金车间“迷雾”重重?耐达讯自动化Profibus转光纤为HMI点亮“透视眼”!
人工智能·物联网·网络协议·网络安全·自动化
xqlily1 小时前
Prover9/Mace4 的形式化语言简介
人工智能·算法
IT_陈寒1 小时前
Redis 高并发实战:我从 5000QPS 优化到 5W+ 的7个核心策略
前端·人工智能·后端
北京耐用通信1 小时前
耐达讯自动化Profibus光纤模块:智能仪表的“生命线”,极端环境通信无忧!
人工智能·物联网·网络协议·自动化·信息与通信