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格式的数据,使其更适用于你的目标检测或图像分割项目。