diff --git a/main.py b/main.py index 421af8466c169ee345cd60ad293bed629c890a95..1798bc5b55accc7a04fbca13bae03988508aa66d 100644 --- a/main.py +++ b/main.py @@ -6,18 +6,20 @@ from prepare_data import reform_data #from bbox_2d import generate_2d_bbox #from instance_mask import generate_instance_mask from fps_alg import apply_fps -from bbox_3d import generate_3d_bbox +from bbox_3d import get_3D_bbox from compute_features import process_compute +from utils import compute_categories_id, compute_id_good_occ import shutil import open3d as o3d # Import the library import argparse +from scipy.spatial import distance def generate_folders(name, list_categories): is_exist = os.path.exists(name) if not is_exist: os.mkdir(name) - folders = ["RGB", "RGB_Gen", "RGB_resized", "Meta_Gen", "Depth", "Mask", "Meta", "Pose", "Bbox_2d", "Bbox_2d_loose", "Instance_Segmentation", "Semantic_Segmentation", "Instance_Mask", "Instance_Mask_resized", "Occlusion", "Models", "Pose_transformed", "Bbox", "FPS", "FPS_resized"] + folders = ["RGB", "RGB_Gen", "RGB_resized", "Meta_Gen", "Depth", "Mask", "Meta", "Pose", "Bbox_2d", "Bbox_2d_loose", "Bbox_3d", "Instance_Segmentation", "Semantic_Segmentation", "Instance_Mask", "Instance_Mask_resized", "Occlusion", "Models", "Pose_transformed", "Bbox", "FPS", "FPS_resized"] for f in folders: is_exist = os.path.exists(f"{name}/{f}") if not is_exist: @@ -29,6 +31,22 @@ def generate_folders(name, list_categories): if not is_exist2: os.makedirs(f"{name}/Generated/{cat}/{f}") + +def calc_pts_diameter2(pts): + """Calculates the diameter of a set of 3D points (i.e. the maximum distance + between any two points in the set). Faster but requires more memory than + calc_pts_diameter. + :param pts: nx3 ndarray with 3D points. + :return: The calculated diameter. + """ + dists = distance.cdist(pts, pts, 'euclidean') + diameter = np.max(dists) + return diameter + + + + + if __name__ == '__main__': # Create the parser @@ -58,22 +76,10 @@ if __name__ == '__main__': #Nb_world = 2 generate_folders(dataset_name, list_categories) - for cat in list_categories: - src_bbox = f"Models/{cat}/{cat.lower()}.ply" - dst_bbox = f"{dataset_name}/Generated/{cat}/{cat.lower()}.ply" - shutil.copy(src_bbox, dst_bbox) - - for categories in list_categories: - point_cloud = f'{dataset_name}/Generated/{categories}/{categories.lower()}.ply' - pcd = o3d.io.read_point_cloud(point_cloud) - - #print("pcd", pcd) - - fps_points = apply_fps(pcd, 8) - #print(fps_points) - np.savetxt(f'{dataset_name}/Generated/{categories}/{categories}_fps_3d.txt', fps_points) - - + # for cat in list_categories: + # src_bbox = f"Models/{cat}/{cat.lower()}.ply" + # dst_bbox = f"{dataset_name}/Generated/{cat}/{cat.lower()}.ply" + # shutil.copy(src_bbox, dst_bbox) @@ -98,6 +104,45 @@ if __name__ == '__main__': reform_data(dataset_src, dataset_name, dataset_type, Nb_camera, args.World_begin, args.Nb_worlds) + + for categories in list_categories: + point_cloud = f"Models/{categories}/{categories.lower()}.ply" + pcd = o3d.io.read_point_cloud(point_cloud) + + #print("pcd", pcd) + + fps_points = apply_fps(pcd, 8) + #print(fps_points) + np.savetxt(f'{dataset_name}/Generated/{categories}/{categories}_fps_3d.txt', fps_points) + + #point_cloud = f'/home/mahmoud/PycharmProjects/data/GUIMOD_low/Models/{obj}/{obj.lower()}.ply' + #pcd = o3d.io.read_point_cloud(point_cloud) + point_cloud_in_numpy = np.asarray(pcd.points) + dim = calc_pts_diameter2(point_cloud_in_numpy) * 100 + + print(dim) + + np.savetxt(f'{dataset_name}/Generated/{categories}/{categories}_diameter.txt', np.array([dim])) + + + # catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, catergories_label_to_id = compute_categories_id(dataset_name, 1) + # print(f'{dataset_name}/Bbox_3d/1.json') + # with open(f"{dataset_name}/Bbox_3d/1.json", 'r') as f: + # data_Bbox_3d = json.load(f) + + # catergories_occ_array = compute_id_good_occ(dataset_name, 1, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, 1) + + # print(catergories_occ_array) + # for k in range(len(data_Bbox_3d)): + + # if data_Bbox_3d[k]['id'] in catergories_occ_array[categories]: + # size_bb = data_Bbox_3d[k]["size"] + # ext = [x / 2 for x in size_bb] + # bbox = get_3D_bbox(ext) + # np.savetxt(f'{dataset_name}/Generated/{categories}/{categories}_bbox_3d.txt', bbox) # save + # break + + process_compute(dataset_name, camera, new_camera, new_size, Nb_camera, args.World_begin, args.Nb_worlds, list_categories, occ_target, True) #transform_pose(dataset_name, Nb_camera, Nb_world, list_categories, occ_target) #generate_2d_bbox(dataset_name, Nb_camera, Nb_world, list_categories, occ_target)