示例#1
0
 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)
示例#2
0
    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
示例#4
0
    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)