diff options
-rw-r--r-- | src/argaze/ArFeatures.py | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/src/argaze/ArFeatures.py b/src/argaze/ArFeatures.py index 1569873..6ef8df3 100644 --- a/src/argaze/ArFeatures.py +++ b/src/argaze/ArFeatures.py @@ -76,8 +76,8 @@ class ArFrame(): name: str size: tuple[int] = field(default=(1, 1)) + aoi_2d_scene: AOI2DScene.AOI2DScene = field(default_factory=AOI2DScene.AOI2DScene) background: numpy.array = field(default_factory=numpy.array) - aoi_2d_scene: AOI2DScene.AOI2DScene = field(init=False, default_factory=AOI2DScene.AOI2DScene) gaze_movement_identifier: GazeFeatures.GazeMovementIdentifier = field(default_factory=GazeFeatures.GazeMovementIdentifier) scan_path: GazeFeatures.ScanPath = field(default_factory=GazeFeatures.ScanPath) scan_path_analyzers: dict = field(default_factory=dict) @@ -122,6 +122,26 @@ class ArFrame(): new_frame_size = (0, 0) + # Load aoi 2D scene + try: + + new_aoi_2d_scene_value = frame_data.pop('aoi_2d_scene') + + # str: relative path to .json file + if type(new_aoi_2d_scene_value) == str: + + json_filepath = os.path.join(working_directory, new_aoi_2d_scene_value) + new_aoi_2d_scene = AOI2DScene.AOI2DScene.from_json(obj_filepath) + + # dict: + else: + + new_aoi_2d_scene = AOI2DScene.AOI2DScene(new_aoi_2d_scene_value) + + except KeyError: + + new_aoi_2d_scene = AOI2DScene.AOI2DScene() + # Load background image try: @@ -247,6 +267,7 @@ class ArFrame(): # Create frame return ArFrame(new_frame_name, \ new_frame_size, \ + new_aoi_2d_scene, \ new_frame_background, \ finished_gaze_movement_identifier, \ GazeFeatures.ScanPath() if len(new_scan_path_analyzers) > 0 else None, \ @@ -255,6 +276,23 @@ class ArFrame(): new_aoi_scan_path_analyzers, \ AOIFeatures.Heatmap(new_frame_size) if new_heatmap_value else None \ ) + + @classmethod + def from_json(self, json_filepath: str) -> ArEnvironmentType: + """ + Load ArFrame from .json file. + + Parameters: + json_filepath: path to json file + """ + + with open(json_filepath) as configuration_file: + + frame_data = json.load(configuration_file) + working_directory = os.path.dirname(json_filepath) + + return ArFrame.from_dict(frame_data, working_directory) + @property def parent(self): """Get parent instance""" @@ -433,7 +471,7 @@ class ArFrame(): # Return look data return fixation, look_at, scan_step_analysis, aoi_scan_step_analysis, exception - def draw(self, image:numpy.array): + def draw(self, image:numpy.array, aoi_color=(0, 0, 0)): """ Draw frame into image. @@ -445,7 +483,7 @@ class ArFrame(): self.__look_lock.acquire() # Draw aoi - self.aoi_2d_scene.draw(image, color=(0, 0, 0)) + self.aoi_2d_scene.draw(image, color=aoi_color) # Draw current gaze position self.__gaze_position.draw(image, color=(255, 255, 255)) |