Ejemplo n.º 1
0
    def test_infers_properties_from_mono_images(self):
        images = [make_image(idx, depth=None) for idx in range(10)]

        collection = ic.ImageCollection(
            images=images,
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL)
        self.assertEqual(images[0].image_group, collection.image_group)
        self.assertFalse(collection.is_depth_available)
        self.assertTrue(collection.is_normals_available)
        self.assertFalse(collection.is_stereo_available)
        self.assertTrue(collection.is_labels_available)
        self.assertFalse(collection.is_masks_available)

        self.assertEqual(collection.camera_intrinsics,
                         images[0].metadata.intrinsics)
        self.assertIsNone(collection.stereo_offset)
        self.assertIsNone(collection.right_camera_intrinsics)

        images = [
            make_image(idx,
                       normals=None,
                       metadata=make_metadata(
                           idx,
                           labelled_objects=[
                               imeta.MaskedObject(
                                   ('class_1', ), 152, 239, 14, 78,
                                   tf.Transform(location=(123, -45, 23),
                                                rotation=(0.5, 0.23, 0.1)),
                                   'LabelledObject-18569',
                                   np.random.choice((True, False),
                                                    size=(78, 14)))
                           ])) for idx in range(10)
        ]

        collection = ic.ImageCollection(
            images=images,
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL)
        self.assertTrue(collection.is_depth_available)
        self.assertFalse(collection.is_normals_available)
        self.assertFalse(collection.is_stereo_available)
        self.assertTrue(collection.is_labels_available)
        self.assertTrue(collection.is_masks_available)

        self.assertEqual(collection.camera_intrinsics,
                         images[0].metadata.intrinsics)
        self.assertIsNone(collection.stereo_offset)
        self.assertIsNone(collection.right_camera_intrinsics)
Ejemplo n.º 2
0
 def test_framerate_returns_average_time_interval_between_frames(self):
     images = [make_image(idx, depth=None) for idx in range(10)]
     collection = ic.ImageCollection(
         images=images,
         timestamps=[3.2 + 0.25 * idx for idx in range(10)],
         sequence_type=ImageSequenceType.SEQUENTIAL)
     self.assertEqual(0.25, collection.average_timestep)
Ejemplo n.º 3
0
    def test_stores_and_loads_mono_kwargs(self):
        images = []
        for idx in range(10):
            img = make_image(idx)
            img.save()
            images.append(img)

        collection = ic.ImageCollection(
            images=images,
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL,
            is_depth_available=True,
            is_normals_available=True,
            is_stereo_available=False,
            is_labels_available=True,
            is_masks_available=False,
            camera_intrinsics=images[0].metadata.intrinsics,
            dataset='TestSequences',
            sequence_name='Sequence1',
            trajectory_id='simple-motion')
        collection.save()

        # Load all the entities
        all_entities = list(ic.ImageCollection.objects.all())
        self.assertGreaterEqual(len(all_entities), 1)
        self.assertEqual(all_entities[0], collection)
        all_entities[0].delete()
Ejemplo n.º 4
0
 def setUp(self):
     self.path_manager = PathManager(['~'], '~/tmp')
     mock_importer.reset()
     image = mock_types.make_image()
     self.image_collection = ImageCollection(
         images=[image],
         timestamps=[1.2],
         sequence_type=ImageSequenceType.SEQUENTIAL)
Ejemplo n.º 5
0
def make_and_store_image(image_group: str):
    """
    Make an image, and then let it go out of scope, so it needs to be loaded.
    :return:
    """
    image = make_image(image_group=image_group)
    image.save()
    return image.pk
Ejemplo n.º 6
0
    def test_chooses_a_default_trajectory_id(self):
        images = [make_image(idx, depth=None) for idx in range(10)]

        collection = ic.ImageCollection(
            images=images,
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL,
            dataset='TestData',
            sequence_name='Sequence1')
        self.assertEqual('TestData:Sequence1', collection.trajectory_id)
Ejemplo n.º 7
0
 def test_get_columns_returns_column_list(self):
     images = [make_image(idx, depth=None) for idx in range(10)]
     collection = ic.ImageCollection(
         images=images,
         timestamps=[1.1 * idx for idx in range(10)],
         sequence_type=ImageSequenceType.SEQUENTIAL)
     self.assertEqual({
         'dataset',
         'sequence_name',
         'trajectory_id',
     }, collection.get_columns())
Ejemplo n.º 8
0
def make_image_collection(length, **kwargs):
    images = [make_image(idx) for idx in range(length)]
    timestamps = [idx * 0.9 for idx in range(len(images))]
    for image in images:
        image.save()
    image_collection = ImageCollection(
        images=images,
        timestamps=timestamps,
        sequence_type=ImageSequenceType.SEQUENTIAL,
        **kwargs)
    image_collection.save()
    return image_collection
Ejemplo n.º 9
0
    def setUpClass(cls):
        dbconn.connect_to_test_db()
        dbconn.setup_image_manager()

        cls.image = mock_types.make_image()
        cls.image.save()

        cls.image_collection = ImageCollection(
            images=[cls.image],
            timestamps=[1.2],
            sequence_type=ImageSequenceType.SEQUENTIAL)
        cls.image_collection.save()
Ejemplo n.º 10
0
 def test_get_properties_returns_only_requested_columns_that_exist(self):
     dataset = 'my dataset'
     sequence_name = 'this is a sequence'
     trajectory_id = 'trajectory 6'
     images = [make_image(idx, depth=None) for idx in range(10)]
     collection = ic.ImageCollection(
         images=images,
         timestamps=[1.1 * idx for idx in range(10)],
         sequence_type=ImageSequenceType.SEQUENTIAL,
         dataset=dataset,
         sequence_name=sequence_name,
         trajectory_id=trajectory_id)
     self.assertEqual({'dataset': dataset},
                      collection.get_properties({'dataset',
                                                 'not_a_column'}))
Ejemplo n.º 11
0
 def test_iterates_over_timestamps_and_images_in_timestamp_order(self):
     pairs = [(10 - 0.8 * idx, make_image(idx, depth=None))
              for idx in range(10)]
     collection = ic.ImageCollection(
         images=[pair[1] for pair in pairs],
         timestamps=[pair[0] for pair in pairs],
         sequence_type=ImageSequenceType.SEQUENTIAL)
     pairs = sorted(pairs, key=itemgetter(0))
     prev_timestamp = None
     for idx, (timestamp, image) in enumerate(collection):
         self.assertEqual(pairs[idx][0], timestamp)
         self.assertEqual(pairs[idx][1], image)
         if prev_timestamp is not None:
             self.assertGreater(timestamp, prev_timestamp)
         prev_timestamp = timestamp
Ejemplo n.º 12
0
 def test_get_properties_returns_the_value_of_all_columns(self):
     dataset = 'my dataset'
     sequence_name = 'this is a sequence'
     trajectory_id = 'trajectory 6'
     images = [make_image(idx, depth=None) for idx in range(10)]
     collection = ic.ImageCollection(
         images=images,
         timestamps=[1.1 * idx for idx in range(10)],
         sequence_type=ImageSequenceType.SEQUENTIAL,
         dataset=dataset,
         sequence_name=sequence_name,
         trajectory_id=trajectory_id)
     self.assertEqual(
         {
             'dataset': dataset,
             'sequence_name': sequence_name,
             'trajectory_id': trajectory_id
         }, collection.get_properties())
Ejemplo n.º 13
0
def make_image_collection(length=3) -> ImageCollection:
    """
    A quick helper for making and saving image collections
    :param length:
    :return:
    """
    images = []
    timestamps = []
    for idx in range(length):
        image = mock_types.make_image()
        image.save()
        images.append(image)
        timestamps.append(idx * 0.9)
    image_collection = ImageCollection(
        images=images,
        timestamps=timestamps,
        sequence_type=ImageSequenceType.SEQUENTIAL)
    image_collection.save()
    return image_collection
Ejemplo n.º 14
0
    def test_stores_and_loads_mono_args(self):
        images = []
        for idx in range(10):
            img = make_image(idx)
            img.save()
            images.append(img)

        collection = ic.ImageCollection(images,
                                        [1.1 * idx for idx in range(10)],
                                        ImageSequenceType.SEQUENTIAL, True,
                                        True, False, True, False,
                                        images[0].metadata.intrinsics)
        collection.save()

        # Load all the entities
        all_entities = list(ic.ImageCollection.objects.all())
        self.assertGreaterEqual(len(all_entities), 1)
        self.assertEqual(all_entities[0], collection)
        all_entities[0].delete()
Ejemplo n.º 15
0
    def test_required_fields_are_required(self):
        images = []
        for idx in range(10):
            img = make_image(idx)
            img.save()
            images.append(img)

        # Missing sequence type
        collection = ic.ImageCollection(
            images=images, timestamps=[1.1 * idx for idx in range(10)])
        with self.assertRaises(ValidationError):
            collection.save()

        # Missing images
        collection = ic.ImageCollection(
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL)
        with self.assertRaises(ValidationError):
            collection.save()

        # Missing timestamps
        collection = ic.ImageCollection(
            images=images, sequence_type=ImageSequenceType.SEQUENTIAL)
        with self.assertRaises(ValidationError):
            collection.save()

        # blank image_group
        collection = ic.ImageCollection(
            images=images,
            timestamps=[1.1 * idx for idx in range(10)],
            sequence_type=ImageSequenceType.SEQUENTIAL,
        )
        collection.image_group = None  # Explicitly clear because it is inferred by the constructor
        with self.assertRaises(ValidationError):
            collection.save()

        # Empty images and timestamps
        collection = ic.ImageCollection(
            images=[],
            timestamps=[],
            sequence_type=ImageSequenceType.SEQUENTIAL)
        with self.assertRaises(ValidationError):
            collection.save()
Ejemplo n.º 16
0
    def test_constructor_works_with_mixed_args(self):
        images = [make_image(idx, depth=None) for idx in range(10)]

        arguments = [('images', images),
                     ('timestamps', [1.1 * idx for idx in range(10)]),
                     ('sequence_type', ImageSequenceType.SEQUENTIAL),
                     ('image_group', images[0].image_group),
                     ('is_depth_available', True),
                     ('is_normals_available', False),
                     ('is_stereo_available', False),
                     ('is_labels_available', False),
                     ('is_masks_available', True),
                     ('camera_intrinsics', images[0].metadata.intrinsics)]
        for idx in range(len(arguments) + 1):
            collection = ic.ImageCollection(
                *(v for _, v in arguments[:idx]),
                **{k: v
                   for k, v in arguments[idx:]})

            # Check it got assigned correctly
            for name, value in arguments:
                self.assertEqual(value, getattr(collection, name))