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