diff --git a/bbox_2d.py b/bbox_2d.py index 451286288c8844f0b8aa533bd86034f21d1a4d2c..27e565fd64089e441b43ac5edfbc25471bda4e10 100644 --- a/bbox_2d.py +++ b/bbox_2d.py @@ -2,96 +2,6 @@ import math import numpy as np 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: - #print('i : ',i) - #print(i['id']) - #print(id_instances) - if i['occlusion_value'] > 0.5 : - catergories_occ_array[catergories_instance_array_id_to_cat[i['id']]].append(i['id']) - - - - # if i['id'] in id_instances : - # print("Hello banana instance occ") - # if i['occlusion_value'] > 0.5 : - # id_instances_good.append(i['id']) - # print(i['id']) - # print(i['occlusion_value']) - - print(catergories_occ_array) - - - - - # Closing file - f2.close() - - return catergories_occ_array - - - - def bbox_2d(data_sample): center = data_sample['bbox']['center'] @@ -108,34 +18,34 @@ def bbox_2d(data_sample): return bbox_res -def generate_2d_bbox(data_name, Nb_camera, Nb_world, list_categories, occ_target): +# def generate_2d_bbox(data_name, Nb_camera, Nb_world, list_categories, occ_target): - cont1, cont2, cont3 = 0, 0, 0 - num_arr = 0 +# cont1, cont2, cont3 = 0, 0, 0 +# num_arr = 0 - for i in range(1, Nb_world + 1): # worlds +# 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) +# 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 +# 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) +# catergories_occ_array = compute_id_good_occ(data_name, p, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, occ_target) - with open(f"{data_name}/Bbox_2d/{p}.json", 'r') as f: - data = json.load(f) +# with open(f"{data_name}/Bbox_2d/{p}.json", 'r') as f: +# data_Bbox_2d = json.load(f) - for k in range(len(data)): +# for k in range(len(data_Bbox_2d)): - for categories in list_categories: +# for categories in list_categories: - if len(catergories_occ_array[categories]) == 1 and data[k]['id'] == catergories_occ_array[categories][0]: - - cont1 += 1 - bbox = bbox_2d(data[k]) - np.savetxt(f'{data_name}/Generated/Bbox/{categories}/{p}.txt', np.array(bbox).reshape((1, 4))) # save - else: - continue - print(cont1, cont2, cont3) +# if len(catergories_occ_array[categories]) == 1 and data_Bbox_2d[k]['id'] == catergories_occ_array[categories][0]: + +# cont1 += 1 +# bbox = bbox_2d(data_Bbox_2d[k]) +# np.savetxt(f'{data_name}/Generated/Bbox/{categories}/{p}.txt', np.array(bbox).reshape((1, 4))) # save +# else: +# continue +# print(cont1, cont2, cont3) diff --git a/compute_features.py b/compute_features.py index 797c931727708d7880b7bea3d1cc50de09b4f022..3630f124bb515764d843069779d6587274cf657c 100644 --- a/compute_features.py +++ b/compute_features.py @@ -6,7 +6,7 @@ import numpy as np import json from utils import compute_categories_id, compute_id_good_occ from scipy.spatial.transform import Rotation - +from bbox_2d import bbox_2d def convert2(xyz): @@ -33,31 +33,47 @@ def process_compute(data_name, Nb_camera, Nb_world, list_categories, occ_target) 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 ### - + ### 3D Poses ### with open(f'{data_name}/Pose/{p}.json', 'r') as f: - data = json.load(f) + data_3D_pose = json.load(f) #print(data) - print("len(data)", len(data)) + print("len(data)", len(data_3D_pose)) + + ### 2D BBox ### + with open(f"{data_name}/Bbox_2d/{p}.json", 'r') as f: + data_Bbox_2d = json.load(f) + + if len(data_Bbox_2d) != len(data_3D_pose) : + raise TypeError("size of datas are differents !!") - for k in range(len(data)): + for k in range(len(data_3D_pose)): 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 + if len(catergories_occ_array[categories]) == 1 : + + if data_3D_pose[k]['id'] == catergories_occ_array[categories][0]: + cont1 += 1 + rpy = data_3D_pose[k]['pose']['rpy'] + rot = convert2(rpy) + R_exp = transformation @ rot + R_exp = np.array(R_exp) + + xyz = data_3D_pose[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 + + if data_Bbox_2d[k]['id'] == catergories_occ_array[categories][0]: + + cont1 += 1 + bbox = bbox_2d(data_Bbox_2d[k]) + np.savetxt(f'{data_name}/Generated/Bbox/{categories}/{p}.txt', np.array(bbox).reshape((1, 4))) # save + else: + continue print(cont1, cont2, cont3) diff --git a/instance_mask.py b/instance_mask.py index 5ad4d4eb81cab7ce958f4c790a9fa9f6e96f36ea..28c9072ef92e1101ba3cffeaffa5f5e52872636b 100644 --- a/instance_mask.py +++ b/instance_mask.py @@ -113,30 +113,27 @@ def generate_instance_mask(data_name, Nb_camera, Nb_world,list_categories, occ_t for j in range(1, Nb_camera+1): # cameras - k = ((i-1)*Nb_camera) + j + p = ((i-1)*Nb_camera) + j - catergories_occ_array = compute_id_good_occ(data_name, k, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, occ_target) + catergories_occ_array = compute_id_good_occ(data_name, p, catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, occ_target) for categories in list_categories: if len(catergories_occ_array[categories]) == 1 : + id = catergories_occ_array[categories][0] + print("iddd : ",id) + img = cv2.imread(f"{data_name}/Instance_Segmentation/{p}.png", cv2.IMREAD_UNCHANGED) # plt.imread(path) - path = Path(f"{data_name}/Instance_Segmentation/{k}.png") - if path.is_file(): - id = catergories_occ_array[categories][0] - print("iddd : ",id) - img = cv2.imread(f"{data_name}/Instance_Segmentation/{k}.png", cv2.IMREAD_UNCHANGED) # plt.imread(path) + #print("img[817][308] : ", img[817][308]) + print("img[308][817] : ", img[308][817]) - #print("img[817][308] : ", img[817][308]) - print("img[308][817] : ", img[308][817]) + instance_img = instance(img, id) + print("instance_img[308][817] : ", instance_img[308][817]) - instance_img = instance(img, id) - print("instance_img[308][817] : ", instance_img[308][817]) - - cv2.imwrite(f"{data_name}/Generated/Instance_Mask/{categories}/{k}.png", 255*instance_img) + cv2.imwrite(f"{data_name}/Generated/Instance_Mask/{categories}/{p}.png", 255*instance_img) diff --git a/main.py b/main.py index de944f3c3404b7cb67f9a9632ae7ad46f9eb1b53..5b84ac86ad0455be2cff9afeb5c70c5e5d39a35e 100644 --- a/main.py +++ b/main.py @@ -2,8 +2,8 @@ import os import numpy as np import json from prepare_data import reform_data -from pose import transform_pose -from bbox_2d import generate_2d_bbox +#from pose import transform_pose +#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 @@ -65,7 +65,7 @@ if __name__ == '__main__': 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_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) #generate_3d_bbox(dataset_name)