def load_from_pascal_xml_filename(cls, classes, filename, images_dir): "Load image info from a file in the PASCAL VOC XML format." def get_data_from_tag(node, tag): if tag is "bndbox": x1 = int(node.getElementsByTagName( tag)[0].childNodes[1].childNodes[0].data) y1 = int(node.getElementsByTagName( tag)[0].childNodes[3].childNodes[0].data) x2 = int(node.getElementsByTagName( tag)[0].childNodes[5].childNodes[0].data) y2 = int(node.getElementsByTagName( tag)[0].childNodes[7].childNodes[0].data) return (x1, y1, x2, y2) else: return node.getElementsByTagName(tag)[0].childNodes[0].data with open(filename) as f: data = minidom.parseString(f.read()) # image info name = get_data_from_tag(data, "filename") filename = os.path.join(images_dir, name) size = data.getElementsByTagName("size")[0] im_width = int(get_data_from_tag(size, "width")) im_height = int(get_data_from_tag(size, "height")) width = im_width height = im_height img = Image(width, height, classes, name) # per-object info objects = [] for obj in data.getElementsByTagName("object"): clas = str(get_data_from_tag(obj, "name")).lower().strip() diff = int(get_data_from_tag(obj, "difficult")) trun = int(get_data_from_tag(obj, "truncated")) rect = get_data_from_tag(obj, "bndbox") bbox = BoundingBox(rect, format='corners') cls_ind = classes.index(clas) objects.append(np.hstack((bbox.get_arr(), cls_ind, diff, trun))) if len(objects) > 0: img.objects_table = Table(np.array(objects), cls.columns) else: img.objects_table = Table(None, cls.columns) return img
def load_from_json(cls, classes, data): "Return an Image instantiated from a JSON representation." name = data['name'] width = data['size'][0] height = data['size'][1] img = Image(width, height, classes, name) objects = [] for obj in data['objects']: bbox = BoundingBox(obj['bbox']) cls_name = obj['class'] cls_ind = classes.index(cls_name) diff = obj['diff'] trun = obj['trun'] objects.append(np.hstack((bbox.get_arr(), cls_ind, diff, trun))) if len(objects) > 0: img.objects_table = Table(np.array(objects), cls.columns) else: img.objects_table = Table(None, cls.columns) return img