def from_dict(cls, ann_dict: dict, strict: bool = True) -> COCO_Annotation: if strict: check_required_keys(ann_dict, required_keys=[ 'segmentation', 'num_keypoints', 'area', 'iscrowd', 'keypoints', 'image_id', 'bbox', 'category_id', 'id' ]) return COCO_Annotation( segmentation=Segmentation.from_list(ann_dict['segmentation'], demarcation=False), num_keypoints=ann_dict['num_keypoints'], area=ann_dict['area'], iscrowd=ann_dict['iscrowd'], keypoints=Keypoint2D_List.from_list(ann_dict['keypoints'], demarcation=False), image_id=ann_dict['image_id'], bbox=BBox.from_list(ann_dict['bbox'], input_format='pminsize'), category_id=ann_dict['category_id'], id=ann_dict['id'], keypoints_3d=Keypoint3D_List.from_list( ann_dict['keypoints_3d'], demarcation=False) if 'keypoints_3d' in ann_dict else None, camera=Camera.from_dict(ann_dict['camera_params']) if 'camera_params' in ann_dict else None) else: check_required_keys( ann_dict, required_keys=['id', 'category_id', 'image_id']) return COCO_Annotation( segmentation=Segmentation.from_list(ann_dict['segmentation'], demarcation=False) if 'segmentation' in ann_dict else None, num_keypoints=ann_dict['num_keypoints'] if 'num_keypoints' in ann_dict else None, area=ann_dict['area'] if 'area' in ann_dict else None, iscrowd=ann_dict['iscrowd'] if 'iscrowd' in ann_dict else None, keypoints=Keypoint2D_List.from_list(ann_dict['keypoints'], demarcation=False) if 'keypoints' in ann_dict else None, image_id=ann_dict['image_id'], bbox=BBox.from_list(ann_dict['bbox'], input_format='pminsize') if 'bbox' in ann_dict else None, category_id=ann_dict['category_id'], id=ann_dict['id'], keypoints_3d=Keypoint3D_List.from_list( ann_dict['keypoints_3d'], demarcation=False) if 'keypoints_3d' in ann_dict else None, camera=Camera.from_dict(ann_dict['camera_params']) if 'camera_params' in ann_dict else None)
def from_dict(cls, ann_dict: dict) -> Detectron2_Annotation: check_required_keys( ann_dict, required_keys=['iscrowd', 'bbox', 'category_id', 'bbox_mode']) if ann_dict['bbox_mode'] == BoxMode.XYWH_ABS: bbox = BBox.from_list(ann_dict['bbox'], input_format='pminsize') elif ann_dict['bbox_mode'] == BoxMode.XYXY_ABS: bbox = BBox.from_list(ann_dict['bbox'], input_format='pminpmax') else: raise NotImplementedError if 'keypoints' in ann_dict: keypoints = Keypoint2D_List.from_list( value_list=ann_dict['keypoints'], demarcation=False) else: keypoints = Keypoint2D_List() return Detectron2_Annotation(iscrowd=ann_dict['iscrowd'], bbox=bbox, keypoints=keypoints, category_id=ann_dict['category_id'], segmentation=Segmentation.from_list( points_list=ann_dict['segmentation'] if 'segmentation' in ann_dict else [], demarcation=False), bbox_mode=ann_dict['bbox_mode'])
def generate_visualizations(self, do_sort: bool = False): delete_dir_if_exists(self.visualization_dump_dir) make_dir(self.visualization_dump_dir) if do_sort: self.parser.images.image_list.sort( key=operator.attrgetter('file_name')) for coco_image in self.parser.images.image_list: coco_image = COCO_Image.buffer(coco_image) img_path = f"{self.img_dir}/{coco_image.file_name}" img = cv2.imread(img_path) coco_annotation_list = self.parser.annotations.get_annotations_from_imgIds( imgIds=[coco_image.id]) bbox_list = [] kpt_list_list = [] kpt_skeleton_list = [] kpt_label_list_list = [] seg_list = [] cat_name_list = [] for coco_annotation in coco_annotation_list: coco_annotation = COCO_Annotation.buffer(coco_annotation) bbox = coco_annotation.bounding_box keypoint_list = coco_annotation.get_keypoint_list() kpt_list = [[kpt.x, kpt.y] for kpt in keypoint_list] seg = Segmentation.from_list( points_list=coco_annotation.segmentation) bbox_list.append(bbox) kpt_list_list.append(kpt_list) seg_list.append(seg) coco_category = self.parser.categories.get_category_from_id( id=coco_annotation.category_id) cat_name_list.append(coco_category.name) kpt_skeleton_list.append(coco_category.skeleton) kpt_label_list_list.append(coco_category.keypoints) self.save(img=img, bbox_list=bbox_list, kpt_list_list=kpt_list_list, kpt_skeleton_list=kpt_skeleton_list, kpt_label_list_list=kpt_label_list_list, seg_list=seg_list, cat_name_list=cat_name_list, file_name=coco_image.file_name) if self.viz_limit is not None and self.viz_count >= self.viz_limit: break
def from_dict(cls, ann_dict: dict, strict: bool = True) -> COCO_Annotation: if strict: check_required_keys(ann_dict, required_keys=[ 'segmentation', 'num_keypoints', 'area', 'iscrowd', 'keypoints', 'image_id', 'bbox', 'category_id', 'id' ]) return COCO_Annotation( segmentation=Segmentation.from_list(ann_dict['segmentation'], demarcation=False), num_keypoints=ann_dict['num_keypoints'], area=ann_dict['area'], iscrowd=ann_dict['iscrowd'], keypoints=Keypoint2D_List.from_list(ann_dict['keypoints'], demarcation=False), image_id=ann_dict['image_id'], bbox=BBox.from_list(ann_dict['bbox'], input_format='pminsize'), category_id=ann_dict['category_id'], id=ann_dict['id'], keypoints_3d=Keypoint3D_List.from_list( ann_dict['keypoints_3d'], demarcation=False) if 'keypoints_3d' in ann_dict else None, camera=Camera.from_dict(ann_dict['camera_params']) if 'camera_params' in ann_dict else None) else: check_required_keys( ann_dict, required_keys=['id', 'category_id', 'image_id']) if 'segmentation' not in ann_dict: seg = None elif ann_dict['iscrowd'] == 1 and type( ann_dict['segmentation']) == dict: compressed_rle = mask.frPyObjects( ann_dict['segmentation'], ann_dict['segmentation']['size'][0], ann_dict['segmentation']['size'][1]) seg_mask = mask.decode(compressed_rle) contours, _ = cv2.findContours(seg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) seg = Segmentation.from_contour(contour_list=contours) else: seg = Segmentation.from_list(ann_dict['segmentation'], demarcation=False) return COCO_Annotation( segmentation=seg, num_keypoints=ann_dict['num_keypoints'] if 'num_keypoints' in ann_dict else None, area=ann_dict['area'] if 'area' in ann_dict else None, iscrowd=ann_dict['iscrowd'] if 'iscrowd' in ann_dict else None, keypoints=Keypoint2D_List.from_list(ann_dict['keypoints'], demarcation=False) if 'keypoints' in ann_dict else None, image_id=ann_dict['image_id'], bbox=BBox.from_list(ann_dict['bbox'], input_format='pminsize') if 'bbox' in ann_dict else None, category_id=ann_dict['category_id'], id=ann_dict['id'], keypoints_3d=Keypoint3D_List.from_list( ann_dict['keypoints_3d'], demarcation=False) if 'keypoints_3d' in ann_dict else None, camera=Camera.from_dict(ann_dict['camera_params']) if 'camera_params' in ann_dict else None)