【数据集处理工具】将COCO格式数据集的val.json与tett.json文件合并为一个json

合并COCO数据集JSON文件的Python脚本

1、目的

此Python脚本旨在帮助用户合并多个COCO格式的数据集JSON文件,特别适用于将验证集和测试集的标注数据整合到单一文件中。

该脚本假设各个数据集的类别信息(categories字段)完全一致,这在许多场景下是合理的假设,尤其是在验证集和测试集是从同一母体数据集划分而来的情况下。
在这里插入图片描述

2、功能概述
  1. 合并images字段:脚本会将来自不同JSON文件的图像信息列表合并在一起,构建一个统一的图像信息集合。

  2. 合并annotations字段:脚本在合并标注信息时,会确保每个标注的ID(id字段)在最终的合并数据集中是唯一的。这通过追踪已有的最大标注ID并在导入新的标注时递增ID来实现。

  3. 保留categories字段:由于假定所有数据集的类别信息一致,脚本默认从第一个数据集中复制categories字段到合并后的数据集,而不做任何改变。

  4. 保留其他元数据:脚本还会保留infolicenses字段,确保合并后的JSON文件包含原始数据集的元数据信息。

3、使用方法
  1. 定义输入和输出文件路径:在脚本中,你需要定义一个包含所有待合并JSON文件路径的列表json_files,以及指定输出合并后JSON文件的路径output_file

  2. 运行脚本:调用merge_coco_jsons(json_files, output_file)函数,脚本将处理指定的输入文件,合并数据,并将结果保存到指定的输出文件中。

4、注意事项
  • 确保所有待合并的数据集的categories字段完全相同,否则需要在合并前进行相应的调整。
  • 在合并annotations时,脚本自动更新每个新添加的标注的ID,以避免ID冲突。确保在合并后的数据集中,标注ID的唯一性得到保持。
  • 在运行脚本前,备份原始数据集文件,以防意外覆盖或数据丢失。

通过使用此脚本,你可以轻松地将多个COCO数据集合并为一个,为后续的数据分析、模型训练或评估提供便利。

5、 代码部分
import json
#   将COCO格式的验证集和测试集的JSON文件合并成一个文件,
#   主要涉及合并两个JSON文件中的images、annotations和可能的categories字段
def merge_coco_jsons(json_files, output_file):
    # 加载第一个JSON文件作为基础数据
    with open(json_files[0], 'r') as f:
        merged_data = json.load(f)

    # 更新annotation ID的最大值
    max_ann_id = max([a['id'] for a in merged_data['annotations']]) if merged_data['annotations'] else 0

    # 从第二个JSON文件中合并数据
    for json_file in json_files[1:]:
        with open(json_file, 'r') as f:
            data = json.load(f)

        # 合并images
        merged_data['images'].extend(data['images'])

        # 合并annotations,同时更新annotation ID
        if data.get('annotations'):
            for annotation in data['annotations']:
                annotation['id'] = max_ann_id + 1
                max_ann_id = annotation['id']
                merged_data['annotations'].append(annotation)

    # 写入合并后的JSON文件
    with open(output_file, 'w') as f:
        json.dump(merged_data, f)

# 使用函数
json_files = ['path/to/val_annotations.json', 'path/to/test_annotations.json']
output_file = 'path/to/merged_annotations.json'

merge_coco_jsons(json_files, output_file)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 12:30:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 12:30:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 12:30:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 12:30:03       69 阅读

热门阅读

  1. WPF之URI的使用

    2024-07-19 12:30:03       23 阅读
  2. oracle显示列名,列注释

    2024-07-19 12:30:03       18 阅读
  3. vite+vue3项目初始化搭建

    2024-07-19 12:30:03       15 阅读
  4. wsdl接口返回xml数据接收

    2024-07-19 12:30:03       18 阅读
  5. CSAPP看了快半年了

    2024-07-19 12:30:03       18 阅读
  6. STM32中volatile关键字

    2024-07-19 12:30:03       18 阅读
  7. 最长公共子序列和最长公共子串模板(LCS)

    2024-07-19 12:30:03       21 阅读
  8. Nginx:常规配置参考

    2024-07-19 12:30:03       18 阅读
  9. Python面试题:Python的内置函数与自定义函数

    2024-07-19 12:30:03       15 阅读
  10. 微服务之间Feign调用

    2024-07-19 12:30:03       23 阅读
  11. 防火墙(firewall)详细介绍

    2024-07-19 12:30:03       17 阅读
  12. YOLOv7简介

    2024-07-19 12:30:03       23 阅读
  13. Zabbix的安装部署及使用流程

    2024-07-19 12:30:03       22 阅读
  14. 【golang-makefile】最全的go语言makefile文件

    2024-07-19 12:30:03       16 阅读