Spaces:
Sleeping
Sleeping
| import argparse | |
| import jsonlines | |
| from tqdm import tqdm | |
| import json | |
| from pycocotools.coco import COCO | |
| def dump_label_map(args): | |
| coco = COCO(args.input) | |
| cats = coco.loadCats(coco.getCatIds()) | |
| nms = {cat['id']-1:cat['name'] for cat in cats} | |
| with open(args.output,"w") as f: | |
| json.dump(nms, f) | |
| def coco_to_xyxy(bbox): | |
| x, y, width, height = bbox | |
| x1 = round(x, 2) | |
| y1 = round(y, 2) | |
| x2 = round(x + width, 2) | |
| y2 = round(y + height, 2) | |
| return [x1, y1, x2, y2] | |
| def coco2odvg(args): | |
| coco = COCO(args.input) | |
| cats = coco.loadCats(coco.getCatIds()) | |
| nms = {cat['id']:cat['name'] for cat in cats} | |
| metas = [] | |
| for img_id, img_info in tqdm(coco.imgs.items()): | |
| ann_ids = coco.getAnnIds(imgIds=img_id) | |
| instance_list = [] | |
| for ann_id in ann_ids: | |
| ann = coco.anns[ann_id] | |
| bbox = ann['bbox'] | |
| bbox_xyxy = coco_to_xyxy(bbox) | |
| label = ann['category_id'] | |
| category = nms[label] | |
| instance_list.append({ | |
| "bbox": bbox_xyxy, | |
| "label": label - 1, # make sure start from 0 | |
| "category": category | |
| } | |
| ) | |
| metas.append( | |
| { | |
| "filename": img_info["file_name"], | |
| "height": img_info["height"], | |
| "width": img_info["width"], | |
| "detection": { | |
| "instances": instance_list | |
| } | |
| } | |
| ) | |
| print(" == dump meta ...") | |
| with jsonlines.open(args.output, mode="w") as writer: | |
| writer.write_all(metas) | |
| print(" == done.") | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser("coco to odvg format.", add_help=True) | |
| parser.add_argument("--input", '-i', required=True, type=str, help="input list name") | |
| parser.add_argument("--output", '-o', required=True, type=str, help="output list name") | |
| parser.add_argument("--output_label_map", '-olm', action="store_true", help="output label map or not") | |
| args = parser.parse_args() | |
| if args.output_label_map: | |
| dump_label_map(args) | |
| else: | |
| coco2odvg(args) |