Пример #1
0
    def add_camera_sequence(
        self,
        camera: pygeometry.Camera,
        start: float,
        length: float,
        height: float,
        interval: float,
        position_noise: List[float],
        rotation_noise: float,
        positions_shift: Optional[List[float]] = None,
    ):
        default_noise_interval = 0.25 * interval
        positions, rotations = sg.generate_cameras(
            sg.samples_generator_interval(start, length, interval,
                                          default_noise_interval),
            self.generator,  # pyre-fixme [6]
            height,
        )
        sg.perturb_points(positions, position_noise)
        sg.perturb_rotations(rotations, rotation_noise)
        if positions_shift:
            positions += np.array(positions_shift)
        self.shot_rotations.append(rotations)
        self.shot_positions.append(positions)

        shift = 0 if len(self.shot_ids) == 0 else len(self.shot_ids[-1])
        self.shot_ids.append(
            [f"Shot {shift+i:04d}" for i in range(len(positions))])
        self.cameras.append(camera)
        return self
Пример #2
0
    def get_reconstruction(self,
                           rotation_noise=0.0,
                           position_noise=0.0,
                           camera_noise=0.0):
        floor_color = [120, 90, 10]
        wall_color = [10, 90, 130]

        positions = self.shot_positions
        if position_noise != 0.0:
            for p in positions:
                sg.perturb_points(p, position_noise)
        rotations = self.shot_rotations
        if position_noise != 0.0:
            for r in rotations:
                sg.perturb_rotations(r, rotation_noise)
        cameras = self.cameras
        if camera_noise != 0.0:
            for c in cameras:
                c.focal *= 1 + camera_noise

        return sg.create_reconstruction(
            [self.floor_points, self.wall_points],
            [floor_color, wall_color],
            cameras,
            self.shot_ids,
            positions,
            rotations,
            self.rig_instances,
            self.instances_positions,
            self.instances_rotations,
            self.rig_models,
        )
Пример #3
0
 def add_camera_sequence(
     self,
     camera,
     start,
     length,
     height,
     interval,
     position_noise=None,
     rotation_noise=None,
     gps_noise=None,
 ):
     default_noise_interval = 0.25 * interval
     positions, rotations = sg.generate_cameras(
         sg.samples_generator_interval(start, length, interval,
                                       default_noise_interval),
         self.generator,
         height,
     )
     sg.perturb_points(positions, position_noise)
     sg.perturb_rotations(rotations, rotation_noise)
     self.shot_rotations.append(rotations)
     self.shot_positions.append(positions)
     shift = 0 if len(self.shot_ids) == 0 else len(self.shot_ids[-1])
     self.shot_ids.append(
         [f"Shot {shift+i:04d}" for i in range(len(positions))])
     self.cameras.append(camera)
     return self
Пример #4
0
 def add_camera_sequence(self, camera, start, length, height, interval,
                         position_noise=None, rotation_noise=None,
                         gps_noise=None):
     default_noise_interval = 0.25 * interval
     positions, rotations = sg.generate_cameras(
         sg.samples_generator_interval(start, length, interval,
                                       default_noise_interval),
         self.generator, height)
     sg.perturb_points(positions, position_noise)
     sg.perturb_rotations(rotations, rotation_noise)
     self.shot_rotations.append(rotations)
     self.shot_positions.append(positions)
     self.cameras.append(camera)
     return self
Пример #5
0
 def add_camera_sequence(self, camera, start, length, height, interval,
                         position_noise=None, rotation_noise=None,
                         gps_noise=None):
     default_noise_interval = 0.25*interval
     positions, rotations = sg.generate_cameras(
         sg.samples_generator_interval(start, length, interval,
                                       default_noise_interval),
         self.generator, height)
     sg.perturb_points(positions, position_noise)
     sg.perturb_rotations(rotations, rotation_noise)
     self.shot_rotations.append(rotations)
     self.shot_positions.append(positions)
     self.cameras.append(camera)
     return self
Пример #6
0
    def add_camera_sequence(
        self,
        camera: pygeometry.Camera,
        length: float,
        height: float,
        interval: float,
        position_noise: List[float],
        rotation_noise: float,
        positions_shift: Optional[List[float]] = None,
        end: Optional[float] = None,
    ) -> "SyntheticStreetScene":
        default_noise_interval = 0.25 * interval
        actual_end = length if end is None else end
        generator = self.generator
        assert generator
        positions, rotations = sg.generate_cameras(
            sg.samples_generator_interval(length, actual_end, interval,
                                          default_noise_interval),
            generator,
            height,
        )
        sg.perturb_points(positions, position_noise)
        sg.perturb_rotations(rotations, rotation_noise)
        if positions_shift:
            positions += np.array(positions_shift)

        shift = 0 if len(self.shot_ids) == 0 else sum(
            len(s) for s in self.shot_ids)
        new_shot_ids = [f"Shot {shift+i:04d}" for i in range(len(positions))]
        self.shot_ids.append(new_shot_ids)
        self.cameras.append([camera])

        rig_camera = pymap.RigCamera(pygeometry.Pose(), camera.id)
        self.rig_cameras.append([rig_camera])

        rig_instances = []
        for shot_id in new_shot_ids:
            rig_instances.append([(shot_id, camera.id)])
        self.rig_instances.append(rig_instances)
        self.instances_positions.append(positions)
        self.instances_rotations.append(rotations)

        return self
Пример #7
0
    def add_rig_camera_sequence(
        self,
        cameras: List[pygeometry.Camera],
        relative_positions: List[List[float]],
        relative_rotations: List[List[float]],
        length: float,
        height: float,
        interval: float,
        position_noise: List[float],
        rotation_noise: float,
        end: Optional[float] = None,
    ) -> "SyntheticStreetScene":
        default_noise_interval = 0.25 * interval
        actual_end = length if end is None else end
        generator = self.generator
        assert generator
        instances_positions, instances_rotations = sg.generate_cameras(
            sg.samples_generator_interval(length, actual_end, interval,
                                          default_noise_interval),
            generator,
            height,
        )
        sg.perturb_points(instances_positions, position_noise)
        sg.perturb_rotations(instances_rotations, rotation_noise)

        shots_ids_per_camera = []
        for rig_camera_p, rig_camera_r in zip(relative_positions,
                                              relative_rotations):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)

            rotations = []
            positions = []
            for instance_p, instance_r in zip(instances_positions,
                                              instances_rotations):
                pose_instance = pygeometry.Pose(instance_r)
                pose_instance.set_origin(instance_p)
                composed = pose_rig_camera.compose(pose_instance)
                rotations.append(composed.rotation)
                positions.append(composed.get_origin())

            shift = sum(len(s) for s in shots_ids_per_camera)
            shots_ids_per_camera.append(
                [f"Shot {shift+i:04d}" for i in range(len(positions))])
        self.cameras.append(cameras)
        self.shot_ids += shots_ids_per_camera

        rig_camera_ids = []
        rig_cameras = []
        rig_camera_id_shift = sum(len(s) for s in self.rig_cameras)
        for i, (rig_camera_p, rig_camera_r) in enumerate(
                zip(relative_positions, relative_rotations)):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)
            rig_camera_id = f"RigCamera {rig_camera_id_shift + i}"
            rig_camera = pymap.RigCamera(pose_rig_camera, rig_camera_id)
            rig_camera_ids.append(rig_camera_id)
            rig_cameras.append(rig_camera)
        self.rig_cameras.append(rig_cameras)

        rig_instances: List[List[Tuple[str, str]]] = []
        for i in range(len(instances_positions)):
            instance = []
            for j in range(len(shots_ids_per_camera)):
                instance.append(
                    (shots_ids_per_camera[j][i], rig_camera_ids[j]))
            rig_instances.append(instance)
        self.rig_instances.append(rig_instances)
        self.instances_positions.append(instances_positions)
        self.instances_rotations.append(instances_rotations)

        return self
Пример #8
0
    def add_rig_camera_sequence(
        self,
        cameras: List[pygeometry.Camera],
        relative_positions: List[List[float]],
        relative_rotations: List[List[float]],
        start: float,
        length: float,
        height: float,
        interval: float,
        position_noise: List[float],
        rotation_noise: float,
    ):
        default_noise_interval = 0.25 * interval

        instances_positions, instances_rotations = sg.generate_cameras(
            sg.samples_generator_interval(start, length, interval,
                                          default_noise_interval),
            self.generator,  # pyre-fixme [6]
            height,
        )
        sg.perturb_points(instances_positions, position_noise)
        sg.perturb_rotations(instances_rotations, rotation_noise)

        shots_ids_per_camera = []
        for rig_camera_p, rig_camera_r, camera in zip(relative_positions,
                                                      relative_rotations,
                                                      cameras):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)

            rotations = []
            positions = []
            for instance_p, instance_r in zip(instances_positions,
                                              instances_rotations):
                pose_instance = pygeometry.Pose(instance_r)
                pose_instance.set_origin(instance_p)
                composed = pose_rig_camera.compose(pose_instance)
                rotations.append(composed.rotation)
                positions.append(composed.get_origin())

            self.shot_rotations.append(np.array(rotations))
            self.shot_positions.append(np.array(positions))
            shift = sum(len(s) for s in shots_ids_per_camera)
            shots_ids_per_camera.append(
                [f"Shot {shift+i:04d}" for i in range(len(positions))])
            self.cameras.append(camera)
        self.shot_ids += shots_ids_per_camera

        rig_camera_ids = []
        rig_cameras = []
        rig_camera_id_shift = sum(len(s) for s in self.rig_cameras)
        for i, (rig_camera_p, rig_camera_r) in enumerate(
                zip(relative_positions, relative_rotations)):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)
            rig_camera_id = f"RigCamera {rig_camera_id_shift + i}"
            rig_camera = pymap.RigCamera(pose_rig_camera, rig_camera_id)
            rig_camera_ids.append(rig_camera_id)
            rig_cameras.append(rig_camera)
        self.rig_cameras.append(rig_cameras)

        rig_instances = []
        for i in range(len(instances_positions)):
            instance = []
            for j in range(len(shots_ids_per_camera)):
                instance.append(
                    (shots_ids_per_camera[j][i], rig_camera_ids[j]))
            rig_instances.append(instance)
        self.rig_instances.append(rig_instances)
        self.instances_positions.append(instances_positions)
        self.instances_rotations.append(instances_rotations)

        return self
Пример #9
0
    def add_rig_camera_sequence(
        self,
        cameras,
        relative_positions,
        relative_rotations,
        start,
        length,
        height,
        interval,
        position_noise=None,
        rotation_noise=None,
        gps_noise=None,
    ):
        default_noise_interval = 0.25 * interval

        instances_positions, instances_rotations = sg.generate_cameras(
            sg.samples_generator_interval(start, length, interval,
                                          default_noise_interval),
            self.generator,
            height,
        )
        sg.perturb_points(instances_positions, position_noise)
        sg.perturb_rotations(instances_rotations, rotation_noise)

        shots_ids_per_camera = []
        for rig_camera_p, rig_camera_r, camera in zip(relative_positions,
                                                      relative_rotations,
                                                      cameras):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)

            rotations = []
            positions = []
            for instance_p, instance_r in zip(instances_positions,
                                              instances_rotations):
                pose_instance = pygeometry.Pose(instance_r)
                pose_instance.set_origin(instance_p)
                composed = pose_rig_camera.compose(pose_instance)
                rotations.append(composed.rotation)
                positions.append(composed.get_origin())

            self.shot_rotations.append(rotations)
            self.shot_positions.append(positions)
            shift = sum(len(s) for s in shots_ids_per_camera)
            shots_ids_per_camera.append(
                [f"Shot {shift+i:04d}" for i in range(len(positions))])
            self.cameras.append(camera)
        self.shot_ids += shots_ids_per_camera

        rig_camera_ids = []
        rig_model = pymap.RigModel(f"RigModel {len(self.rig_models)}")
        for i, (rig_camera_p, rig_camera_r) in enumerate(
                zip(relative_positions, relative_rotations)):
            pose_rig_camera = pygeometry.Pose(rig_camera_r)
            pose_rig_camera.set_origin(rig_camera_p)
            rig_camera_id = f"RigCamera {i}"
            rig_camera = pymap.RigCamera(pose_rig_camera, rig_camera_id)
            rig_model.add_rig_camera(rig_camera)
            rig_camera_ids.append(rig_camera_id)
        self.rig_models.append(rig_model)

        rig_instances = []
        for i in range(len(instances_positions)):
            instance = []
            for j in range(len(shots_ids_per_camera)):
                instance.append(
                    (shots_ids_per_camera[j][i], rig_camera_ids[j]))
            rig_instances.append(instance)
        self.rig_instances.append(rig_instances)
        self.instances_positions.append(instances_positions)
        self.instances_rotations.append(instances_rotations)

        return self