예제 #1
0
파일: image.py 프로젝트: sergeyk/skvisutils
    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
예제 #2
0
파일: image.py 프로젝트: sergeyk/skvisutils
 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