-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOCOParser.py
37 lines (36 loc) · 1.58 KB
/
COCOParser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from collections import defaultdict
import json
import numpy as np
class COCOParser:
def __init__(self, anns_file, imgs_dir):
with open(anns_file, 'r') as f:
coco = json.load(f)
self.annIm_dict = defaultdict(list)
self.cat_dict = {}
self.annId_dict = {}
self.im_dict = {}
self.licenses_dict = {}
for ann in coco['annotations']:
self.annIm_dict[ann['image_id']].append(ann)
self.annId_dict[ann['id']]=ann
for img in coco['images']:
self.im_dict[img['id']] = img
for cat in coco['categories']:
self.cat_dict[cat['id']] = cat
for license in coco['licenses']:
self.licenses_dict[license['id']] = license
def get_imgIds(self):
return list(self.im_dict.keys())
def get_annIds(self, im_ids):
im_ids=im_ids if isinstance(im_ids, list) else [im_ids]
return [ann['id'] for im_id in im_ids for ann in self.annIm_dict[im_id]]
def load_anns(self, ann_ids):
im_ids=ann_ids if isinstance(ann_ids, list) else [ann_ids]
return [self.annId_dict[ann_id] for ann_id in ann_ids]
def load_cats(self, class_ids):
class_ids=class_ids if isinstance(class_ids, list) else [class_ids]
return [self.cat_dict[class_id] for class_id in class_ids]
def get_imgLicenses(self,im_ids):
im_ids=im_ids if isinstance(im_ids, list) else [im_ids]
lic_ids = [self.im_dict[im_id]["license"] for im_id in im_ids]
return [self.licenses_dict[lic_id] for lic_id in lic_ids]