From 0382a646f25265cc9db1f036546a32d7cb32bc17 Mon Sep 17 00:00:00 2001
From: Gduret <guillaume.duret@ec-lyon.fr>
Date: Thu, 2 Mar 2023 14:15:55 +0100
Subject: [PATCH] add 3D bbox size

---
 bbox_3d.py          |  7 ++-----
 compute_features.py | 23 ++++++++---------------
 main.py             | 44 ++++++++++++++++++++++++++++----------------
 prepare_data.py     |  5 +++++
 test_resize.py      |  1 -
 utils.py            |  5 ++++-
 6 files changed, 47 insertions(+), 38 deletions(-)

diff --git a/bbox_3d.py b/bbox_3d.py
index 7f0241b..d0e0604 100644
--- a/bbox_3d.py
+++ b/bbox_3d.py
@@ -1,7 +1,6 @@
 import numpy as np
 
-
-def get_bbox(ext):
+def get_3D_bbox(ext):
     pcd_bbox = np.array([
         [ext[0], ext[1], ext[2]],
         [- ext[0], ext[1], ext[2]],
@@ -12,17 +11,15 @@ def get_bbox(ext):
         [ext[0], - ext[1], - ext[2]],
         [- ext[0], - ext[1], - ext[2]]
     ])
-
     return pcd_bbox
 
-
 def generate_3d_bbox(data_name):
     objs = {"Banana": [0.029497003182768822, 0.15110498666763306, 0.060593008995056152],
             "Orange": [0.073495000600814819, 0.075856998562812805, 0.074581995606422424],
             "Pear": [0.066010989248752594, 0.12873399630188942, 0.06739199161529541]}
     for key, val in objs.items():
         ext = [x / 2 for x in val]
-        bbox = get_bbox(ext)
+        bbox = get_3D_bbox(ext)
         np.savetxt(f'{data_name}/Generated/Bbox/{key}_bbox_3d.txt', bbox)
         # print(ext)
 
diff --git a/compute_features.py b/compute_features.py
index af05403..a252f82 100644
--- a/compute_features.py
+++ b/compute_features.py
@@ -15,21 +15,6 @@ from fps_alg import process2
 import os
 
 
-def updateJsonFile():
-    jsonFile = open("replayScript.json", "r") # Open the JSON file for reading
-    data = json.load(jsonFile) # Read the JSON into the buffer
-    jsonFile.close() # Close the JSON file
-
-    ## Working with buffered content
-    tmp = data["location"] 
-    data["location"] = path
-    data["mode"] = "replay"
-
-    ## Save our changes to JSON file
-    jsonFile = open("replayScript.json", "w+")
-    jsonFile.write(json.dumps(data))
-    jsonFile.close()
-
 
 def process_compute(data_name, camera, camera_resized, new_size, Nb_camera, World_begin, Nb_world, list_categories, occ_target, vis):
     transformation = np.matrix([[0.0000000, -1.0000000, 0.0000000],
@@ -56,6 +41,8 @@ def process_compute(data_name, camera, camera_resized, new_size, Nb_camera, Worl
             with open(f"{data_name}/Bbox_2d/{p}.json", 'r') as f:
                 data_Bbox_2d = json.load(f)
 
+            with open(f"{data_name}/Bbox_3d/{p}.json", 'r') as f:
+                data_Bbox_3d = json.load(f)
 
             if len(data_Bbox_2d) != len(data_3D_pose) :
                 raise TypeError("size of datas are differents !!")
@@ -124,6 +111,12 @@ def process_compute(data_name, camera, camera_resized, new_size, Nb_camera, Worl
                             else:
                                 continue
 
+                            if data_Bbox_3d[k]['id'] == catergories_occ_array[categories][0]:
+                                bbox3d_size = data_Bbox_3d[k]['bbox']['size']
+                                np.savetxt(f'{data_name}/Generated/{categories}/Bbox_3d_Gen/{p}.txt', bbox3d_size)  # save
+                            else:
+                                continue
+
                         id = catergories_occ_array[categories][0]
                         img = cv2.imread(f"{data_name}/Instance_Segmentation/{p}.png", cv2.IMREAD_UNCHANGED) # plt.imread(path)
 
diff --git a/main.py b/main.py
index 1798bc5..1642cbf 100644
--- a/main.py
+++ b/main.py
@@ -19,11 +19,11 @@ 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", "Bbox_3d", "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", "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", "FPS" , "FPS_resized"]:
+            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:
@@ -31,7 +31,6 @@ 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
@@ -43,10 +42,6 @@ def calc_pts_diameter2(pts):
     diameter = np.max(dists)
     return diameter
 
-
-
-
-
 if __name__ == '__main__':
     
     # Create the parser
@@ -104,6 +99,17 @@ if __name__ == '__main__':
 
     reform_data(dataset_src, dataset_name, dataset_type, Nb_camera, args.World_begin, args.Nb_worlds)
 
+    list_categories = ["banana1", "kiwi1", "pear2", "strawberry1", "apricot", "orange2", "peach1", "lemon2", "apple2" ]
+
+    objs = {"banana1": [ 0.02949700132012367249, 0.1511049866676330566, 0.06059300713241100311 ],
+            "kiwi1": [ 0.04908600077033042908, 0.07206099480390548706, 0.04909799993038177490 ],
+            "pear2": [ 0.06601099669933319092, 0.1287339925765991211, 0.06739201396703720093 ],
+            "strawberry1": [0.01698100194334983826, 0.02203200198709964752, 0.01685700193047523499],
+            "apricot": [0.04213499650359153748, 0.05482299625873565674, 0.04333199933171272278],
+            "orange2": [ 0.07349500805139541626, 0.07585700601339340210, 0.07458199560642242432 ],
+            "peach1": [ 0.07397901266813278198, 0.07111301273107528687, 0.07657301425933837891 ],
+            "lemon2": [0.04686100035905838013, 0.04684200137853622437, 0.07244800776243209839],
+            "apple2": [0.05203099921345710754, 0.04766000062227249146, 0.05089000239968299866]}
 
     for categories in list_categories:
         point_cloud = f"Models/{categories}/{categories.lower()}.ply"
@@ -124,26 +130,32 @@ if __name__ == '__main__':
 
         np.savetxt(f'{dataset_name}/Generated/{categories}/{categories}_diameter.txt', np.array([dim]))
 
+        size_bb = objs[categories]
 
-        # 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:
+        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
+
+        # json_num = 2
+        # catergories_instance_array_id_to_cat, catergories_instance_array_cat_to_id, catergories_label_to_id = compute_categories_id(dataset_name, json_num)
+        # print(f'{dataset_name}/Bbox_3d/{json_num}.json') 
+        # with open(f"{dataset_name}/Bbox_3d/{json_num}.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_instance_array_cat_to_id : ", catergories_instance_array_cat_to_id)
+        # print("data_Bbox_3d : ", data_Bbox_3d)
 
-        # 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"]
+        #     if data_Bbox_3d[k]['id'] in catergories_instance_array_cat_to_id[categories]:
+        #         print(data_Bbox_3d)
+        #         size_bb = data_Bbox_3d[k]["bbox"]["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)
+    process_compute(dataset_name, camera, new_camera, new_size, Nb_camera, args.World_begin, args.Nb_worlds, list_categories, occ_target, False)
     #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)
diff --git a/prepare_data.py b/prepare_data.py
index 1641a78..8830d80 100644
--- a/prepare_data.py
+++ b/prepare_data.py
@@ -48,6 +48,11 @@ def reform_data(src, data_name, data_option, Nb_camera, World_begin, Nb_world):
             dst_bbox = f"{data_name}/Bbox_2d/{count}.json"
             shutil.copy(src_bbox, dst_bbox)
 
+            files_3D_bbox = os.listdir(f"{src}/{i}/grabber_{j}/{data_option}/3d_detection/")
+            src_3D_bbox = f"{src}/{i}/grabber_{j}/{data_option}/3d_detection/{files_3D_bbox[0]}"
+            dst_3D_bbox = f"{data_name}/Bbox_3d/{count}.json"
+            shutil.copy(src_3D_bbox, dst_3D_bbox)
+
             files_bbox_loose = os.listdir(f"{src}/{i}/grabber_{j}/{data_option}/2d_detection_loose/")
             src_bbox_loose = f"{src}/{i}/grabber_{j}/{data_option}/2d_detection_loose/{files_bbox_loose[0]}"
             dst_bbox_loose = f"{data_name}/Bbox_2d_loose/{count}.json"
diff --git a/test_resize.py b/test_resize.py
index 58177e3..c014c59 100644
--- a/test_resize.py
+++ b/test_resize.py
@@ -166,7 +166,6 @@ def generate_fps(data_name, camera, vis=False, resize=False):
     # Read the point cloud
 
     for obj in ["Banana"]:
-        sfefcij
         obj_id = 0
         point_cloud = f'{data_name}/Models/{obj}/{obj.lower()}.ply'
         pcd = o3d.io.read_point_cloud(point_cloud)
diff --git a/utils.py b/utils.py
index 96e49e3..2e09900 100644
--- a/utils.py
+++ b/utils.py
@@ -57,8 +57,11 @@ def compute_id_good_occ(data_name, count, catergories_instance_array_id_to_cat,
         #print(cat)
         catergories_occ_array[cat] = []
 
+    print(data2)
+
     for i in data2:
-        if i['occlusion_value'] > 0.5 :
+        if i['occlusion_value'] >= Occ_wanted :
+            print(i['id'])
             catergories_occ_array[catergories_instance_array_id_to_cat[i['id']]].append(i['id'])
 
     print(catergories_occ_array)
-- 
GitLab