Exemplo n.º 1
0
    def _dataset_parser(self, image_file, label_file):
        objects = []
        tree = ET.parse(label_file)
        root = tree.getroot()
        objects_handle = root.find('objects')
        for single_object in objects_handle.findall('object'):
            points = single_object.find('points')
            object_struct = {}

            pointobb = []
            for point in points[:-1]:
                coords = [float(coord) for coord in point.text.split(',')]
                pointobb += coords

            bbox = aitool.pointobb2bbox(pointobb)
            bbox = aitool.xyxy2xywh(bbox)

            object_struct['area'] = bbox[2] * bbox[3]
            object_struct['segmentation'] = [pointobb]
            object_struct['pointobb'] = pointobb
            object_struct['bbox'] = bbox
            object_struct['category_id'] = classes[single_object.find('possibleresult').find('name').text]
            
            objects.append(object_struct)

        return objects
Exemplo n.º 2
0
    def _convert_items(self, result, img_size=(1024, 1024)):
        """convert the result (single image) in pkl file to specific format (default: Faster R-CNN, bbox) 

        Args:
            result (tuple): detection result of single image
            img_size (tuple): image size (height, width)

        Return:
            list: converted objects
        """
        objects = []

        for label in range(len(result)):
            bboxes = result[label]
            for i in range(bboxes.shape[0]):
                data = dict()
                data['bbox'] = aitool.xyxy2xywh(bboxes[i][:4])
                if data['bbox'][2] * data['bbox'][3] < self.min_area:
                    continue
                data['score'] = float(bboxes[i][4])
                if data['score'] < self.score_threshold:
                    continue
                data['category_id'] = self.cat_ids[label]
                objects.append(data)

        return objects
Exemplo n.º 3
0
def xml_parser_rovoc(label_file):
    objects = []
    tree = ET.parse(label_file)
    root = tree.getroot()

    for single_object in root.findall('object'):
        robndbox = single_object.find('robndbox')
        data = {}

        cx = float(robndbox.find('cx').text)
        cy = float(robndbox.find('cy').text)
        w = float(robndbox.find('w').text)
        h = float(robndbox.find('h').text)
        theta = float(robndbox.find('angle').text)

        thetaobb = [cx, cy, w, h, theta]

        pointobb = aitool.thetaobb2pointobb(thetaobb)
        bbox = aitool.thetaobb2bbox(thetaobb)
        bbox = aitool.xyxy2xywh(bbox)

        data['area'] = bbox[2] * bbox[3]
        data['segmentation'] = [pointobb]
        data['pointobb'] = pointobb
        data['thetaobb'] = thetaobb
        data['bbox'] = bbox
        data['category_id'] = 1

        objects.append(data)

    return objects
Exemplo n.º 4
0
    def _convert_items(self, result, img_size=(1024, 1024)):
        """convert the result (single image) in pkl file to specific format (Mask OBB, bbox + maskobb) 

        Args:
            result (tuple): detection result of single image
            img_size (tuple): image size (height, width)

        Return:
            list: converted objects
        """
        objects = []

        det, seg = result
        for label in range(len(det)):
            if label > len(seg) - 1:
                continue
            bboxes = det[label]
            if isinstance(seg, tuple):
                segms = seg[0][label]
            else:
                segms = seg[label]

            for i in range(bboxes.shape[0]):
                data = dict()
                data['bbox'] = aitool.xyxy2xywh(bboxes[i][:4])
                data['score'] = float(bboxes[i][4])
                if data['score'] < self.score_threshold:
                    continue
                data['category_id'] = self.cat_ids[label]
                if isinstance(segms[i]['counts'], bytes):
                    segms[i]['counts'] = segms[i]['counts'].decode()
                data['segmentation'] = segms[i]
                thetaobb, pointobb = aitool.segm2rbbox(segms[i])
                data['pointobb'] = pointobb
                data['thetaobb'] = thetaobb
                if thetaobb[2] * thetaobb[3] < self.min_area:
                    continue
                if not self.keep_boundary:
                    cx_flag = thetaobb[0] < 0 or thetaobb[0] > img_size[1] - 1
                    cy_flag = thetaobb[1] < 0 or thetaobb[1] > img_size[0] - 1
                    if cx_flag or cy_flag:
                        continue
                objects.append(data)

        return objects
Exemplo n.º 5
0
    def _convert_items(self, result, img_size=(1024, 1024)):
        """convert the result (single image) in pkl file to specific format (Mask R-CNN, bbox + mask) 

        Args:
            result (tuple): detection result of single image
            img_size (tuple): image size (height, width)

        Return:
            list: converted objects
        """
        objects = []

        det, seg = result
        for label in range(len(det)):
            bboxes = det[label]
            if isinstance(seg, tuple):
                segms = seg[0][label]
            else:
                segms = seg[label]

            for i in range(bboxes.shape[0]):
                data = dict()
                data['bbox'] = aitool.xyxy2xywh(bboxes[i][:4])
                if data['bbox'][2] * data['bbox'][3] < self.min_area:
                    continue
                data['score'] = float(bboxes[i][4])
                if data['score'] < self.score_threshold:
                    continue
                data['category_id'] = self.cat_ids[label]
                if isinstance(segms[i]['counts'], bytes):
                    segms[i]['counts'] = segms[i]['counts'].decode()
                data['segmentation'] = segms[i]
                data['pointobb'] = aitool.bbox2pointobb(bboxes[i][:4])
                objects.append(data)

        return objects
Exemplo n.º 6
0
def xml_parser_plane(label_file):
    objects = []
    tree = ET.parse(label_file)
    root = tree.getroot()
    objects_handle = root.find('objects')
    if objects_handle is None:
        return []
    for single_object in objects_handle.findall('object'):
        points = single_object.find('points')
        data = {}

        pointobb = []
        for point in points[:-1]:
            coords = [float(coord) for coord in point.text.split(',')]
            pointobb += coords

        bbox = aitool.pointobb2bbox(pointobb)
        bbox = aitool.xyxy2xywh(bbox)

        data['area'] = bbox[2] * bbox[3]
        data['segmentation'] = [pointobb]
        data['pointobb'] = pointobb
        data['thetaobb'] = aitool.pointobb2thetaobb(pointobb)
        data['bbox'] = bbox
        data['category_id'] = single_object.find('possibleresult').find(
            'name').text
        data['class'] = single_object.find('possibleresult').find('name').text
        try:
            data['score'] = single_object.find('possibleresult').find(
                'probability').text
        except:
            print("There is not probability key")

        objects.append(data)

    return objects