Exemplo n.º 1
0
    def store_data_source(self, hdf5_handler, data, set_name):
        """
        Store classes + filenames as a nested tree.
        """
        # progress bar
        if self.verbose:
            prgbar = progressbar.ProgressBar(max_value=len(data)).start()
            counter = 0

        sourceg = hdf5_handler.create_group('source/' + set_name)

        # cycle all classes from the data with the original annotations
        for cname in data:
            images_filenames = [os.path.join(set_name, cname, fname) for fname in data[cname]]
            images_filenames.sort()
            hdf5_write_data(sourceg, cname + '/' + 'image_filenames',
                            str2ascii(images_filenames), dtype=np.uint8, fillvalue=0)

            # update progress bar
            if self.verbose:
                counter += 1
                prgbar.update(counter)

        # force progressbar to 100%
        if self.verbose:
            prgbar.finish()
Exemplo n.º 2
0
    def add_data_to_default(self, hdf5_handler, data, set_name):
        """
        Add data of a set to the default group.
        """
        image_filenames = []
        keypoints = []
        object_id = []
        object_fields = ["image_filenames", "keypoints"]

        if self.verbose:
            print('> Adding data to default group:')
            prgbar = progressbar.ProgressBar(max_value=len(data))

        for i, annot in enumerate(data):
            image_filenames.append(annot["filename"])
            keypoints.append(annot["joints"])

            object_id.append([i, i])

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        str2ascii(image_filenames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'keypoints',
                        np.array(keypoints, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'keypoint_names',
                        str2ascii(self.keypoints_labels),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        str2ascii(object_fields),
                        dtype=np.uint8,
                        fillvalue=0)
Exemplo n.º 3
0
    def add_data_to_source(self, hdf5_handler, data, set_name=None):
        """
        Store data annotations in a nested tree fashion.

        It closely follows the tree structure of the data.
        """
        hdf5_write_data(hdf5_handler,
                        'images',
                        data["images"],
                        dtype=np.uint8,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'labels',
                        data["labels"],
                        dtype=np.uint8,
                        fillvalue=0)
Exemplo n.º 4
0
    def process_set_metadata(self, data, set_name):
        """
        Saves the metadata of a set.
        """
        hdf5_handler = self.hdf5_manager.get_group(set_name)
        data_array = self.convert_data_to_arrays(data)
        hdf5_write_data(hdf5_handler,
                        'activities',
                        data_array["activities"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'videos',
                        data_array["videos"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        data_array["image_filenames"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'boxes',
                        data_array["boxes"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        data_array["object_ids"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        data_array["object_fields"],
                        dtype=np.uint8,
                        fillvalue=0)

        pad_value = -1
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_per_video',
                        data_array["list_object_ids_per_video"],
                        dtype=np.int32,
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_filenames_per_video',
                        data_array["list_filenames_per_video"],
                        dtype=np.int32,
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_boxes_per_video',
                        data_array["list_boxes_per_video"],
                        dtype=np.int32,
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_videos_per_activity',
                        data_array["list_videos_per_activity"],
                        dtype=np.int32,
                        fillvalue=pad_value)
Exemplo n.º 5
0
    def add_data_to_default(self, hdf5_handler, data, set_name=None):
        """
        Add data of a set to the default group.

        For each field, the data is organized into a single big matrix.
        """
        data_array = self.convert_data_to_arrays(data, set_name)
        hdf5_write_data(hdf5_handler, 'image_filenames',
                        data_array["image_filenames"], dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'classes', data_array["classes"], dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'labels', data_array["labels"], dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'descriptions',
                        data_array["descriptions"], dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'object_ids',
                        data_array["object_ids"], dtype=np.int32, fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'object_fields',
                        data_array["object_fields"], dtype=np.uint8, fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'list_image_filenames_per_class',
                        data_array["list_image_filenames_per_class"], dtype=np.int32, fillvalue=-1)
Exemplo n.º 6
0
    def process_set_metadata(self, data, set_name):
        """
        Saves the metadata of a set.
        """
        hdf5_handler = self.hdf5_manager.get_group(set_name)
        image_dir = os.path.join(self.data_path, self.image_dir_path[set_name])
        if "test" in set_name:
            is_test = True
            data_ = data[0]
            filename_ids = data[1]
            annotations = data[2]
            category = data[3]
            supercategory = data[4]
            category_id = data[5]
        else:
            is_test = False
            data_ = data[0]
            annotations = data[1]

        image_filenames = []
        width = []
        height = []
        coco_urls = []
        image_id = []
        caption = []
        object_id = []

        # coco id lists
        # These are order by entry like in the annotation files.
        # I.e., coco_images_ids[0] has the object_id with the file_name, id, height, etc.
        # as coco_annotation_file[set_name]["images"][0]
        coco_images_ids = []
        coco_categories_ids = []

        if is_test:
            object_fields = ["image_filenames", "coco_urls", "width", "height"]
        else:
            object_fields = ["image_filenames", "coco_urls", "width", "height", "captions"]

        list_captions_per_image = []
        list_object_ids_per_image = []

        if self.verbose:
            print('> Adding data to default group:')
            prgbar = progressbar.ProgressBar(max_value=len(data_))

        counter = 0
        for i, key in enumerate(data_):
            annotation = data_[key]
            image_filenames.append(annotation["file_name"])
            width.append(annotation["width"])
            height.append(annotation["height"])
            coco_urls.append(annotation["coco_url"])
            image_id.append(annotation["id"])

            if is_test:
                object_id.append([i, i, i, i])
                list_object_ids_per_image.append([i])
            else:
                captions_per_image = []
                for cap in annotation["captions"]:
                    caption.append(cap)

                    # object_id
                    # [filename, caption, width, height]
                    object_id.append([i, i, i, i, counter])

                    captions_per_image.append(counter)

                    # update counter
                    counter += 1

                list_captions_per_image.append(captions_per_image)
                list_object_ids_per_image.append(captions_per_image)

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        # set coco id lists
        if self.verbose:
            print('> Processing coco lists:')
            prgbar = progressbar.ProgressBar(max_value=len(annotations['images']))

        for i, annot in enumerate(annotations['images']):
            fname_id = image_filenames.index(os.path.join(image_dir, annot['file_name']))
            coco_images_ids.append(fname_id)

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        if is_test:
            coco_categories_ids = list(range(len(category)))

        hdf5_write_data(hdf5_handler, 'image_filenames',
                        str2ascii(image_filenames), dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler, 'coco_urls',
                        str2ascii(coco_urls), dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler, 'width',
                        np.array(width, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'height',
                        np.array(height, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'image_id',
                        np.array(image_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'coco_images_ids',
                        np.array(coco_images_ids, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'object_fields',
                        str2ascii(object_fields), dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler, 'list_object_ids_per_image',
                        np.array(pad_list(list_object_ids_per_image, -1), dtype=np.int32),
                        fillvalue=-1)

        if not is_test:
            hdf5_write_data(hdf5_handler, 'captions',
                            str2ascii(caption), dtype=np.uint8,
                            fillvalue=0)
            hdf5_write_data(hdf5_handler, 'list_captions_per_image',
                            np.array(pad_list(list_captions_per_image, -1), dtype=np.int32),
                            fillvalue=-1)
        else:
            hdf5_write_data(hdf5_handler, 'category',
                            str2ascii(category), dtype=np.uint8,
                            fillvalue=0)
            hdf5_write_data(hdf5_handler, 'supercategory',
                            str2ascii(supercategory), dtype=np.uint8,
                            fillvalue=0)
            hdf5_write_data(hdf5_handler, 'coco_categories_ids',
                            np.array(coco_categories_ids, dtype=np.int32),
                            fillvalue=-1)
Exemplo n.º 7
0
    def add_data_to_default(self, hdf5_handler, data, set_name):
        """
        Add data of a set to the default file.
        """
        object_fields = ['image_filenames', 'classes', 'boxes', 'boxesv', 'id', 'occlusion']
        image_filenames = []
        bbox = []
        bboxv = []
        lbl_id = []
        occlusion = []
        object_id = []

        list_image_filenames_per_class = []
        list_boxes_per_image = []
        list_boxesv_per_image = []
        list_object_ids_per_image = []
        list_objects_ids_per_class = []
        # list_objects_ids_per_id = []
        # list_objects_ids_per_occlusion= []

        if self.verbose:
            print('> Adding data to default file...')
            prgbar = progressbar.ProgressBar(max_value=len(data))

        img_counter = 0
        obj_counter = 0
        for i, set_data in enumerate(sorted(data)):
            for video in sorted(data[set_data]):
                img_fnames = data[set_data][video]["images"]
                annot_fnames = data[set_data][video]["annotations"]

                # cycle all images + annotations
                for j in range(0, len(img_fnames)):
                    # add image filename
                    image_filenames.append(img_fnames[j])

                    # load annotation file
                    annotation = load_json(annot_fnames[j])

                    obj_per_img = []
                    if any(annotation):
                        for obj in annotation:
                            # convert [x,y,w,h] to [xmin,ymin,xmax,ymax]
                            # discard any bbox smaller than 5px wide/high
                            if obj['pos'][2] >= 5 and obj['pos'][3] >= 5:
                                bb_correct_format = [obj['pos'][0],
                                                     obj['pos'][1],
                                                     obj['pos'][0] + obj['pos'][2] - 1,
                                                     obj['pos'][1] + obj['pos'][3] - 1]
                                bbox.append(bb_correct_format)
                                if isinstance(obj['posv'], list):
                                    # convert [x,y,w,h] to [xmin,ymin,xmax,ymax]
                                    bbv_correct_format = [obj['posv'][0],
                                                          obj['posv'][1],
                                                          obj['posv'][0] + obj['posv'][2] - 1,
                                                          obj['posv'][1] + obj['posv'][3] - 1]
                                    bboxv.append(bbv_correct_format)
                                else:
                                    bboxv.append([0, 0, 0, 0])
                                if isinstance(obj['id'], int):
                                    lbl_id.append(obj['id'])
                                else:
                                    lbl_id.append(0)
                                occlusion.append(obj['occl'])
                                class_lbl = self.classes.index(obj['lbl'])

                                # img, class, bbox, bboxv, id, occlusion
                                object_id.append([img_counter, class_lbl, obj_counter,
                                                  obj_counter, obj_counter, obj_counter])

                                obj_per_img.append(obj_counter)

                                # increment counter
                                obj_counter += 1

                    # add to lists
                    list_boxes_per_image.append(obj_per_img)
                    list_boxesv_per_image.append(obj_per_img)
                    list_object_ids_per_image.append(obj_per_img)

                    # increment counter
                    img_counter += 1

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        if self.verbose:
            print('> Processing lists...')

        # Process lists
        for i in range(len(self.classes)):
            imgs_per_class = [val[0] for j, val in enumerate(object_id) if val[1] == i]
            imgs_per_class = list(set(imgs_per_class))  # get unique values
            imgs_per_class.sort()
            list_image_filenames_per_class.append(imgs_per_class)

        for i in range(len(self.classes)):
            objs_per_class = [j for j, val in enumerate(object_id) if val[1] == i]
            objs_per_class = list(set(objs_per_class))  # get unique values
            objs_per_class.sort()
            list_objects_ids_per_class.append(objs_per_class)

        # add data to hdf5 file
        hdf5_write_data(hdf5_handler, 'image_filenames', str2ascii(image_filenames),
                        dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'classes', str2ascii(self.classes),
                        dtype=np.uint8, fillvalue=0)
        hdf5_write_data(hdf5_handler, 'boxes', np.array(bbox, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'boxesv', np.array(bboxv, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'id', np.array(lbl_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'occlusion', np.array(occlusion, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'object_ids', np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler, 'object_fields', str2ascii(object_fields),
                        dtype=np.uint8, fillvalue=0)

        pad_value = -1
        hdf5_write_data(hdf5_handler, 'list_image_filenames_per_class',
                        np.array(pad_list(list_image_filenames_per_class, pad_value),
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler, 'list_boxes_per_image',
                        np.array(pad_list(list_boxes_per_image, pad_value), dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler, 'list_boxesv_per_image',
                        np.array(pad_list(list_boxesv_per_image, pad_value), dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler, 'list_object_ids_per_image',
                        np.array(pad_list(list_object_ids_per_image, pad_value), dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler, 'list_objects_ids_per_class',
                        np.array(pad_list(list_objects_ids_per_class, pad_value), dtype=np.int32),
                        fillvalue=pad_value)

        if self.verbose:
            print('> Done.')
Exemplo n.º 8
0
    def add_data_to_default(self, hdf5_handler, data, set_name):
        """
        Add data of a set to the default group.
        """
        object_fields = [
            'image_filenames', 'classes', 'boxes', 'sizes', 'difficult',
            'truncated'
        ]
        image_filenames = []
        size = []
        bbox = []
        truncated = [0, 1]
        difficult = [0, 1]
        object_id = []

        obj_id = []  # needed because of ms coco
        image_id = []  # needed because of ms coco
        category_id = list(range(1, len(self.classes) + 1))  # for mscoco

        list_image_filenames_per_class = []
        list_boxes_per_image = []
        list_object_ids_per_image = []
        list_objects_ids_per_class = []
        list_objects_ids_no_difficult = []
        list_objects_ids_difficult = []
        list_objects_ids_no_truncated = []
        list_objects_ids_truncated = []

        if self.verbose:
            print('> Adding data to default group...')
            prgbar = progressbar.ProgressBar(max_value=len(data))

        # cycle all data files/annotations
        obj_counter = 0
        for i, data_ in enumerate(data):
            image_filename, fileid, annotation = data_

            image_filenames.append(image_filename)
            image_id.append(fileid)

            width = annotation['annotation']['size']['width']
            height = annotation['annotation']['size']['height']
            depth = annotation['annotation']['size']['depth']
            size.append([depth, height, width])

            if isinstance(annotation['annotation']['object'], list):
                obj_list = annotation['annotation']['object']
            else:
                obj_list = [annotation['annotation']['object']]

            # cycle all objects
            for _, obj in enumerate(obj_list):
                class_id = self.classes.index(obj['name'])
                obj_id.append(obj_counter)
                bbox.append([
                    obj['bndbox']['xmin'], obj['bndbox']['ymin'],
                    obj['bndbox']['xmax'], obj['bndbox']['ymax']
                ])

                object_id.append([
                    i, class_id, obj_counter, i,
                    difficult.index(int(obj['difficult'])),
                    difficult.index(int(obj['truncated']))
                ])

                # increment counter
                obj_counter += 1

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        if self.verbose:
            print('> Processing lists...')

        # process lists
        for i in range(len(self.classes)):
            imgs_per_class = [
                val[0] for j, val in enumerate(object_id) if val[1] == i
            ]
            imgs_per_class = list(set(imgs_per_class))  # get unique values
            imgs_per_class.sort()
            list_image_filenames_per_class.append(imgs_per_class)

        for i in range(len(image_filenames)):
            boxes_per_img = [
                val[2] for j, val in enumerate(object_id) if val[0] == i
            ]
            boxes_per_img = list(set(boxes_per_img))  # get unique values
            boxes_per_img.sort()
            list_boxes_per_image.append(boxes_per_img)

        for i in range(len(image_filenames)):
            objs_per_img = [
                j for j, val in enumerate(object_id) if val[0] == i
            ]
            objs_per_img = list(set(objs_per_img))  # get unique values
            objs_per_img.sort()
            list_object_ids_per_image.append(objs_per_img)

        for i in range(len(self.classes)):
            objs_per_class = [
                j for j, val in enumerate(object_id) if val[1] == i
            ]
            objs_per_class = list(set(objs_per_class))  # get unique values
            objs_per_class.sort()
            list_objects_ids_per_class.append(objs_per_class)

        objs_no_difficult = [
            j for j, val in enumerate(object_id) if val[4] == 0
        ]
        objs_no_difficult.sort()
        list_objects_ids_no_difficult = objs_no_difficult

        objs_difficult = [j for j, val in enumerate(object_id) if val[4] == 1]
        objs_difficult.sort()
        list_objects_ids_difficult = objs_difficult

        objs_no_truncated = [
            j for j, val in enumerate(object_id) if val[5] == 0
        ]
        objs_no_truncated.sort()
        list_objects_ids_no_truncated = objs_no_truncated

        objs_truncated = [j for j, val in enumerate(object_id) if val[5] == 1]
        objs_truncated.sort()
        list_objects_ids_truncated = objs_truncated

        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        str2ascii(image_filenames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'id',
                        np.array(obj_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'image_id',
                        np.array(image_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'category_id',
                        np.array(category_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'sizes',
                        np.array(size, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'classes',
                        str2ascii(self.classes),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'boxes',
                        np.array(bbox, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'truncated',
                        np.array(truncated, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'difficult',
                        np.array(difficult, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        str2ascii(object_fields),
                        dtype=np.uint8,
                        fillvalue=0)

        pad_value = -1
        hdf5_write_data(hdf5_handler,
                        'list_image_filenames_per_class',
                        np.array(pad_list(list_image_filenames_per_class,
                                          pad_value),
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_boxes_per_image',
                        np.array(pad_list(list_boxes_per_image, pad_value),
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_per_image',
                        np.array(pad_list(list_object_ids_per_image,
                                          pad_value),
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_per_class',
                        np.array(pad_list(list_objects_ids_per_class,
                                          pad_value),
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_no_difficult',
                        np.array(list_objects_ids_no_difficult,
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_difficult',
                        np.array(list_objects_ids_difficult, dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_no_truncated',
                        np.array(list_objects_ids_no_truncated,
                                 dtype=np.int32),
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_truncated',
                        np.array(list_objects_ids_truncated, dtype=np.int32),
                        fillvalue=pad_value)
Exemplo n.º 9
0
    def add_data_to_default(self, hdf5_handler, data, set_name=None):
        """
        Add data of a set to the default group.

        For each field, the data is organized into a single big matrix.
        """
        data_array = self.convert_data_to_arrays(data)
        hdf5_write_data(hdf5_handler,
                        'videos',
                        data_array["videos"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'video_filenames',
                        data_array["video_filenames"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'activities',
                        data_array["activities"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        data_array["image_filenames"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'annotations',
                        data_array["annotations"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'total_frames',
                        data_array["total_frames"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        data_array["object_ids"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        data_array["object_fields"],
                        dtype=np.uint8,
                        fillvalue=0)

        pad_value = -1
        hdf5_write_data(hdf5_handler,
                        'list_videos_per_activity',
                        data_array["list_videos_per_activity"],
                        dtype=np.int32,
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_image_filenames_per_video',
                        data_array["list_image_filenames_per_video"],
                        dtype=np.int32,
                        fillvalue=pad_value)
        hdf5_write_data(hdf5_handler,
                        'list_annotations_per_video',
                        data_array["list_annotations_per_video"],
                        dtype=np.int32,
                        fillvalue=pad_value)
Exemplo n.º 10
0
    def add_data_to_default(self, hdf5_handler, data, set_name=None):
        """
        Add data of a set to the default group.

        For each field, the data is organized into a single big matrix.
        """
        hdf5_write_data(hdf5_handler,
                        'classes',
                        data["class_name"],
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'labels',
                        data["labels"],
                        dtype=np.uint8,
                        fillvalue=1)
        hdf5_write_data(hdf5_handler,
                        'images',
                        data["data"],
                        dtype=np.uint8,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        data["object_ids"],
                        dtype=np.int32,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        data["object_fields"],
                        dtype=np.uint8,
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'list_images_per_class',
                        data["list_images_per_class"],
                        dtype=np.int32,
                        fillvalue=-1)
Exemplo n.º 11
0
    def add_data_to_default(self, hdf5_handler, data, set_name):
        """
        Add data of a set to the default group.
        """
        image_dir = os.path.join(self.data_path, self.image_dir_path[set_name])
        if 'test' in set_name:
            is_test = True
            data_ = data[0]
            filename_ids = data[1]
            annotations = data[2]
            category = data[3]
            supercategory = data[4]
            category_id = data[5]
        else:
            is_test = False
            data_ = data[0]
            annotations = data[1]
            annotation_id_dict = data[2]
            category = data[3]
            supercategory = data[4]
            category_id = data[5]
            filename_ids = data[6]
            images_fname_by_id = data[7]

        image_filenames = []
        coco_urls = []
        width = []
        height = []
        image_id = []

        annotation_id = []
        area = []
        iscrowd = [0, 1]
        segmentation = []
        bbox = []
        object_id = []

        # coco id lists
        # These are order by entry like in the annotation files.
        # I.e., coco_images_ids[0] has the object_id with the file_name, id, height, etc.
        # as coco_annotation_file[set_name]["images"][0]
        coco_images_ids = []
        coco_categories_ids = []
        coco_annotations_ids = []

        if is_test:
            object_fields = ["image_filenames", "coco_urls", "width", "height"]
        else:
            object_fields = [
                "image_filenames", "coco_urls", "width", "height", "category",
                "supercategory", "boxes", "area", "iscrowd", "segmentation",
                "image_id", "category_id", "annotation_id"
            ]

        list_image_filenames_per_category = []
        list_image_filenames_per_supercategory = []
        list_boxes_per_image = []
        list_object_ids_per_image = []
        list_objects_ids_per_category = []
        list_objects_ids_per_supercategory = []

        if self.verbose:
            print('> Adding data to default group:')
            prgbar = progressbar.ProgressBar(max_value=len(data[0]))

        counter = 0
        segmentation_t1_counter, segmentation_t2_counter = 0, 0
        tmp_coco_annotations_ids = {}

        for i, fname_idx in enumerate(data_):
            # fetch annotation
            annotation = data_[fname_idx]

            # add fields
            image_filenames.append(annotation["file_name"])
            width.append(annotation["width"])
            height.append(annotation["height"])
            coco_urls.append(annotation["coco_url"])
            image_id.append(annotation["id"])

            if is_test:
                # *** object_id ***
                # [filename, coco_url, width, height]
                object_id.append([i, i, i, i])
                list_object_ids_per_image.append([i])
            else:
                boxes_per_image = []

                if "object" in annotation:
                    for j, obj_idx in enumerate(annotation["object"]):
                        obj = annotation["object"][obj_idx]
                        area.append(obj["area"])
                        bbox.append(obj["bbox"])
                        annotation_id.append(obj["id"])
                        segmentation.append(obj["segmentation"])

                        # *** object_id ***
                        # [filename, coco_url, width, height,
                        # category, supercategory,
                        # bbox, area, iscrowd, segmentation,
                        # "image_id", "category_id", "annotation_id"]
                        object_id.append([
                            i, i, i, i,
                            category.index(obj["category"]),
                            supercategory.index(obj["supercategory"]), counter,
                            counter, obj["iscrowd"], counter, i,
                            category.index(obj["category"]), counter
                        ])

                        boxes_per_image.append(counter)

                        # temporary var
                        tmp_coco_annotations_ids[obj["id"]] = counter

                        # update counter
                        counter += 1

                list_boxes_per_image.append(boxes_per_image)
                list_object_ids_per_image.append(boxes_per_image)

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        if self.verbose:
            print('> Processing coco lists:')
            prgbar = progressbar.ProgressBar(
                max_value=len(annotations['images']))

        # set coco id lists
        for i, annot in enumerate(annotations['images']):
            fname_id = image_filenames.index(
                os.path.join(image_dir, annot['file_name']))
            coco_images_ids.append(fname_id)

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        coco_categories_ids = list(range(len(category)))

        if not is_test:
            if self.verbose:
                prgbar = progressbar.ProgressBar(
                    max_value=len(annotations['annotations']))
            for i, annot in enumerate(annotations['annotations']):
                annot_id = tmp_coco_annotations_ids[annot['id']]
                coco_annotations_ids.append(annot_id)

                # update progressbar
                if self.verbose:
                    prgbar.update(i)

            # update progressbar
            if self.verbose:
                prgbar.finish()

        # process lists
        if not is_test:
            if self.verbose:
                print('> Processing lists...')

            for i in range(len(category)):
                imgs_per_category = [
                    val[0] for _, val in enumerate(object_id) if val[4] == i
                ]
                imgs_per_category = list(
                    set(imgs_per_category))  # get unique values
                imgs_per_category.sort()
                list_image_filenames_per_category.append(imgs_per_category)

            for i in range(len(supercategory)):
                imgs_per_supercategory = [
                    val[0] for _, val in enumerate(object_id) if val[5] == i
                ]
                imgs_per_supercategory = list(
                    set(imgs_per_supercategory))  # get unique values
                imgs_per_supercategory.sort()
                list_image_filenames_per_supercategory.append(
                    imgs_per_supercategory)

            for i in range(len(category)):
                obj_per_category = [
                    j for j, val in enumerate(object_id) if val[4] == i
                ]
                obj_per_category = list(
                    set(obj_per_category))  # get unique values
                obj_per_category.sort()
                list_objects_ids_per_category.append(obj_per_category)

            for i in range(len(supercategory)):
                obj_per_supercategory = [
                    j for j, val in enumerate(object_id) if val[5] == i
                ]
                obj_per_supercategory = list(
                    set(obj_per_supercategory))  # get unique values
                obj_per_supercategory.sort()
                list_objects_ids_per_supercategory.append(
                    obj_per_supercategory)

            if self.verbose:
                print('> Done.')

        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        str2ascii(image_filenames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'coco_urls',
                        str2ascii(coco_urls),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'width',
                        np.array(width, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'height',
                        np.array(height, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'category',
                        str2ascii(category),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'supercategory',
                        str2ascii(supercategory),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'image_id',
                        np.array(image_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'category_id',
                        np.array(category_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        str2ascii(object_fields),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'coco_images_ids',
                        np.array(coco_images_ids, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'coco_categories_ids',
                        np.array(coco_categories_ids, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_per_image',
                        np.array(pad_list(list_object_ids_per_image, -1),
                                 dtype=np.int32),
                        fillvalue=-1)

        if not is_test:
            hdf5_write_data(hdf5_handler,
                            'annotation_id',
                            np.array(annotation_id, dtype=np.int32),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'boxes',
                            np.array(bbox, dtype=np.float),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'iscrowd',
                            np.array(iscrowd, dtype=np.uint8),
                            fillvalue=0)

            nrows = len(segmentation)
            ncols = max([len(l) for l in segmentation])
            dset = hdf5_handler.create_dataset('segmentation', (nrows, ncols),
                                               dtype=np.float,
                                               chunks=True,
                                               compression="gzip",
                                               compression_opts=4,
                                               fillvalue=-1)
            if self.verbose:
                print(
                    '   -- Saving segmentation masks to disk (this will take some time)'
                )
                prgbar = progressbar.ProgressBar(max_value=nrows)
            for i in range(nrows):
                dset[i, :len(segmentation[i])] = np.array(segmentation[i],
                                                          dtype=np.float)
                if self.verbose:
                    prgbar.update(i)

            if self.verbose:
                prgbar.finish()

            hdf5_write_data(hdf5_handler,
                            'area',
                            np.array(area, dtype=np.int32),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'coco_annotations_ids',
                            np.array(coco_annotations_ids, dtype=np.int32),
                            fillvalue=-1)

            pad_value = -1
            hdf5_write_data(hdf5_handler,
                            'list_image_filenames_per_category',
                            np.array(pad_list(
                                list_image_filenames_per_category, pad_value),
                                     dtype=np.int32),
                            fillvalue=pad_value)
            hdf5_write_data(hdf5_handler,
                            'list_image_filenames_per_supercategory',
                            np.array(pad_list(
                                list_image_filenames_per_supercategory,
                                pad_value),
                                     dtype=np.int32),
                            fillvalue=pad_value)
            hdf5_write_data(hdf5_handler,
                            'list_boxes_per_image',
                            np.array(pad_list(list_boxes_per_image, pad_value),
                                     dtype=np.int32),
                            fillvalue=pad_value)
            hdf5_write_data(hdf5_handler,
                            'list_objects_ids_per_category',
                            np.array(pad_list(list_objects_ids_per_category,
                                              pad_value),
                                     dtype=np.int32),
                            fillvalue=pad_value)
            hdf5_write_data(hdf5_handler,
                            'list_objects_ids_per_supercategory',
                            np.array(pad_list(
                                list_objects_ids_per_supercategory, pad_value),
                                     dtype=np.int32),
                            fillvalue=pad_value)
Exemplo n.º 12
0
    def process_set_metadata(self, data, set_name):
        """
        Saves the metadata of a set.
        """
        hdf5_handler = self.hdf5_manager.get_group(set_name)
        image_filenames = []
        width = []
        height = []
        movienames = []
        torso_boxes = []
        keypoints = []
        object_id = []

        object_fields = [
            "image_filenames", "torso_boxes", "keypoints", "width", "height"
        ]

        if self.verbose:
            print('> Adding data to default group:')
            prgbar = progressbar.ProgressBar(max_value=len(data))

        for i, annot in enumerate(data):
            image_filenames.append(annot["filename"])
            movienames.append(annot["moviename"])
            width.append(annot["width"])
            height.append(annot["height"])
            torso_boxes.append(annot["torso_box"])
            keypoints.append(annot["parts"])

            object_id.append([i, i, i, i, i])

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        str2ascii(image_filenames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'movienames',
                        str2ascii(movienames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'width',
                        np.array(width, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'height',
                        np.array(height, dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'torso_boxes',
                        np.array(torso_boxes, dtype=np.float).squeeze(),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'keypoints',
                        np.array(keypoints, dtype=np.float),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'keypoint_names',
                        str2ascii(self.keypoints_labels),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        str2ascii(object_fields),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=-1)
Exemplo n.º 13
0
    def add_data_to_default(self, hdf5_handler, data, set_name):
        """
        Add data of a set to the default group.
        """
        # split list
        data_, videonames = data

        if set_name == 'test':
            is_train = False
        else:
            is_train = True

        image_filenames = []
        frame_sec = []
        video_idx = []
        # single_person_id_list = []
        category_name, activity_name, activity_id = [], [], []
        scale = []
        objpos = []  # [x, y]
        head_bbox = []
        keypoints = []

        object_id = []

        if is_train:
            object_fields = [
                "image_filenames", "scale", "objpos", "head_bbox", "keypoints",
                "frame_sec", "video_idx"
            ]
        else:
            object_fields = ["image_filenames", "scale", "objpos"]

        # adicionar listas
        list_object_ids_per_image = []
        list_single_person_per_image = []
        list_keypoints_per_image = []

        if self.verbose:
            print('> Adding data to default group:')
            prgbar = progressbar.ProgressBar(max_value=len(data_))

        obj_per_img_counter = 0
        for i, annot in enumerate(data_):
            image_filenames.append(annot["image_filename"])

            if is_train:
                frame_sec.append(annot["frame_sec"])
                video_idx.append(annot["video_idx"])
                category_name.append(annot["activity"]["cat_name"])
                activity_name.append(annot["activity"]["act_name"])
                activity_id.append(annot["activity"]["act_id"])

            objs_per_image = []
            keypoints_per_image = []
            single_person_per_image = []
            if not any(annot["poses_annotations"]):
                if is_train:
                    if self.is_full:
                        object_id.append([i, -1, -1, -1, -1, i, i])
                        objs_per_image.append(
                            obj_per_img_counter)  # add object_id to the list
                        obj_per_img_counter += 1  # update counter
                else:
                    object_id.append([i, -1, -1])
                    objs_per_image.append(
                        obj_per_img_counter)  # add object_id to the list
                    obj_per_img_counter += 1  # update counter
            else:
                for j, pose_annot in enumerate(annot["poses_annotations"]):
                    scale.append(pose_annot["scale"])
                    objpos.append(
                        [pose_annot["objpos"]["x"], pose_annot["objpos"]["y"]])

                    if j + 1 in annot["single_person"]:
                        single_person_per_image.append(obj_per_img_counter)

                    if is_train:
                        head_bbox.append([
                            pose_annot["x1"], pose_annot["y1"],
                            pose_annot["x2"], pose_annot["y2"]
                        ])

                        keypoints.append(pose_annot["keypoints"])

                        object_id.append([
                            i, obj_per_img_counter, obj_per_img_counter,
                            obj_per_img_counter, obj_per_img_counter, i, i
                        ])

                        # add object_id to the keypoint list
                        keypoints_per_image.append(obj_per_img_counter)
                    else:
                        object_id.append(
                            [i, obj_per_img_counter, obj_per_img_counter])

                    # add object_id to the list
                    objs_per_image.append(obj_per_img_counter)

                    # update counter
                    obj_per_img_counter += 1

            list_object_ids_per_image.append(objs_per_image)
            list_single_person_per_image.append(single_person_per_image)
            list_keypoints_per_image.append(keypoints_per_image)

            # update progressbar
            if self.verbose:
                prgbar.update(i)

        # update progressbar
        if self.verbose:
            prgbar.finish()

        hdf5_write_data(hdf5_handler,
                        'image_filenames',
                        str2ascii(image_filenames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'scale',
                        np.array(scale, dtype=np.float),
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'objpos',
                        np.array(objpos, dtype=np.float),
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'object_ids',
                        np.array(object_id, dtype=np.int32),
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'object_fields',
                        str2ascii(object_fields),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'video_names',
                        str2ascii(videonames),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'keypoint_names',
                        str2ascii(self.keypoints_labels),
                        dtype=np.uint8,
                        fillvalue=0)
        hdf5_write_data(hdf5_handler,
                        'list_object_ids_per_image',
                        np.array(pad_list(list_object_ids_per_image, -1),
                                 dtype=np.int32),
                        fillvalue=-1)
        hdf5_write_data(hdf5_handler,
                        'list_single_person_per_image',
                        np.array(pad_list(list_single_person_per_image, -1),
                                 dtype=np.int32),
                        fillvalue=-1)

        if is_train:
            hdf5_write_data(hdf5_handler,
                            'frame_sec',
                            np.array(frame_sec, dtype=np.int32),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'video_idx',
                            np.array(video_idx, dtype=np.int32),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'category_name',
                            str2ascii(category_name),
                            dtype=np.uint8,
                            fillvalue=0)
            hdf5_write_data(hdf5_handler,
                            'activity_name',
                            str2ascii(activity_name),
                            dtype=np.uint8,
                            fillvalue=0)
            hdf5_write_data(hdf5_handler,
                            'activity_id',
                            np.array(activity_id, dtype=np.int32),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'head_bbox',
                            np.array(head_bbox, dtype=np.float),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'keypoints',
                            np.array(keypoints, dtype=np.float),
                            fillvalue=-1)
            hdf5_write_data(hdf5_handler,
                            'list_keypoints_per_image',
                            np.array(pad_list(list_keypoints_per_image, -1),
                                     dtype=np.int32),
                            fillvalue=-1)
Exemplo n.º 14
0
 def process_set_metadata(self, data, set_name):
     """
     Saves the metadata of a set.
     """
     hdf5_handler = self.hdf5_manager.get_group(set_name)
     hdf5_write_data(hdf5_handler, 'activities',
                     data["activities"],
                     dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'videos',
                     data["videos"],
                     dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'video_filenames',
                     data["video_filenames"],
                     dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'image_filenames',
                     data["image_filenames"],
                     dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'total_frames',
                     data["total_frames"],
                     dtype=np.int32, fillvalue=-1)
     hdf5_write_data(hdf5_handler, 'object_ids',
                     data["object_ids"],
                     dtype=np.int32, fillvalue=-1)
     hdf5_write_data(hdf5_handler, 'object_fields',
                     data["object_fields"],
                     dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'list_videos_per_activity',
                     data["list_videos_per_activity"],
                     dtype=np.int32, fillvalue=-1)
     hdf5_write_data(hdf5_handler, 'list_image_filenames_per_video',
                     data["list_image_filenames_per_video"],
                     dtype=np.int32, fillvalue=-1)
Exemplo n.º 15
0
 def process_set_metadata(self, data, set_name):
     """
     Saves the metadata of a set.
     """
     hdf5_handler = self.hdf5_manager.get_group(set_name)
     data_array = self.convert_data_to_arrays(data, set_name)
     hdf5_write_data(hdf5_handler, 'image_filenames',
                     data_array["image_filenames"], dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'classes', data_array["classes"], dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'labels', data_array["labels"], dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'descriptions',
                     data_array["descriptions"], dtype=np.uint8, fillvalue=0)
     hdf5_write_data(hdf5_handler, 'object_ids',
                     data_array["object_ids"], dtype=np.int32, fillvalue=-1)
     hdf5_write_data(hdf5_handler, 'object_fields',
                     data_array["object_fields"], dtype=np.uint8, fillvalue=-1)
     hdf5_write_data(hdf5_handler, 'list_image_filenames_per_class',
                     data_array["list_image_filenames_per_class"], dtype=np.int32, fillvalue=-1)