如何将包含bbox标注信息的CSV文件转换为指定结构的JSON
解决CSV按图片分组转带多标注JSON的方案
核心解决思路是先按Photo ID对CSV行做分组,同一ID的所有行标注都合并到对应图片的annotations列表中,避免逐行生成独立图片对象。
以下是无需额外依赖的Python实现代码:
import csv import json # 临时字典,用于按Photo ID分组 img_dict = {} with open('你的CSV文件路径.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: photo_id = int(row['Photo ID']) # 该ID首次出现时新建图片条目 if photo_id not in img_dict: img_dict[photo_id] = { "image_id": photo_id, "file_name": row['Photo Name'].rsplit('.', 1)[0], # 去掉后缀.jpg "height": 2880, "width": 5760, "annotations": [] } # 新增当前行的标注 annotation = { "bbox": [ float(row['X1']), float(row['Y1']), float(row['X2']), float(row['Y2']) ], "bbox_mode": 1, "category_id": int(row['Category']) } img_dict[photo_id]['annotations'].append(annotation) # 字典值转列表就是目标结构 result = list(img_dict.values()) # 输出到JSON文件 with open('输出结果.json', 'w', encoding='utf-8') as f: json.dump(result, f, indent=4, ensure_ascii=False)
如果需要调整图片的height、width为动态值,或者修改bbox的数值格式,直接修改对应字段的生成逻辑即可。
内容的提问来源于stack exchange,提问作者linasster
相关产品推荐
相关产品推荐

