ziqima's picture
initial commit
4893ce0
import os
import argparse
import glob
import multiprocessing as mp
from concurrent.futures import ProcessPoolExecutor
from itertools import repeat
from reader import reader
from point_cloud_extractor import extractor
from compute_full_overlapping import compute_full_overlapping
frame_skip = 25
def parse_sens(sens_dir, output_dir):
scene_id = os.path.basename(os.path.dirname(sens_dir))
print(f"Parsing sens data{sens_dir}")
reader(
sens_dir,
os.path.join(output_dir, scene_id),
frame_skip,
export_color_images=True,
export_depth_images=True,
export_poses=True,
export_intrinsics=True,
)
extractor(
os.path.join(output_dir, scene_id), os.path.join(output_dir, scene_id, "pcd")
)
compute_full_overlapping(output_dir, scene_id)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--dataset_root",
required=True,
help="Path to the ScanNet dataset containing scene folders",
)
parser.add_argument(
"--output_root",
required=True,
help="Output path where train/val folders will be located",
)
opt = parser.parse_args()
sens_list = sorted(glob.glob(os.path.join(opt.dataset_root, "scans/scene*/*.sens")))
# Preprocess data.
pool = ProcessPoolExecutor(max_workers=mp.cpu_count())
# pool = ProcessPoolExecutor(max_workers=1)
print("Processing scenes...")
_ = list(pool.map(parse_sens, sens_list, repeat(opt.output_root)))