| import os |
| import argparse |
| import json |
| from collections import defaultdict |
|
|
|
|
| def uied2coco(uied_dir, img_id_map, cat_id_map, output_file = None): |
| pred = [] |
| for file in os.listdir(uied_dir): |
| if not file.endswith('.json'): |
| continue |
| img_id = img_id_map[file.split('.')[-2]] |
| if img_id is None: |
| continue |
| with open(os.path.join(uied_dir, file), 'r') as f: |
| data = json.load(f)['compos'] |
| for i in range(len(data)): |
| cat_id = cat_id_map[data[i]['class']] |
| x = data[i]['position']['column_min'] |
| y = data[i]['position']['row_min'] |
| width = data[i]['width'] |
| height = data[i]['height'] |
| bbox = [x, y, width, height] |
| score = 1 |
| pred.append({'image_id': img_id, 'category_id': cat_id, 'bbox': bbox, 'score': score}) |
| if output_file is not None: |
| with open(output_file, 'w') as f: |
| json.dump(pred, f) |
| return pred |
|
|
|
|
| if __name__ == '__main__': |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--uied_dir', type=str, required=True) |
| parser.add_argument('--ann', type=str, required=True) |
| parser.add_argument('--output_file', type=str, required=True) |
| args = parser.parse_args() |
| with open(args.ann, 'r') as f: |
| ann = json.load(f) |
| img_id_map = defaultdict(lambda: None) |
| for img in ann['images']: |
| img_id_map[img['file_name'].split('.')[-2]] = img['id'] |
| cat_id_map = defaultdict(lambda: 1) |
| for cat in ann['categories']: |
| cat_id_map[cat['name']] = cat['id'] |
| uied2coco(args.uied_dir, img_id_map, cat_id_map, args.output_file) |
| |