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

news2024/9/22 10:00:51

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

        • 1、目的
        • 2、功能概述
        • 3、使用方法
        • 4、注意事项
        • 5、 代码部分

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV中的GrabCut图像分割算法的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 功能描述 GrabCut 算法是一种用于图像分割的技术,由 Carsten Rother、Vladimir Kolmogorov 和 Andrew Blake 在 2004 年 SIGGRAPH 会议的论文《…

Pr 2024下载安装,Adobe Premiere pro2024剪辑软件下载合集获取

Premiere Pro 2023中文版简称Pr,pr2023是一款视频编辑软件。 pr 2023不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理,还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效…

软件架构之基于中间件开发

软件架构之基于中间件开发 第 15 章:基于中间件的开发15.1 中间件技术15.1.1 中间件的概念15.1.2 中间件的分类 15.1.3 中间件产品介绍15.2 应用服务器技术15.2.1 应用服务器的概念15.2.2 主要的应用服务器15.3.1 表示层15.3.2 应用服务层 15.4 .NET15.4.1 .NET 平台…

LeetCode热题100刷题16:74. 搜索二维矩阵、33. 搜索旋转排序数组、153. 寻找旋转排序数组中的最小值、98. 验证二叉搜索树

74. 搜索二维矩阵 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int row matrix.size();int col matrix[0].size();for(int i0;i<row;i) {//先排除一下不存在的情况if(i>0&&matrix[i][0]>target…

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…

技能 | postman接口测试工具安装及使用

哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具&#xff0c;主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景&#xff1a; Postman介绍&#xff1a; 1. 功能丰富的API客户端&#…

【14】Github Copilot环境搭建

环境搭建 这里以Visual Studio Code为例&#xff0c;安装好vs code&#xff0c;打开扩展侧边菜单栏&#xff0c;搜索“Github Copilot”&#xff0c;会出现如下图的两个插件&#xff0c;点击安装第一个&#xff0c;另一个会附带一起安装&#xff0c;然后弹出提示重新启动vs co…

怎么调整硬盘分区?让电脑运行更加高效!

硬盘分区是电脑存储管理的重要组成部分&#xff0c;合理的分区设置不仅能提高数据管理的效率&#xff0c;还能在一定程度上提升系统的运行性能。然而&#xff0c;随着使用需求的变化&#xff0c;我们可能需要对已有的硬盘分区进行调整。那么&#xff0c;我们该怎么调整硬盘分区…

zookeeper+kafka消息队列群集部署

消息队列(Message Queue)&#xff0c;是分布式系统中重要的组件&#xff0c;其通用的使用场景可以简单地描述为:当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队列的时候。 一、消息队列 1.什么是消息队列 消息(Messag…

Windows命令行(CMD)中,tasklist | findstr(搜索并显示包含特定字符串的进程信息)

文章目录 示例注意事项示例&#xff1a;使用 /FI 选项过滤进程 在Windows命令行&#xff08;CMD&#xff09;中&#xff0c; tasklist 命令用于显示当前运行的进程列表&#xff0c;而 findstr 命令则用于搜索字符串。当你将 tasklist 命令的输出通过管道&#xff08; |&…

支持大量边缘盒子集中管理调度的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

解读|http和https的区别,谁更好用

在日常我们浏览网页时&#xff0c;有些网站会看到www前面是http&#xff0c;有些是https&#xff0c;这两种有什么区别呢&#xff1f;为什么单单多了“s”&#xff0c;会有人说这个网页会更安全些&#xff1f; HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;…

【芯片设计- RTL 数字逻辑设计入门 9.1 -- CRG模块】

请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 转自&#xff1a;芯片设计基础 – CRG模块 文章目录 CRG模块CRG时钟系统CRG复位系统同步复位同步复位的优点同步复位的缺点 异步复位异步复位的优点异步复位的缺点 异步复位同步释放 CRG模块 CRG是芯片里的时钟和复位生成模块&#…

Databend 开源周报第 153 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend。 支持必须更改密码…

npm 报错Error: EEXIST: file already exists, mkdir ‘C:\Windows\System32\cmd.exe‘

npm 报错Error: EEXIST: file already exists, mkdir C:\Windows\System32\cmd.exe 不管输npm 什么命令都报这个错&#xff1a; 报错图&#xff1a; 网上说恢复操作系统&#xff0c;最后定位为应该是配置问题&#xff0c; 我是配置问题 网上查了&#xff0c;最后定位为配置问…

【Mamba】Mamba的部署

ubuntu系统安装11.6版本的cuda 可以参考这两篇博客 ubuntu22.04多版本安装cuda及快速切换&#xff08;cuda11.1和11.8&#xff09;_ubuntu调整cuda版本 【Linux】在一台机器上同时安装多个版本的CUDA&#xff08;切换CUDA版本&#xff09;_linux安装多个cuda 安装CUDA https…

程易科技:十年匠心,与您同行

序章&#xff1a;时光的见证者 十年前&#xff0c;当第一缕曙光照亮程易科技的办公室&#xff0c;一个关于梦想、创新与陪伴的故事悄然启幕。程易科技&#xff0c;一家以自研DSP数字化服务平台为核心&#xff0c;致力于为企业提供高效、低成本业务构建能力的科技企业&#xff…

django中日志模块logging的配置和使用

一、文件的配置 settings.py文件中添加LOGGING块的配置&#xff0c;配置如下 # 日志记录 LOGGING {"version": 1,"disable_existing_loggers": False, # 用于确定在应用新的日志配置时是否禁用之前配置的日志器# 格式器"formatters": {"v…

【后端开发实习】用MongoDB和Redis实现消息队列搭建分布式邮件消息系统

用Redis实现消息队列并搭建分布式邮件消息系统 系统介绍Redis实现消息队列思路分析代码实现 MongoDB监听数据变化思路分析代码实现Mongoose测试连接监听mongodb数据变化 注意点 系统介绍 本次要实现的是一个能够实现实时监控Mongodb中数据变化的系统&#xff0c;要能够在数据发…

电机泵盖机器人打磨去毛刺,选德国进口高精度主轴

机器人打磨去毛刺该如何选择主轴呢&#xff1f;首先我们需要考虑的是工件的材质&#xff0c;电机泵盖通常使用铸铁、不锈钢、合金钢等金属材质&#xff0c;因此这类保持的硬度较高&#xff0c;一般会选择功率、扭矩较大的德国进口高精度主轴Kasite 4060 ER-S。 Kasite 4060 ER-…