import os import glob from re import split from tqdm import tqdm from multiprocessing import Pool from functools import partial scannet_dir = "/root/data/ScanNet-v2-1.0.0/data/raw" dump_dir = "/root/data/scannet_dump" num_process = 32 def extract(seq, scannet_dir, split, dump_dir): assert split == "train" or split == "test" if not os.path.exists(os.path.join(dump_dir, split, seq)): os.mkdir(os.path.join(dump_dir, split, seq)) cmd = ( "python reader.py --filename " + os.path.join( scannet_dir, "scans" if split == "train" else "scans_test", seq, seq + ".sens", ) + " --output_path " + os.path.join(dump_dir, split, seq) + " --export_depth_images --export_color_images --export_poses --export_intrinsics" ) os.system(cmd) if __name__ == "__main__": if not os.path.exists(dump_dir): os.mkdir(dump_dir) os.mkdir(os.path.join(dump_dir, "train")) os.mkdir(os.path.join(dump_dir, "test")) train_seq_list = [ seq.split("/")[-1] for seq in glob.glob(os.path.join(scannet_dir, "scans", "scene*")) ] test_seq_list = [ seq.split("/")[-1] for seq in glob.glob(os.path.join(scannet_dir, "scans_test", "scene*")) ] extract_train = partial( extract, scannet_dir=scannet_dir, split="train", dump_dir=dump_dir ) extract_test = partial( extract, scannet_dir=scannet_dir, split="test", dump_dir=dump_dir ) num_train_iter = ( len(train_seq_list) // num_process if len(train_seq_list) % num_process == 0 else len(train_seq_list) // num_process + 1 ) num_test_iter = ( len(test_seq_list) // num_process if len(test_seq_list) % num_process == 0 else len(test_seq_list) // num_process + 1 ) pool = Pool(num_process) for index in tqdm(range(num_train_iter)): seq_list = train_seq_list[ index * num_process : min((index + 1) * num_process, len(train_seq_list)) ] pool.map(extract_train, seq_list) pool.close() pool.join() pool = Pool(num_process) for index in tqdm(range(num_test_iter)): seq_list = test_seq_list[ index * num_process : min((index + 1) * num_process, len(test_seq_list)) ] pool.map(extract_test, seq_list) pool.close() pool.join()