def generate_camera_trajectory_random_walk()

in code/python/lib/random_walk_utils.py [0:0]


def generate_camera_trajectory_random_walk(
    mesh_vertices,
    mesh_faces_vi,
    octomap_file,
    octomap_free_space_min,
    octomap_free_space_max,
    start_camera_position,
    start_camera_orientation,
    n_width_pixels,
    n_height_pixels,
    n_fov_x,
    n_samples_random_walk,
    n_samples_octomap_query,
    n_samples_camera_pose_candidates,
    n_voxel_size,
    n_query_half_extent_relative_to_current,
    n_query_half_extent_relative_to_start,
    tmp_dir):

    if not os.path.exists(tmp_dir): os.makedirs(tmp_dir)

    tmp_mesh_vertices_hdf5_file                           = os.path.join(tmp_dir, "_tmp_mesh_vertices.hdf5")
    tmp_mesh_faces_vi_hdf5_file                           = os.path.join(tmp_dir, "_tmp_mesh_faces_vi.hdf5")
    tmp_octomap_free_space_min_hdf5_file                  = os.path.join(tmp_dir, "_tmp_octomap_free_space_min.hdf5")
    tmp_octomap_free_space_max_hdf5_file                  = os.path.join(tmp_dir, "_tmp_octomap_free_space_max.hdf5")
    tmp_start_camera_position_hdf5_file                   = os.path.join(tmp_dir, "_tmp_start_camera_position.hdf5")
    tmp_start_camera_orientation_hdf5_file                = os.path.join(tmp_dir, "_tmp_start_camera_orientation.hdf5")
    tmp_camera_rays_hdf5_file                             = os.path.join(tmp_dir, "_tmp_camera_rays.hdf5")
    tmp_camera_rays_distances_to_center_hdf5_file         = os.path.join(tmp_dir, "_tmp_camera_rays_distances_to_center.hdf5")
    tmp_n_query_half_extent_relative_to_start_hdf5_file   = os.path.join(tmp_dir, "_tmp_n_query_half_extent_relative_to_start.hdf5")
    tmp_n_query_half_extent_relative_to_current_hdf5_file = os.path.join(tmp_dir, "_tmp_n_query_half_extent_relative_to_current.hdf5")
    tmp_output_camera_look_from_positions_hdf5_file       = os.path.join(tmp_dir, "_tmp_output_camera_look_from_positions.hdf5")
    tmp_output_camera_look_at_positions_hdf5_file         = os.path.join(tmp_dir, "_tmp_output_camera_look_at_positions.hdf5")
    tmp_output_camera_orientations_hdf5_file              = os.path.join(tmp_dir, "_tmp_output_camera_orientations.hdf5")
    tmp_output_intersection_distances_hdf5_file           = os.path.join(tmp_dir, "_tmp_output_intersection_distances.hdf5")
    tmp_output_prim_ids_hdf5_file                         = os.path.join(tmp_dir, "_tmp_output_prim_ids.hdf5")

    fov_y = 2.0 * arctan(n_height_pixels * tan(n_fov_x/2) / n_width_pixels)

    uv_min  = -1.0
    uv_max  = 1.0
    half_du = 0.5 * (uv_max - uv_min) / n_width_pixels
    half_dv = 0.5 * (uv_max - uv_min) / n_height_pixels

    u, v = meshgrid(linspace(uv_min+half_du, uv_max-half_du, n_width_pixels),
                    linspace(uv_min+half_dv, uv_max-half_dv, n_height_pixels)[::-1])

    ray_offset_x = u*tan(n_fov_x/2.0)
    ray_offset_y = v*tan(fov_y/2.0)
    ray_offset_z = -ones_like(ray_offset_x)

    rays_cam = dstack((ray_offset_x,ray_offset_y,ray_offset_z))
    V_cam    = matrix(rays_cam.reshape(-1,3)).T

    half_dx = 0.5
    half_dy = 0.5
    pixel_center = array([(n_width_pixels+1)/2.0, (n_height_pixels+1)/2.0])
    pixel_x, pixel_y = meshgrid(linspace(half_dx, n_width_pixels+half_dx,  n_width_pixels),
                                linspace(half_dy, n_height_pixels+half_dy, n_height_pixels))

    pixels                     = dstack((pixel_x,pixel_y)).reshape(-1,2)
    center_to_pixels           = pixels - pixel_center
    center_to_pixels_distances = linalg.norm(center_to_pixels, axis=1)

    with h5py.File(tmp_mesh_vertices_hdf5_file,                           "w") as f: f.create_dataset("dataset", data=mesh_vertices)
    with h5py.File(tmp_mesh_faces_vi_hdf5_file,                           "w") as f: f.create_dataset("dataset", data=mesh_faces_vi)
    with h5py.File(tmp_octomap_free_space_min_hdf5_file,                  "w") as f: f.create_dataset("dataset", data=octomap_free_space_min)
    with h5py.File(tmp_octomap_free_space_max_hdf5_file,                  "w") as f: f.create_dataset("dataset", data=octomap_free_space_max)
    with h5py.File(tmp_start_camera_position_hdf5_file,                   "w") as f: f.create_dataset("dataset", data=start_camera_position)
    with h5py.File(tmp_start_camera_orientation_hdf5_file,                "w") as f: f.create_dataset("dataset", data=start_camera_orientation)
    with h5py.File(tmp_camera_rays_hdf5_file,                             "w") as f: f.create_dataset("dataset", data=V_cam.T)
    with h5py.File(tmp_camera_rays_distances_to_center_hdf5_file,         "w") as f: f.create_dataset("dataset", data=center_to_pixels_distances)
    with h5py.File(tmp_n_query_half_extent_relative_to_start_hdf5_file,   "w") as f: f.create_dataset("dataset", data=n_query_half_extent_relative_to_start)
    with h5py.File(tmp_n_query_half_extent_relative_to_current_hdf5_file, "w") as f: f.create_dataset("dataset", data=n_query_half_extent_relative_to_current)

    current_source_path                        = path_utils.get_current_source_file_path(frame=inspect.currentframe())
    generate_camera_trajectory_random_walk_bin = os.path.abspath(os.path.join(current_source_path, "..", "..", "cpp", "bin", "generate_camera_trajectory_random_walk"))

    cmd = \
        generate_camera_trajectory_random_walk_bin + \
        " --mesh_vertices_file="                           + tmp_mesh_vertices_hdf5_file                           + \
        " --mesh_faces_vi_file="                           + tmp_mesh_faces_vi_hdf5_file                           + \
        " --start_camera_position_file="                   + tmp_start_camera_position_hdf5_file                   + \
        " --start_camera_orientation_file="                + tmp_start_camera_orientation_hdf5_file                + \
        " --camera_rays_file="                             + tmp_camera_rays_hdf5_file                             + \
        " --camera_rays_distances_to_center_file="         + tmp_camera_rays_distances_to_center_hdf5_file         + \
        " --octomap_file="                                 + octomap_file                                          + \
        " --octomap_free_space_min_file="                  + tmp_octomap_free_space_min_hdf5_file                  + \
        " --octomap_free_space_max_file="                  + tmp_octomap_free_space_max_hdf5_file                  + \
        " --n_samples_random_walk="                        + str(n_samples_random_walk)                            + \
        " --n_samples_octomap_query="                      + str(n_samples_octomap_query)                          + \
        " --n_samples_camera_pose_candidates="             + str(n_samples_camera_pose_candidates)                 + \
        " --n_voxel_size="                                 + str(n_voxel_size)                                     + \
        " --n_query_half_extent_relative_to_start_file="   + tmp_n_query_half_extent_relative_to_start_hdf5_file   + \
        " --n_query_half_extent_relative_to_current_file=" + tmp_n_query_half_extent_relative_to_current_hdf5_file + \
        " --output_camera_look_from_positions_file="       + tmp_output_camera_look_from_positions_hdf5_file       + \
        " --output_camera_look_at_positions_file="         + tmp_output_camera_look_at_positions_hdf5_file         + \
        " --output_camera_orientations_file="              + tmp_output_camera_orientations_hdf5_file              + \
        " --output_intersection_distances_file="           + tmp_output_intersection_distances_hdf5_file           + \
        " --output_prim_ids_file="                         + tmp_output_prim_ids_hdf5_file
        # " --silent"
    print("")
    print(cmd)
    print("")
    retval = os.system(cmd)
    assert retval == 0 or retval == 256

    if retval == 256:
        print("[HYPERSIM: GENERATE_CAMERA_TRAJECTORY_RANDOM_WALK] WARNING: generate_camera_trajectory_random_walk DID NOT EXECUTE SUCCESSFULLY. GIVING UP.")
        return None, None, None, None, None

    with h5py.File(tmp_output_camera_look_from_positions_hdf5_file, "r") as f: camera_look_from_positions = f["dataset"][:]
    with h5py.File(tmp_output_camera_look_at_positions_hdf5_file,   "r") as f: camera_look_at_positions   = f["dataset"][:]
    with h5py.File(tmp_output_camera_orientations_hdf5_file,        "r") as f: camera_orientations        = f["dataset"][:]
    with h5py.File(tmp_output_intersection_distances_hdf5_file,     "r") as f: intersection_distances     = f["dataset"][:]
    with h5py.File(tmp_output_prim_ids_hdf5_file,                   "r") as f: prim_ids                   = f["dataset"][:]

    intersection_distances = intersection_distances.reshape(-1,n_height_pixels,n_width_pixels)
    prim_ids               = prim_ids.reshape(-1,n_height_pixels,n_width_pixels)

    for j in range(n_samples_random_walk):
        camera_orientations[j] = matrix(camera_orientations[j]).T.A

    return camera_look_from_positions, camera_look_at_positions, camera_orientations, intersection_distances, prim_ids