import os import json import argparse import time from tqdm import tqdm if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--input', type=str, default='assets/objects') parser.add_argument('--output', type=str, default='preprocessed_data') args = parser.parse_args() input_path = args.input output_path = args.output assert os.path.exists(input_path), f'{input_path} does not exist' if not os.path.exists(output_path): os.makedirs(output_path) for mesh_name in tqdm(os.listdir(input_path)): mesh_path = os.path.join(input_path, mesh_name) # 1. Sample points from mesh surface os.system(f"python datasets/preprocess/mesh_to_point.py --input {mesh_path} --output {output_path}") # 2. Render images os.system(f"python datasets/preprocess/render.py --input {mesh_path} --output {output_path}") # 3. Remove background for rendered images and resize to 90% export_mesh_folder = os.path.join(output_path, mesh_name.replace('.glb', '')) export_rendering_path = os.path.join(export_mesh_folder, 'rendering.png') os.system(f"python datasets/preprocess/rmbg.py --input {export_rendering_path} --output {output_path}") # 4. (Optional) Calculate IoU os.system(f"python datasets/preprocess/calculate_iou.py --input {mesh_path} --output {output_path}") time.sleep(1) # generate configs configs = [] for mesh_name in tqdm(os.listdir(input_path)): mesh_path = os.path.join(output_path, mesh_name.replace('.glb', '')) num_parts_path = os.path.join(mesh_path, 'num_parts.json') surface_path = os.path.join(mesh_path, 'points.npy') image_path = os.path.join(mesh_path, 'rendering_rmbg.png') iou_path = os.path.join(mesh_path, 'iou.json') config = { "file": mesh_name, "num_parts": 0, "valid": False, "mesh_path": os.path.join(input_path, mesh_name), "surface_path": None, "image_path": None, "iou_mean": 0.0, "iou_max": 0.0 } try: config["num_parts"] = json.load(open(num_parts_path))['num_parts'] iou_config = json.load(open(iou_path)) config['iou_mean'] = iou_config['iou_mean'] config['iou_max'] = iou_config['iou_max'] assert os.path.exists(surface_path) config['surface_path'] = surface_path assert os.path.exists(image_path) config['image_path'] = image_path config['valid'] = True configs.append(config) except: continue configs_path = os.path.join(output_path, 'object_part_configs.json') json.dump(configs, open(configs_path, 'w'), indent=4)