Spaces:
Running
on
Zero
Running
on
Zero
| import os | |
| import json | |
| import math | |
| from concurrent.futures import ProcessPoolExecutor | |
| import threading | |
| from tqdm import tqdm | |
| # from glcontext import egl | |
| # egl.create_context() | |
| # exit(0) | |
| LOCAL_RANK = 0 | |
| num_processes = 4 | |
| NODE_RANK = int(os.getenv("SLURM_PROCID")) | |
| WORLD_SIZE = 1 | |
| NODE_NUM=1 | |
| # NODE_RANK = int(os.getenv("SLURM_NODEID")) | |
| IS_MAIN = False | |
| if NODE_RANK == 0 and LOCAL_RANK == 0: | |
| IS_MAIN = True | |
| GLOBAL_RANK = NODE_RANK * (WORLD_SIZE//NODE_NUM) + LOCAL_RANK | |
| # json_path = "object_lists/Thuman2.0.json" | |
| # json_path = "object_lists/THuman3.0.json" | |
| json_path = "object_lists/CustomHumans.json" | |
| data_dir = '/aifs4su/mmcode/lipeng' | |
| save_dir = '/aifs4su/mmcode/lipeng/human_8view_new' | |
| def parse_obj_list(x): | |
| if 'THuman3.0' in x: | |
| # print(apath) | |
| splits = x.split('/') | |
| x = os.path.join('THuman3.0', splits[-2]) | |
| elif 'Thuman2.0' in x: | |
| splits = x.split('/') | |
| x = os.path.join('Thuman2.0', splits[-2]) | |
| elif 'CustomHumans' in x: | |
| splits = x.split('/') | |
| x = os.path.join('CustomHumans', splits[-2]) | |
| # print(splits[-2]) | |
| elif '1M' in x: | |
| splits = x.split('/') | |
| x = os.path.join('2K2K', splits[-2]) | |
| elif 'realistic_8k_model' in x: | |
| splits = x.split('/') | |
| x = os.path.join('realistic_8k_model', splits[-1].split('.')[0]) | |
| return f'{save_dir}/{x}' | |
| with open(json_path, 'r') as f: | |
| glb_list = json.load(f) | |
| # glb_list = ['Thuman2.0/0011/0011.obj'] | |
| # glb_list = ['THuman3.0/00024_1/00024_0006/mesh.obj'] | |
| # glb_list = ['CustomHumans/mesh/0383_00070_02_00061/mesh-f00061.obj'] | |
| # glb_list = ['realistic_8k_model/1d41f2a72f994306b80e632f1cc8233f.glb'] | |
| total_num_glbs = len(glb_list) | |
| num_glbs_local = int(math.ceil(total_num_glbs / WORLD_SIZE)) | |
| start_idx = GLOBAL_RANK * num_glbs_local | |
| end_idx = start_idx + num_glbs_local | |
| # print(start_idx, end_idx) | |
| local_glbs = glb_list[start_idx:end_idx] | |
| if IS_MAIN: | |
| pbar = tqdm(total=len(local_glbs)) | |
| lock = threading.Lock() | |
| def process_human(glb_path): | |
| src_path = os.path.join(data_dir, glb_path) | |
| save_path = parse_obj_list(glb_path) | |
| # print(save_path) | |
| command = ('blender -b -P blender_render_human_script.py' | |
| f' -- --object_path {src_path}' | |
| f' --output_dir {save_path} ') | |
| # 1>/dev/null | |
| # print(command) | |
| os.system(command) | |
| if IS_MAIN: | |
| with lock: | |
| pbar.update(1) | |
| with ProcessPoolExecutor(max_workers=num_processes) as executor: | |
| executor.map(process_human, local_glbs) | |