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
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
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
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
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
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