|
13 | 13 | g_label_names = scannet_utils.g_label_names
|
14 | 14 | g_label_ids = scannet_utils.g_label_ids
|
15 | 15 |
|
16 |
| -SCANNET_DIR = None # '/tmp3/hychiang/ScanNet.v2/ScanNet/scans/' |
17 |
| -SCENE_NAMES = None # [line.rstrip() for line in open('./Benchmark/scannetv2_train.txt')] |
18 |
| -LABEL_MAP_FILE = None # './scannetv2-labels.combined.tsv' |
19 |
| -OUTPUT_FOLDER = None # 'scans_train' |
20 |
| -LOG_FILE = 'log.txt' |
21 |
| -LOG_FOUT = None |
| 16 | +''' |
| 17 | + params |
| 18 | +''' |
| 19 | +parser = argparse.ArgumentParser() |
| 20 | +parser.add_argument('--scannet_path', required=True, help='path to scannet data') |
| 21 | +parser.add_argument('--label_map_file', default='', help='path to scannetv2-labels.combined.tsv (required for label export only)') |
| 22 | +parser.add_argument("--num_proc", required=False, type=int, default=30, help="number of parallel process, default is 30") |
| 23 | +opt = parser.parse_args() |
22 | 24 |
|
23 |
| -def collect_one_scene_data_label(scene_name, out_filename): |
| 25 | + |
| 26 | +def collect_point_data(scene_name): |
24 | 27 | # read label mapping file
|
25 |
| - label_map = scannet_utils.read_label_mapping(LABEL_MAP_FILE, label_from='raw_category', label_to='nyu40id') |
| 28 | + label_map = scannet_utils.read_label_mapping(opt.label_map_file, label_from='raw_category', label_to='nyu40id') |
26 | 29 |
|
27 | 30 | # Over-segmented segments: maps from segment to vertex/point IDs
|
28 |
| - data_folder = os.path.join(SCANNET_DIR, scene_name) |
| 31 | + data_folder = os.path.join(opt.scannet_path, scene_name) |
29 | 32 | # Read segmentation label
|
30 | 33 | seg_filename = os.path.join(data_folder, '%s_vh_clean_2.0.010000.segs.json'%(scene_name))
|
31 | 34 | seg_to_verts, num_verts = scannet_utils.read_segmentation(seg_filename)
|
@@ -69,55 +72,29 @@ def collect_one_scene_data_label(scene_name, out_filename):
|
69 | 72 | #print(data.shape)
|
70 | 73 | #for i in range(20):
|
71 | 74 | # print(data[i, 10])
|
| 75 | + out_filename = os.path.join(data_folder, scene_name+'.npy') # scene0000_00/scene0000_00.npy |
72 | 76 | np.save(out_filename, data)
|
73 |
| - log_string(scene_name+' save to '+out_filename+', with data: point:'+str(points.shape)+', label:'+str(label_ids.shape)+', instance label:'+str(instance_ids.shape)+', data:'+str(data.shape)) |
74 | 77 |
|
75 |
| -def log_string(out_str): |
76 |
| - LOG_FOUT.write(out_str+'\n') |
77 |
| - LOG_FOUT.flush() |
78 |
| - print(out_str) |
| 78 | + print(scene_name, ' points shape:', data.shape) |
| 79 | + |
79 | 80 |
|
80 | 81 | def preprocess_scenes(scene_name):
|
81 |
| - log_string(scene_name) |
82 | 82 | try:
|
83 |
| - out_dir = os.path.join(OUTPUT_FOLDER, scene_name) # scene0000_00/scene0000_00.npy |
84 |
| - if not os.path.exists(out_dir): |
85 |
| - os.mkdir(out_dir) |
86 |
| - out_file = os.path.join(out_dir, scene_name+'.npy') # scene0000_00/scene0000_00.npy |
87 |
| - collect_one_scene_data_label(scene_name, out_file) |
| 83 | + collect_point_data(scene_name) |
88 | 84 | except Exception as e:
|
89 |
| - log_string(scene_name+'ERROR!!') |
90 |
| - log_string(str(e)) |
| 85 | + sys.stderr.write(scene_name+'ERROR!!') |
| 86 | + sys.stderr.write(str(e)) |
| 87 | + sys.exit(-1) |
91 | 88 |
|
92 |
| -if __name__=='__main__': |
93 |
| - parser = argparse.ArgumentParser() |
94 |
| - parser.add_argument("--scene_list", required=True, help="scannet split scene list, e.g. ./Benchmark/scannetv2_train.txt") |
95 |
| - parser.add_argument("--label_map_file", required=True, help="scannet label mapping file , e.g. ./scannetv2-labels.combined.tsv") |
96 |
| - parser.add_argument("--scannet_dir",required=True, help="scannet data dir, e.g. {path/to/scannet/data/dir}/scans or {path/to/scannet/data/dir}/scans_test") |
97 |
| - parser.add_argument("--output_dir", required=True, help="output dir (folder), e.g. ./scans_train") |
98 |
| - parser.add_argument("--num_proc", required=False, type=int, default=30, help="number of parallel process, default is 30") |
99 |
| - args = parser.parse_args() |
100 |
| - LABEL_MAP_FILE = args.label_map_file |
101 |
| - SCENE_NAMES = [line.rstrip() for line in open(args.scene_list)] |
102 |
| - SCANNET_DIR = args.scannet_dir |
103 |
| - OUTPUT_FOLDER = args.output_dir |
104 |
| - |
105 |
| - print('*** Total Scene in list: ', len(SCENE_NAMES)) |
106 |
| - print('*** Read Label Mapping File from: ', LABEL_MAP_FILE) |
107 |
| - print('*** ScanNet Data Directory: ', SCANNET_DIR) |
108 |
| - print('*** Output Directory: ', OUTPUT_FOLDER) |
109 |
| - print('*** NUM of Processes to parallel: ', args.num_proc) |
110 |
| - print('*** Extract points (Vertex XYZ, RGB, NxNyNx, Label, Instance-label) parallel in 5 Seconds***') |
111 |
| - |
112 |
| - if not os.path.exists(OUTPUT_FOLDER): |
113 |
| - os.mkdir(OUTPUT_FOLDER) |
114 |
| - LOG_FOUT = open(os.path.join(OUTPUT_FOLDER, LOG_FILE),'w') |
115 |
| - time.sleep(5) |
116 |
| - |
117 |
| - print('*** GO ***') |
118 | 89 |
|
| 90 | +def main(): |
| 91 | + scenes = [d for d in os.listdir(opt.scannet_path) if os.path.isdir(os.path.join(opt.scannet_path, d))] |
| 92 | + scenes.sort() |
| 93 | + print('Find %d scenes' % len(scenes)) |
| 94 | + print('Extract points (Vertex XYZ, RGB, NxNyNx, Label, Instance-label)') |
119 | 95 |
|
120 |
| - pool = mp.Pool(args.num_proc) |
121 |
| - pool.map(preprocess_scenes, SCENE_NAMES) |
| 96 | + pool = mp.Pool(opt.num_proc) |
| 97 | + pool.map(preprocess_scenes, scenes) |
122 | 98 |
|
123 |
| - LOG_FOUT.close() |
| 99 | +if __name__=='__main__': |
| 100 | + main() |
0 commit comments