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
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, )
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
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
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
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
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
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
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