多个coco数据标注文件合并

发布时间:2024年01月22日

一、coco数据集是什么?

COCO(Common Objects in Context)是一个用于目标检测和图像分割任务的标注格式。如果你有多个COCO格式的JSON文件,你可能需要将它们合并成一个文件,以便更方便地处理和管理数据。在这篇博客中,我们将介绍一个用Python编写的脚本,可以实现这一合并操作。

二、完整代码

import json
import os

def merge_coco_files(folder_path):
    merged_data = {
        "info": {
            "year": 2023,
            "version": "1",
            "date_created": "no need record"
        },
        "images": [],
        "annotations": [],
        "licenses": [
            {
                "id": 1,
                "name": "Unknown",
                "url": ""
            }
        ],
        "categories": [
            {
                "id": 1,
                "name": "hd",
                "supercategory": ""
            }
        ]
    }

    image_id_counter = 1
    annotation_id_counter = 1

    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith(".json"):
                file_path = os.path.join(root, file)
                with open(file_path, 'r') as f:
                    data = json.load(f)

                    # Update image IDs and filenames
                    for image in data["images"]:
                        image["id"] = image_id_counter
                        image_id_counter += 1

                        # Use the original file name from the COCO file
                        image["file_name"] = image["file_name"]

                        # Append the updated image to the merged_data only if it's not already present
                        if image not in merged_data["images"]:
                            merged_data["images"].append(image)

                    # Update annotation IDs and image IDs
                    for annotation in data["annotations"]:
                        annotation["id"] = annotation_id_counter
                        annotation_id_counter += 1
                        annotation["image_id"] = image_id_counter - 1  # Use the last assigned image ID

                        # Append the updated annotation to the merged_data
                        merged_data["annotations"].append(annotation)

    # Save the merged data to a new JSON file
    output_path = os.path.join(folder_path, "merged_coco.json")
    with open(output_path, 'w') as output_file:
        json.dump(merged_data, output_file, indent=4)

    print(f'Merged data saved to: {output_path}')

# Provide the path to the folder containing the COCO JSON files
folder_path = r''
merge_coco_files(folder_path)

脚本的主要步骤包括:

初始化合并后的数据结构。
遍历指定文件夹中的所有JSON文件。
对每个JSON文件中的图像和注释进行ID的更新。
将更新后的数据保存为新的JSON文件。

使用方法

为了使用这个脚本,你只需提供包含COCO JSON文件的文件夹路径,并运行脚本。合并后的数据将保存在原始文件夹中,并命名为"merged_coco.json"。

这个脚本可以帮助你更好地组织和管理COCO格式的数据,使其更适用于你的目标检测或图像分割项目。

文章来源:https://blog.csdn.net/weixin_43788282/article/details/135753667
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。