-
Guillaume Duret authored326983e4
instance_mask.py 4.00 KiB
from matplotlib import pyplot as plt
import cv2
import json
from pathlib import Path
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 instance(im, id):
#im = im * 255
im[im == id] = 255
im[im < 255] = 0
im = im / 255
#plt.imshow(im, cmap='gray')
#plt.show()
return im
def generate_instance_mask(data_name, Nb_camera, Nb_world,list_categories, occ_target):
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
k = ((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)
for categories in list_categories:
if len(catergories_occ_array[categories]) == 1 :
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])
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)