Vocal-Eyes / data /process.py
ABDRauf's picture
Upload 77 files
f82a827 verified
'''
Rename the Open Images V6 images to adapt pycocotools and produce the corresponding annotations.
The Visual Genome annotations are produced in the same way.
'''
import json
import os
root_path = 'your_path/open-imagev6/' # Download images from Rongjie's repo and unzip it.
with open(root_path +'annotations/'+ 'categories_dict.json') as f:
categories = json.load(f)
obj_categories = categories['obj']
rel_categories = categories['rel']
categories = []
for idx, i in enumerate(obj_categories):
category = {'supercategory': i, 'id': idx, 'name': i}
categories.append(category)
with open(root_path+'annotations/'+'vrd-train-anno.json') as f:
train_image_list = json.load(f)
counter = 0
new_image_name = 1
images = []
annotations = []
train_rel = {}
#
for row in train_image_list:
image_path = root_path+'images/'+row['img_fn']+'.jpg' #TODO image_id
w, h = row['img_size']
os.rename(image_path, root_path+'images/'+str(new_image_name)+'.jpg')
image = {'file_name': str(new_image_name)+'.jpg',
'height': h,
'width': w,
'id': new_image_name}
images.append(image)
for index, j in enumerate(row['bbox']):
bbox = [j[0], j[1], j[2]-j[0], j[3]-j[1]] #cxcywh
area = int(bbox[2] * bbox[3])
anno_id = counter
counter = counter + 1
annotation = {'segmentation': None,
'area': area,
'bbox': bbox,
'iscrowd': 0,
'image_id': new_image_name,
'id': anno_id,
'category_id': row['det_labels'][index]}
annotations.append(annotation)
train_rel[new_image_name] = row['rel']
new_image_name = new_image_name + 1
train_database = {'images': images,
'annotations': annotations,
'categories': categories}
print('train finish')
with open(root_path+'annotations/'+'vrd-test-anno.json') as f:
test_image_list = json.load(f)
images = []
annotations = []
test_rel = {}
for row in test_image_list:
image_path = root_path+'images/'+row['img_fn']+'.jpg' #TODO image_id
w, h = row['img_size']
os.rename(image_path, root_path+'images/'+str(new_image_name)+'.jpg')
image = {'file_name': str(new_image_name)+'.jpg',
'height': h,
'width': w,
'id': new_image_name}
images.append(image)
for index, j in enumerate(row['bbox']):
bbox = [j[0], j[1], j[2]-j[0], j[3]-j[1]] #cxcywh
area = int(bbox[2] * bbox[3])
anno_id = counter
counter = counter + 1
annotation = {'segmentation': None,
'area': area,
'bbox': bbox,
'iscrowd': 0,
'image_id': new_image_name,
'id': anno_id,
'category_id': row['det_labels'][index]}
annotations.append(annotation)
test_rel[new_image_name] = row['rel']
new_image_name = new_image_name + 1
test_database = {'images': images,
'annotations': annotations,
'categories': categories}
print('test finish')
with open(root_path+'annotations/'+'vrd-val-anno.json') as f:
val_image_list = json.load(f)
images = []
annotations = []
val_rel = {}
for row in val_image_list:
image_path = root_path+'images/'+row['img_fn']+'.jpg' #TODO image_id
w, h = row['img_size']
os.rename(image_path, root_path+'images/'+str(new_image_name)+'.jpg')
image = {'file_name': str(new_image_name)+'.jpg',
'height': h,
'width': w,
'id': new_image_name}
images.append(image)
for index, j in enumerate(row['bbox']):
bbox = [j[0], j[1], j[2]-j[0], j[3]-j[1]] #cxcywh
area = int(bbox[2] * bbox[3])
anno_id = counter
counter = counter + 1
annotation = {'segmentation': None,
'area': area,
'bbox': bbox,
'iscrowd': 0,
'image_id': new_image_name,
'id': anno_id,
'category_id': row['det_labels'][index]}
annotations.append(annotation)
val_rel[new_image_name] = row['rel']
new_image_name = new_image_name + 1
val_database = {'images': images,
'annotations': annotations,
'categories': categories}
print('test finish')
rel_database = {'train': train_rel,
'val': val_rel,
'test': test_rel,
'rel_categories': rel_categories}
json.dump(train_database, open('train.json', 'w'))
json.dump(val_database, open('val.json', 'w'))
json.dump(test_database, open('test.json', 'w'))
json.dump(rel_database, open('rel.json', 'w'))