如何使用Python合并多个COCO格式的JSON标注文件
COCO多标注文件合并方案
核心注意事项
- 所有待合并的JSON文件需保证
categories字段完全一致,否则会出现类别映射错误 - 合并时需对后加入的文件的图片ID、标注ID做全局偏移,避免ID重复导致标注关联错误
- 合并后建议用COCO API加载校验,确认无数据丢失
实现代码
仅依赖Python原生json库即可完成,如需校验可额外安装pycocotools:
import json from pathlib import Path def merge_coco_json(json_paths, output_path): # 初始化合并后的COCO结构体,取第一个文件的categories作为基准 merged_coco = { "info": {}, "licenses": [], "categories": [], "images": [], "annotations": [] } # 记录当前最大的图片ID和标注ID,用于后续偏移 max_img_id = -1 max_anno_id = -1 for idx, json_path in enumerate(json_paths): with open(json_path, 'r', encoding='utf-8') as f: coco_data = json.load(f) # 第一个文件直接复用categories、info、licenses字段 if idx == 0: merged_coco['categories'] = coco_data['categories'] merged_coco['info'] = coco_data.get('info', {}) merged_coco['licenses'] = coco_data.get('licenses', []) # 计算当前文件的ID偏移量 img_id_offset = max_img_id + 1 anno_id_offset = max_anno_id + 1 img_id_map = {} # 更新图片ID并写入合并结构体 for img in coco_data['images']: old_img_id = img['id'] img['id'] = old_img_id + img_id_offset img_id_map[old_img_id] = img['id'] merged_coco['images'].append(img) # 更新标注ID和关联的图片ID,写入合并结构体 for anno in coco_data['annotations']: old_anno_id = anno['id'] old_img_id = anno['image_id'] anno['id'] = old_anno_id + anno_id_offset anno['image_id'] = img_id_map[old_img_id] merged_coco['annotations'].append(anno) # 更新全局最大ID max_img_id = max([img['id'] for img in merged_coco['images']]) max_anno_id = max([anno['id'] for anno in merged_coco['annotations']]) # 输出合并后的文件 with open(output_path, 'w', encoding='utf-8') as f: json.dump(merged_coco, f, indent=2, ensure_ascii=False) # 调用示例 if __name__ == "__main__": # 替换为你的标注文件路径列表 json_list = [f"train{i}.json" for i in range(1, 11)] merge_coco_json(json_list, "merged_train.json")
合并结果校验
from pycocotools.coco import COCO # 加载合并后的文件 coco = COCO("merged_train.json") # 输出统计信息确认无异常 print(f"合并后图片总数:{len(coco.imgs)}") print(f"合并后标注总数:{len(coco.anns)}") print(f"类别列表:{[cat['name'] for cat in coco.cats.values()]}")
无报错且统计值符合多个文件的累加结果即为合并成功。
内容的提问来源于stack exchange,提问作者user12388610
相关产品推荐
相关产品推荐

