Coco Json文件转换为CSV格式(path/to/image.jpg、x1、y1、x2、y2、类名)

Coco Json文件转换为CSV格式(path/to/image.jpg、x1、y1、x2、y2、类名),json,object-detection,coco,Json,Object Detection,Coco,我想将我的coco JSON文件转换如下: 带有注释的CSV文件每行应包含一个注释。具有多个边界框的图像应为每个边界框使用一行。请注意,像素值的索引从0开始。每行的预期格式为: path/to/image.jpg,x1,y1,x2,y2,class_name 一个完整的例子: */data/imgs/img_001.jpg,837,346,981,456,cow /data/imgs/img_002.jpg,215,312,279,391,cat /data/imgs/img_002.jpg

我想将我的coco JSON文件转换如下:

带有注释的CSV文件每行应包含一个注释。具有多个边界框的图像应为每个边界框使用一行。请注意,像素值的索引从0开始。每行的预期格式为:

path/to/image.jpg,x1,y1,x2,y2,class_name
一个完整的例子:

*/data/imgs/img_001.jpg,837,346,981,456,cow 
/data/imgs/img_002.jpg,215,312,279,391,cat
/data/imgs/img_002.jpg,22,5,89,84,bird
这定义了一个包含3个图像的数据集:
img_001.jpg
包含一头奶牛,
img_002.jpg
包含一只猫和一只鸟,
img_003.jpg
不包含任何有趣的对象/动物

我怎么能这样做呢?

我有这样的功能

def convert_coco_json_to_csv(filename):
    import pandas as pd
    import json
    
    # COCO2017/annotations/instances_val2017.json
    s = json.load(open(filename, 'r'))
    out_file = filename[:-5] + '.csv'
    out = open(out_file, 'w')
    out.write('id,x1,y1,x2,y2,label\n')

    all_ids = []
    for im in s['images']:
        all_ids.append(im['id'])

    all_ids_ann = []
    for ann in s['annotations']:
        image_id = ann['image_id']
        all_ids_ann.append(image_id)
        x1 = ann['bbox'][0]
        x2 = ann['bbox'][0] + ann['bbox'][2]
        y1 = ann['bbox'][1]
        y2 = ann['bbox'][1] + ann['bbox'][3]
        label = ann['category_id']
        out.write('{},{},{},{},{},{}\n'.format(image_id, x1, y1, x2, y2, label))

    all_ids = set(all_ids)
    all_ids_ann = set(all_ids_ann)
    no_annotations = list(all_ids - all_ids_ann)
    # Output images without any annotations
    for image_id in no_annotations:
        out.write('{},{},{},{},{},{}\n'.format(image_id, -1, -1, -1, -1, -1))
    out.close()

    # Sort file by image id
    s1 = pd.read_csv(out_file)
    s1.sort_values('id', inplace=True)
    s1.to_csv(out_file, index=False)