def create_rigs_with_pattern(data: DataSet, patterns): """Create rig data (`rig_models.json` and `rig_assignments.json`) by performing pattern matching to group images belonging to the same instances, followed by a bit of ad-hoc SfM to find some initial relative poses. """ # Construct instances assignments for each rig instances_per_rig = create_instances_with_patterns(data.images(), patterns) for rig_id, instances in instances_per_rig.items(): logger.info( f"Found {len(instances)} rig instances for rig {rig_id} using pattern matching." ) # Create some subset DataSet with enough images from each rig subset_data = create_subset_dataset_from_instances(data, instances_per_rig, "rig_calibration") # # Run a bit of SfM without any rig logger.info( f"Running SfM on a subset of {len(subset_data.images())} images.") actions.extract_metadata.run_dataset(subset_data) actions.detect_features.run_dataset(subset_data) actions.match_features.run_dataset(subset_data) actions.create_tracks.run_dataset(subset_data) actions.reconstruct.run_dataset(subset_data) # Compute some relative poses rig_models = create_rig_models_from_reconstruction( subset_data.load_reconstruction()[0], instances_per_rig) data.save_rig_models(rig_models) data.save_rig_assignments(instances_per_rig)
def create_rigs_with_pattern(data: DataSet, patterns): """Create rig data (`rig_models.json` and `rig_assignments.json`) by performing pattern matching to group images belonging to the same instances, followed by a bit of ad-hoc SfM to find some initial relative poses. """ # Construct instances assignments for each rig instances_per_rig = create_instances_with_patterns(data.images(), patterns) for rig_id, instances in instances_per_rig.items(): logger.info( f"Found {len(instances)} rig instances for rig {rig_id} using pattern matching." ) # Create some subset DataSet with enough images from each rig subset_data = create_subset_dataset_from_instances(data, instances_per_rig, "rig_calibration") # # Run a bit of SfM without any rig logger.info( f"Running SfM on a subset of {len(subset_data.images())} images.") actions.extract_metadata.run_dataset(subset_data) actions.detect_features.run_dataset(subset_data) actions.match_features.run_dataset(subset_data) actions.create_tracks.run_dataset(subset_data) actions.reconstruct.run_dataset(subset_data) # Compute some relative poses rig_models_poses = create_rig_model_from_reconstruction( subset_data.load_reconstruction()[0], instances_per_rig) # Ad-hoc construction of output model data # Will be replaced by `io` counterpart models = {} for rig_id in patterns: rig_pattern = patterns[rig_id] model = rig_models_poses[rig_id] rig_model = {} for rig_camera_id in model: pose, camera_id = model[rig_camera_id] rig_model[rig_camera_id] = { "translation": list(pose.translation), "rotation": list(pose.rotation), "camera": camera_id, } models[rig_id] = { "rig_relative_type": "shared", "rig_cameras": rig_model, } data.save_rig_models(models) data.save_rig_assignments(instances_per_rig)