| | import argparse |
| |
|
| | import imagesize |
| |
|
| | import numpy as np |
| |
|
| | import os |
| |
|
| |
|
| | base_path = "data/megadepth" |
| | |
| | if base_path[-1] in ["/", "\\"]: |
| | base_path = base_path[:-1] |
| |
|
| |
|
| | base_depth_path = os.path.join(base_path, "phoenix/S6/zl548/MegaDepth_v1") |
| | base_undistorted_sfm_path = os.path.join(base_path, "Undistorted_SfM") |
| |
|
| | scene_ids = os.listdir(base_undistorted_sfm_path) |
| | for scene_id in scene_ids: |
| | if os.path.exists( |
| | f"{base_path}/prep_scene_info/detections/detections_{scene_id}.npy" |
| | ): |
| | print(f"skipping {scene_id} as it exists") |
| | continue |
| | undistorted_sparse_path = os.path.join( |
| | base_undistorted_sfm_path, scene_id, "sparse-txt" |
| | ) |
| | if not os.path.exists(undistorted_sparse_path): |
| | print("sparse path doesnt exist") |
| | continue |
| |
|
| | depths_path = os.path.join(base_depth_path, scene_id, "dense0", "depths") |
| | if not os.path.exists(depths_path): |
| | print("depths doesnt exist") |
| |
|
| | continue |
| |
|
| | images_path = os.path.join(base_undistorted_sfm_path, scene_id, "images") |
| | if not os.path.exists(images_path): |
| | print("images path doesnt exist") |
| | continue |
| |
|
| | |
| | if not os.path.exists(os.path.join(undistorted_sparse_path, "cameras.txt")): |
| | print("no cameras") |
| | continue |
| | with open(os.path.join(undistorted_sparse_path, "cameras.txt"), "r") as f: |
| | raw = f.readlines()[3:] |
| |
|
| | camera_intrinsics = {} |
| | for camera in raw: |
| | camera = camera.split(" ") |
| | camera_intrinsics[int(camera[0])] = [float(elem) for elem in camera[2:]] |
| |
|
| | |
| | with open(os.path.join(undistorted_sparse_path, "points3D.txt"), "r") as f: |
| | raw = f.readlines()[3:] |
| |
|
| | points3D = {} |
| | for point3D in raw: |
| | point3D = point3D.split(" ") |
| | points3D[int(point3D[0])] = np.array( |
| | [float(point3D[1]), float(point3D[2]), float(point3D[3])] |
| | ) |
| |
|
| | |
| | with open(os.path.join(undistorted_sparse_path, "images.txt"), "r") as f: |
| | raw = f.readlines()[4:] |
| |
|
| | image_id_to_idx = {} |
| | image_names = [] |
| | raw_pose = [] |
| | camera = [] |
| | points3D_id_to_2D = [] |
| | n_points3D = [] |
| | id_to_detections = {} |
| | for idx, (image, points) in enumerate(zip(raw[::2], raw[1::2])): |
| | image = image.split(" ") |
| | points = points.split(" ") |
| |
|
| | image_id_to_idx[int(image[0])] = idx |
| |
|
| | image_name = image[-1].strip("\n") |
| | image_names.append(image_name) |
| |
|
| | raw_pose.append([float(elem) for elem in image[1:-2]]) |
| | camera.append(int(image[-2])) |
| | points_np = np.array(points).astype(np.float32).reshape(len(points) // 3, 3) |
| | visible_points = points_np[points_np[:, 2] != -1] |
| | id_to_detections[idx] = visible_points |
| | np.save( |
| | f"{base_path}/prep_scene_info/detections/detections_{scene_id}.npy", |
| | id_to_detections, |
| | ) |
| | print(f"{scene_id} done") |
| |
|