diff --git a/compute_features.py b/compute_features.py new file mode 100644 index 0000000000000000000000000000000000000000..797c931727708d7880b7bea3d1cc50de09b4f022 --- /dev/null +++ b/compute_features.py @@ -0,0 +1,64 @@ + + + +import math +import numpy as np +import json +from utils import compute_categories_id, compute_id_good_occ +from scipy.spatial.transform import Rotation + + + +def convert2(xyz): + (R, P, Y) = (xyz[0], xyz[1], xyz[2]) + Q = Rotation.from_euler(seq='xyz', angles=[R, P, Y], degrees=False).as_quat() + r = Rotation.from_quat(Q) + rotation = r.as_matrix() + + return rotation + + +def process_compute(data_name, Nb_camera, Nb_world, list_categories, occ_target): + transformation = np.matrix([[0.0000000, -1.0000000, 0.0000000], + [0.0000000, 0.0000000, -1.0000000], + [1.0000000, 0.0000000, 0.0000000]]) + cont1, cont2, cont3 = 0, 0, 0 + for i in range(1, Nb_world + 1): # worlds + + catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id = compute_categories_id(data_name, i) + + for j in range(1, Nb_camera+1): # cameras + p = ((i-1)*Nb_camera) + j + + catergories_occ_array = compute_id_good_occ(data_name, p, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, occ_target) + + + ### Generate Poses ### + + with open(f'{data_name}/Pose/{p}.json', 'r') as f: + data = json.load(f) + #print(data) + print("len(data)", len(data)) + + for k in range(len(data)): + + for categories in list_categories: + + if len(catergories_occ_array[categories]) == 1 and data[k]['id'] == catergories_occ_array[categories][0]: + cont1 += 1 + rpy = data[k]['pose']['rpy'] + rot = convert2(rpy) + R_exp = transformation @ rot + R_exp = np.array(R_exp) + + xyz = data[k]['pose']['xyz'] + T_exp = transformation @ xyz + T_exp = np.array(T_exp) + num_arr = np.c_[R_exp, T_exp[0]] + np.save(f'{data_name}/Generated/Pose_transformed/{categories}/{p}.npy', num_arr) # save + else: + continue + + print(cont1, cont2, cont3) + + diff --git a/main.py b/main.py index df52092c8c93a51ad1637d193fbe1bd644852446..de944f3c3404b7cb67f9a9632ae7ad46f9eb1b53 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,7 @@ from bbox_2d import generate_2d_bbox from instance_mask import generate_instance_mask from fps_alg import generate_fps from bbox_3d import generate_3d_bbox +from compute_features import process_compute import shutil @@ -62,7 +63,8 @@ if __name__ == '__main__': reform_data(dataset_src, dataset_name, dataset_type, frame, Nb_camera, Nb_world) - transform_pose(dataset_name, Nb_camera, Nb_world, list_categories, occ_target) + process_compute(dataset_name, Nb_camera, Nb_world, list_categories, occ_target) + #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) generate_instance_mask(dataset_name, Nb_camera, Nb_world, list_categories, occ_target) generate_fps(dataset_name, camera, Nb_camera, Nb_world, list_categories, True) diff --git a/utils.py b/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ad86fd96da7dcf35195529251e78223b18440eff --- /dev/null +++ b/utils.py @@ -0,0 +1,69 @@ + +import json + + +def compute_categories_id(data_name, world): + #Category = 'banana1' + #Category = 'pear2' + #Category = "orange2" + # Opening JSON file + f = open(f'{data_name}/Meta/{world}.json') + + # returns JSON object as + # a dictionary + data = json.load(f) + + # Iterating through the json + # list + + catergories_label_to_id={} + catergories_id_to_label={} + catergories_instance_array_cat_to_id={} + catergories_instance_array_id_to_cat={} + + for k in data['categories']: + catergories_label_to_id[k['label']]=k['id'] + catergories_id_to_label[k['id']]=k['label'] + catergories_instance_array_cat_to_id[k['label']]=[] + + for k in data['objects']: + #print(k) + #catergories_instance_array[catergories_id_to_label[i['category_id']]] + catergories_instance_array_id_to_cat[k['id']] = catergories_id_to_label[k['category_id']] + catergories_instance_array_cat_to_id[catergories_id_to_label[k['category_id']]].append(k['id']) + # if i['category_id'] == id_category : + # print("Hello fruits instance") + # id_instances.append(i['id']) + # print(i['id']) + + print("catergories_instance_array_cat_to_id : ", catergories_instance_array_cat_to_id) + print("catergories_instance_array_id_to_cat : ", catergories_instance_array_id_to_cat) + + # Closing file + f.close() + + return catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id + + + +def compute_id_good_occ(data_name, count, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, Occ_wanted): + + f2 = open(f'{data_name}/Occlusion/{count}.json') + + data2 = json.load(f2) + catergories_occ_array = {} + + for cat in catergories_instance_array_cat_to_id : + #print(cat) + catergories_occ_array[cat] = [] + + for i in data2: + if i['occlusion_value'] > 0.5 : + catergories_occ_array[catergories_instance_array_id_to_cat[i['id']]].append(i['id']) + + print(catergories_occ_array) + + # Closing file + f2.close() + + return catergories_occ_array \ No newline at end of file