def run(config): print("refine rough registration of fragments.") o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Debug) ply_file_names = get_file_list( join(config["path_dataset"], config["folder_fragment"]), ".ply") make_posegraph_for_refined_scene(ply_file_names, config) optimize_posegraph_for_refined_scene(config["path_dataset"], config) path_dataset = config['path_dataset'] n_fragments = len(ply_file_names) # Save to trajectory poses = [] pose_graph_fragment = o3d.io.read_pose_graph( join(path_dataset, config["template_refined_posegraph_optimized"])) for fragment_id in range(len(pose_graph_fragment.nodes)): pose_graph_rgbd = o3d.io.read_pose_graph( join(path_dataset, config["template_fragment_posegraph_optimized"] % fragment_id)) for frame_id in range(len(pose_graph_rgbd.nodes)): frame_id_abs = fragment_id * \ config['n_frames_per_fragment'] + frame_id pose = np.dot(pose_graph_fragment.nodes[fragment_id].pose, pose_graph_rgbd.nodes[frame_id].pose) poses.append(pose) traj_name = join(path_dataset, config["template_global_traj"]) write_poses_to_log(traj_name, poses)
def run(config): print("refine rough registration of fragments.") o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Debug) ply_file_names = get_file_list( join(config["path_dataset"], config["folder_fragment"]), ".ply") make_posegraph_for_refined_scene(ply_file_names, config) optimize_posegraph_for_refined_scene(config["path_dataset"], config)
json_response = None try: json_response = raw_response.json() except Exception as e: print("file [%s] error: " % file_name, e) if (json_response["success"]): return json_response["result"] else: print("file [%s] failed, message: %s, request_id: %s: " % (file_name, json_response["message"]["global"], json_response["request_id"])) if __name__ == "__main__": executor = concurrent.futures.ThreadPoolExecutor(max_workers=50) file_list = file.get_file_list(data_dir) # list conprehension futures = {executor.submit(send_request, data_dir + "/" + file_name): file_name for file_name in file_list} for future in concurrent.futures.as_completed(futures): file_name = futures[future] try: data = future.result() except Exception as exc: print('%r generated an exception: %s' % (file_name, exc)) else: with open(file_name + ".feature", "w") as f: f.write(str(data["feature"])[1: -1]) f.close
def run(config): print("slac non-rigid optimisation.") o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Debug) path_dataset = config['path_dataset'] ply_file_names = get_file_list( join(config["path_dataset"], config["folder_fragment"]), ".ply") if (len(ply_file_names) == 0): raise RuntimeError( "No fragment found in {}, please make sure the reconstruction_system has finished running on the dataset." .format(join(config["path_dataset"], config["folder_fragment"]))) pose_graph_fragment = o3d.io.read_pose_graph( join(path_dataset, config["template_refined_posegraph_optimized"])) # SLAC optimizer parameters. slac_params = o3d.t.pipelines.slac.slac_optimizer_params( max_iterations=config["max_iterations"], voxel_size=config["voxel_size"], distance_threshold=config["distance_threshold"], fitness_threshold=config["fitness_threshold"], regularizer_weight=config["regularizer_weight"], device=o3d.core.Device(str(config["device"])), slac_folder=path_dataset + config["folder_slac"]) # SLAC debug option. debug_option = o3d.t.pipelines.slac.slac_debug_option(False, 0) # Run the system. pose_graph_updated = o3d.pipelines.registration.PoseGraph() # rigid optimization method. if (config["method"] == "rigid"): pose_graph_updated = o3d.t.pipelines.slac.run_rigid_optimizer_for_fragments( ply_file_names, pose_graph_fragment, slac_params, debug_option) elif (config["method"] == "slac"): pose_graph_updated, ctrl_grid = o3d.t.pipelines.slac.run_slac_optimizer_for_fragments( ply_file_names, pose_graph_fragment, slac_params, debug_option) hashmap = ctrl_grid.get_hashmap() active_buf_indices = hashmap.get_active_buf_indices().to( o3d.core.Dtype.Int64) key_tensor = hashmap.get_key_tensor()[active_buf_indices] key_tensor.save( join(slac_params.get_subfolder_name(), "ctr_grid_keys.npy")) value_tensor = hashmap.get_value_tensor()[active_buf_indices] value_tensor.save( join(slac_params.get_subfolder_name(), "ctr_grid_values.npy")) else: raise RuntimeError( "Requested optimization method {}, is not implemented. Implemented methods includes slac and rigid." .format(config["method"])) # Write updated pose graph. o3d.io.write_pose_graph( join(slac_params.get_subfolder_name(), config["template_optimized_posegraph_slac"]), pose_graph_updated) # Write trajectory for slac-integrate stage. fragment_folder = join(path_dataset, config["folder_fragment"]) params = [] for i in range(len(pose_graph_updated.nodes)): fragment_pose_graph = o3d.io.read_pose_graph( join(fragment_folder, "fragment_optimized_%03d.json" % i)) for node in fragment_pose_graph.nodes: pose = np.dot(pose_graph_updated.nodes[i].pose, node.pose) param = o3d.camera.PinholeCameraParameters() param.extrinsic = np.linalg.inv(pose) params.append(param) trajectory = o3d.camera.PinholeCameraTrajectory() trajectory.parameters = params o3d.io.write_pinhole_camera_trajectory( slac_params.get_subfolder_name() + "/optimized_trajectory_" + str(config["method"]) + ".log", trajectory)