From 7a327ffb21409e1d267ba37e56288636cf71a94a Mon Sep 17 00:00:00 2001
From: Romain Guesdon <r.guesdon@hotmail.fr>
Date: Fri, 2 Sep 2022 16:27:12 +0200
Subject: [PATCH] Fix human switch

---
 global_script.py       | 17 +++++++++--------
 scripts/human.py       | 18 +++++++++---------
 scripts/random_pose.py |  8 +++-----
 3 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/global_script.py b/global_script.py
index 7fd5311..4bf5096 100644
--- a/global_script.py
+++ b/global_script.py
@@ -73,11 +73,11 @@ cars = []
 
 for src_path, name in {
     r"car_models\suv_car\car.blend": 'SUV',
-    # r"car_models\red_car\red.blend": 'Red',
-    # r"car_models\pickup_car\pickup.blend": 'PickUp',
-    # r"car_models\family_car\family_car.blend": 'Family',
-    # r"car_models\coupe_car\coupe_car.blend": 'Coupe',
-    # r"car_models\truck\truck_open.blend": 'Truck',
+    r"car_models\red_car\red.blend": 'Red',
+    r"car_models\pickup_car\pickup.blend": 'PickUp',
+    r"car_models\family_car\family_car.blend": 'Family',
+    r"car_models\coupe_car\coupe_car.blend": 'Coupe',
+    r"car_models\truck\truck_open.blend": 'Truck',
 
 }.items():
     with D.libraries.load(abs_path(src_path)) as (data_from, data_to):
@@ -152,7 +152,7 @@ light_params = {
     },
     'night': {
         'energy_bounds': (5, 15),
-        'back_color_bounds': (0.05, 0.15),
+        'back_color_bounds': (0.1, 0.15),
         'sun_color': (1, 0.5, 0.2)
     }
 
@@ -194,7 +194,7 @@ if not CONTINUE or not os.path.isfile(info_path):
 
 frame_rate = 25
 nb_scene = 1
-nb_pose = 10
+nb_pose = 30
 human_loader.max_len = min(human_loader.max_len, nb_scene)
 ratio_conf_man = int(nb_scene / len(human_loader.human_paths))
 if CONTINUE:
@@ -302,7 +302,8 @@ for sc in range(nb_scene):
             bpy.ops.object.mode_set(mode='OBJECT')
 
             # set output path so render won't get overwritten
-            C.scene.render.filepath = os.path.join(fp_img, f"{file_root_name}_{po}" + f'_drive' if use_targets else '')
+            C.scene.render.filepath = os.path.join(fp_img,
+                                                   f"{file_root_name}_{po}" + (f'_drive' if use_targets else ''))
             bpy.ops.render.render(write_still=True)  # render still
 
             annotations_2D = []
diff --git a/scripts/human.py b/scripts/human.py
index 3045b43..676aeab 100644
--- a/scripts/human.py
+++ b/scripts/human.py
@@ -234,11 +234,11 @@ def set_shrinkwraps(model, car=None):
 class HumanLoader:
     def __init__(self, dir_path, max_len=10):
         self.human_paths = glob.glob(os.path.join(dir_path, '*.fbx'))
-        # random.shuffle(self.human_paths)
+        random.shuffle(self.human_paths)
         self.paths = {}
         self.humans = {}
         self.max_len = max_len
-        self.start_idx = 0
+        self.start_loaded = 0
         self.current_idx = -1
 
         self.collection = D.collections.new("Humans")
@@ -250,16 +250,16 @@ class HumanLoader:
     def load_next(self):
         if self.max_len >= len(self.human_paths):
             # If asked too much
-            self.start_idx = 0
+            self.start_loaded = 0
             if len(self.paths) == len(self.human_paths):
                 # If  everything already loaded
                 return
             else:
-                next_idx = len(self.human_paths)
+                end_loaded = len(self.human_paths)
         else:
-            next_idx = self.start_idx + self.max_len
+            end_loaded = self.start_loaded + self.max_len
 
-        human_paths = (self.human_paths * 2)[self.start_idx:next_idx]
+        human_paths = (self.human_paths * 2)[self.start_loaded:end_loaded]
         human_paths = list({k: None for k in human_paths})
 
         already_loaded = [hp for hp in human_paths if hp in self.paths.values()]
@@ -277,12 +277,11 @@ class HumanLoader:
             self.humans[human_path] = Human(model)
 
         self.picker = utils.Randomizer(list(self.humans.values()))
-        self.start_idx = next_idx % len(self.human_paths)
+        self.start_loaded = end_loaded % len(self.human_paths)
 
     def next(self, *args, **kwargs):
         self.current_idx += 1
         if not self.current_idx % self.max_len:
-            self.start_idx = self.current_idx
             self.load_next()
             self.current_idx = 0
         return self.picker.get(self.current_idx, *args, **kwargs)
@@ -301,7 +300,8 @@ class HumanLoader:
 
 def clear_humans(exceptions=[]):
     collection = D.collections["Humans"]
-    exceptions = exceptions + [obj.children_recursive for obj in exceptions]
+    exceptions = exceptions + [ch for obj in exceptions for ch in obj.children_recursive]
+
     for obj in collection.objects:
         if obj in exceptions:
             continue
diff --git a/scripts/random_pose.py b/scripts/random_pose.py
index d4a7847..950befe 100644
--- a/scripts/random_pose.py
+++ b/scripts/random_pose.py
@@ -95,9 +95,8 @@ def hand_pose(pose, side, grasp=None):
         hand_ratio = random.uniform(0.5, 0.8)
     elif grasp is False:
         hand_ratio = random.uniform(0.05, 0.15)
-
-    print(grasp)
-    print(hand_ratio)
+    else:
+        hand_ratio = 0
 
     for finger in ['thumb', 'index', 'middle', 'ring', 'pinky']:
         angles = r([40, 40, 40]) if finger == 'thumb' else r([70, 90, 40])
@@ -157,7 +156,7 @@ def random_pose_ik(subject, auto_ik=False, targets=None):
 
     else:
         pose.bones['spine_03'].rotation_euler = get_angles([[5, 20], 15, None])
-        pose.bones['neck_01'].rotation_euler = get_angles(bounds_vals['neck_01'])
+        pose.bones['neck_01'].rotation_euler = get_angles([[5, 25], 0, 10])
 
     pose.use_auto_ik = auto_ik
 
@@ -215,7 +214,6 @@ def random_pose_ik(subject, auto_ik=False, targets=None):
             pose.bones[f'hand_{s}_IK'].rotation_euler = Vector((0, 0, 0))
             pose.bones[f'hand_{s}_IK'].rotation_euler = (
                 ((matrix_world @ pose.bones[f'hand_{s}_IK'].matrix).inverted() @ target.matrix_world).to_euler())
-            print("_close" in target.name)
             hand_pose(pose, side=s, grasp="_close" in target.name)
 
             target = target.location
-- 
GitLab