diff --git a/read_count.py b/read_count.py new file mode 100644 index 0000000000000000000000000000000000000000..11eca90f9c9bdc448257403edbfc333ace3871c9 --- /dev/null +++ b/read_count.py @@ -0,0 +1,310 @@ +import os +import numpy as np +from prepare_data import reform_data +from fps_alg import apply_fps +from bbox_3d import get_3D_bbox +from compute_features import process_compute +import open3d as o3d +from scipy.spatial import distance +import argparse +import json +import pandas as pd +import altair as alt + + +def generate_folders(name, list_categories, scenario): + 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", "Bbox_3d", "Bbox_3d_Gen", "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: + if f not in ["RGB_Gen", "RGB_resized", "Instance_Mask", "Instance_Mask_resized", "Meta_Gen", "Models", "Pose_transformed", "Bbox", "Bbox_3d_Gen", "FPS" , "FPS_resized"]: + os.mkdir(f"{name}/{f}") + else: + for cat in list_categories: + is_exist2 = os.path.exists(f"{name}/Generated/{cat}") + if not is_exist2: + os.makedirs(f"{name}/Generated/{cat}") + is_exist2 = os.path.exists(f"{name}/Generated/{cat}/Pose_transformed") + if not is_exist2: + os.makedirs(f"{name}/Generated/{cat}/Pose_transformed") + for scenario in ["Worlds", "Cameras", "Mix_all"] : + is_exist2 = os.path.exists(f"{name}/Generated_{scenario}_Training/{cat}/{f}") + if not is_exist2: + os.makedirs(f"{name}/Generated_{scenario}_Training/{cat}/{f}") + is_exist2 = os.path.exists(f"{name}/Generated_{scenario}_Evaluating/{cat}/{f}") + if not is_exist2: + os.makedirs(f"{name}/Generated_{scenario}_Evaluating/{cat}/{f}") + is_exist2 = os.path.exists(f"{name}/Generated_{scenario}_Testing/{cat}/{f}") + if not is_exist2: + os.makedirs(f"{name}/Generated_{scenario}_Testing/{cat}/{f}") + is_exist2 = os.path.exists(f"{name}/Generated_{scenario}_dont_save/{cat}/{f}") + if not is_exist2: + os.makedirs(f"{name}/Generated_{scenario}_dont_save/{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 + + +def prep_df(df, name): + df = df.stack().reset_index() + df.columns = ['c1', 'c2', 'values'] + df['DF'] = name + return df + + + +if __name__ == '__main__': + # Create the parser + parser = argparse.ArgumentParser() + # Parse the argument + args = parser.parse_args() + + scenario = "Worlds" + + ### parameters ### + Categories = [] # to read + Nb_instance = 1 + occ_target = 0.5 + + dataset_src = "/gpfsscratch/rech/uli/ubn15wo/dataset/s2rg/Fruits_all_medium/data/" + #dataset_src = "/media/mahmoud/E/Fruits_easy/data" + #dataset_src = "/media/gduret/DATA/dataset/s2rg/Fruits_all_medium/data" + + choice = "low" # depth of rgb resolution datas + data_options = {"high": "ground_truth_rgb", + "low": "ground_truth_depth"} + dataset_type = data_options[choice] + dataset_name = f"/gpfsscratch/rech/uli/ubn15wo/dataset/s2rg/Fruits_all_medium/GUIMOD_{choice}" + list_categories = [ "apple2" , "apricot", "banana1", "kiwi1", "lemon2", "orange2", "peach1", "pear2"] + #list_Nb_instance = [ "apple2" , "apricot", "banana1", "kiwi1", "lemon2", "orange2", "peach1", "pear2"] + + + path_json = "Count_150000.json" + + if os.path.isfile(path_json): + with open(path_json) as f: + list_count_categories = json.load(f) + + scenarios = ["Worlds", "Cameras", "Mix_all"] + + destination_folders_list = {} + for scenario_loop in scenarios: + destination_folders_list[scenario_loop] = [f"Generated_{scenario_loop}_Testing", f"Generated_{scenario_loop}_Evaluating", f"Generated_{scenario_loop}_Training", f"Generated_{scenario_loop}_dont_save" ] + + + print(list_count_categories) + + stat_cat = {} + + worlds_train=[] + worlds_eval=[] + worlds_test=[] + cameras_train=[] + cameras_eval=[] + cameras_test=[] + mix_train=[] + mix_eval=[] + mix_test=[] + + array_apple=[] + array_apricot=[] + array_banana=[] + array_kiwi=[] + array_lemon=[] + array_orange=[] + array_peach=[] + array_pear=[] + + stat_cat_inst = {} + + for scenario_loop in scenarios : + stat_cat_inst[scenario_loop] = {} + for cat in list_categories : + stat_cat_inst[scenario_loop][cat] = {} + + + for cat in list_categories : + stat_cat[cat] = {} + for scenario_loop in scenarios : + stat_cat[cat][scenario_loop] = {} + + for destination_folder_loop in destination_folders_list[scenario_loop] : # [f"Generated_{scenario}_Testing", f"Generated_{scenario}_Evaluating", f"Generated_{scenario}_Training"] : + #print("scenario_loop : " , scenario_loop) + #print("destination_folder_loop : " , destination_folder_loop) + #print("cat : " , cat) + #print("list_count_categories[scenario_loop][destination_folder_loop][cat][1_instances] : " , list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + #print(list_count_categories[scenario_loop][destination_folder_loop]) + + if destination_folder_loop == "Generated_Worlds_Testing" : + print("\nGenerated_Wolrds_Testing1") + worlds_test.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Cameras_Testing" : + print("\nGenerated_Wolrds_Testing2") + cameras_test.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Mix_all_Testing" : + print("\nGenerated_Wolrds_Testing3") + mix_test.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Worlds_Evaluating" : + print("\nGenerated_Wolrds_Testing4") + worlds_eval.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Cameras_Evaluating" : + print("\nGenerated_Wolrds_Testing5") + cameras_eval.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Mix_all_Evaluating" : + print("\nGenerated_Wolrds_Testing6") + mix_eval.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Worlds_Training" : + print("\nGenerated_Wolrds_Testing7") + worlds_train.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Cameras_Training" : + print("\nGenerated_Wolrds_Testing8") + cameras_train.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + if destination_folder_loop == "Generated_Mix_all_Training" : + print("\nGenerated_Wolrds_Testing9") + mix_train.append(list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"]) + + + if cat in list_count_categories[scenario_loop][destination_folder_loop].keys() : + stat_cat[cat][scenario_loop][destination_folder_loop] = list_count_categories[scenario_loop][destination_folder_loop][cat]["1_instances"] + #print(list_count_categories[scenario_loop][destination_folder_loop].keys()) + if cat in list_count_categories[scenario_loop][destination_folder_loop].keys() : # because dont save empty for world and camera scenario + for nb_inst in list_count_categories[scenario_loop][destination_folder_loop][cat].keys() : + if nb_inst in stat_cat_inst[scenario_loop][cat].keys() : + stat_cat_inst[scenario_loop][cat][nb_inst] = stat_cat_inst[scenario_loop][cat][nb_inst] + list_count_categories[scenario_loop][destination_folder_loop][cat][nb_inst] + else: + stat_cat_inst[scenario_loop][cat][nb_inst] = list_count_categories[scenario_loop][destination_folder_loop][cat][nb_inst] + #print(stat_cat) + + print(stat_cat_inst) + + print(worlds_train) + print(worlds_eval) + print(worlds_test) + print(cameras_train) + print(cameras_eval) + print(cameras_test) + print(mix_train) + print(mix_eval) + print(mix_test) + + + # for scenario_loop in scenarios : + # for cat in list_categories : + # for destination_folder_loop in destination_folders_list[scenario_loop] : + + # stat_cat_inst[scenario_loop][cat][nb_inst] + + + df1_train=pd.DataFrame(np.resize(np.concatenate((np.array(worlds_train), np.array(cameras_train), np.array(mix_train)) ), (3,8)),index=["World", "Cameras", "All"],columns=[ "apple" , "apricot", "banana", "kiwi", "lemon", "orange", "peach", "pear"]) + df2_eval=pd.DataFrame(np.resize(np.concatenate((np.array(worlds_eval), np.array(cameras_eval), np.array(mix_eval)) ), (3,8)),index=["World", "Cameras", "All"],columns=[ "apple" , "apricot", "banana", "kiwi", "lemon", "orange", "peach", "pear"]) + df3_test=pd.DataFrame(np.resize(np.concatenate((np.array(worlds_test), np.array(cameras_test), np.array(mix_test)) ), (3,8)),index=["World", "Cameras", "All"],columns=[ "apple" , "apricot", "banana", "kiwi", "lemon", "orange", "peach", "pear"]) + + + df1 = prep_df(df1_train, 'Train') + df2 = prep_df(df2_eval, 'Eval') + df3 = prep_df(df3_test, 'Test') + + df = pd.concat([df1, df2, df3]) + + + # print(np.resize(np.concatenate((np.array(worlds_train), np.array(cameras_train), np.array(mix_train)) ), (3,8))) + # print(np.random.rand(4,3)) + + # df1=pd.DataFrame(10*np.random.rand(4,3),index=["A","B","C","D"],columns=["I","J","K"]) + # df2=pd.DataFrame(10*np.random.rand(4,3),index=["A","B","C","D"],columns=["I","J","K"]) + # df3=pd.DataFrame(10*np.random.rand(4,3),index=["A","B","C","D"],columns=["I","J","K"]) + + # def prep_df(df, name): + # df = df.stack().reset_index() + # df.columns = ['c1', 'c2', 'values'] + # df['DF'] = name + # return df + + # df1 = prep_df(df1, 'DF1') + # df2 = prep_df(df2, 'DF2') + # df3 = prep_df(df3, 'DF3') + + # df = pd.concat([df1, df2, df3]) + + alt.renderers.enable('altair_viewer') + + chart = alt.Chart(df).mark_bar().encode( + + # tell Altair which field to group columns on + x=alt.X('c2:N', title=None), + + # tell Altair which field to use as Y values and how to calculate + y=alt.Y('sum(values):Q', + axis=alt.Axis( + grid=False, + title=None)), + + # tell Altair which field to use to use as the set of columns to be represented in each group + column=alt.Column('c1:N', title=None), + + # tell Altair which field to use for color segmentation + color=alt.Color('DF:N', + scale=alt.Scale( + # make it look pretty with an enjoyable color pallet + range=['#96ceb4', '#ffcc5c','#ff6f69'], + ), + ))\ + .configure_view( + # remove grid lines around column clusters + strokeOpacity=0 + ) + + chart.show() + + + with open(f'Count_Stat.json', mode='w') as f: + f.write(json.dumps(stat_cat, indent=4)) + with open(f'Count_Stat_instance.json', mode='w') as f: + f.write(json.dumps(stat_cat_inst, indent=4)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +