Coco Json文件转换为CSV格式(path/to/image.jpg、x1、y1、x2、y2、类名)
我想将我的coco JSON文件转换如下: 带有注释的CSV文件每行应包含一个注释。具有多个边界框的图像应为每个边界框使用一行。请注意,像素值的索引从0开始。每行的预期格式为: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
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)