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