diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/argaze/ArFeatures.py | 2 | ||||
-rw-r--r-- | src/argaze/DataFeatures.py | 4 | ||||
-rw-r--r-- | src/argaze/utils/contexts/Random.py | 93 | ||||
-rw-r--r-- | src/argaze/utils/demo/random_context.json | 12 |
4 files changed, 108 insertions, 3 deletions
diff --git a/src/argaze/ArFeatures.py b/src/argaze/ArFeatures.py index a3ce1e3..58b23a0 100644 --- a/src/argaze/ArFeatures.py +++ b/src/argaze/ArFeatures.py @@ -1442,7 +1442,7 @@ DEFAULT_ARCONTEXT_IMAGE_PARAMETERS = { class ArContext(DataFeatures.PipelineStepObject): """ - Define class to ... + Defines abstract Python context manager to handle pipeline inputs. """ # noinspection PyMissingConstructor diff --git a/src/argaze/DataFeatures.py b/src/argaze/DataFeatures.py index 08e0ef1..1bc43a8 100644 --- a/src/argaze/DataFeatures.py +++ b/src/argaze/DataFeatures.py @@ -678,9 +678,9 @@ def PipelineStepEnter(method): logging.debug('%s.__enter__', get_class_path(self)) - method(self) + PipelineStepObject.__enter__(self) - return PipelineStepObject.__enter__(self) + return method(self) return wrapper diff --git a/src/argaze/utils/contexts/Random.py b/src/argaze/utils/contexts/Random.py new file mode 100644 index 0000000..7fc4d91 --- /dev/null +++ b/src/argaze/utils/contexts/Random.py @@ -0,0 +1,93 @@ +"""Define eye tracking data file context + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +You should have received a copy of the GNU General Public License along with +this program. If not, see <https://www.gnu.org/licenses/>. +""" + +__author__ = "Théo de la Hogue" +__credits__ = [] +__copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)" +__license__ = "GPLv3" + +import logging +import time +import threading +import random + +from argaze import ArFeatures, DataFeatures, GazeFeatures + +class GazePositionGenerator(ArFeatures.ArContext): + + @DataFeatures.PipelineStepInit + def __init__(self, **kwargs): + + # Init ArContext class + super().__init__() + + # Init private attribute + self.__range = (0, 0) + self.__x = 0 + self.__y = 0 + + @property + def range(self) -> tuple[int, int]: + """Maximal ranges for X and Y axis""" + return self.__range + + @range.setter + def range(self, range: tuple[int, int]): + self.__range = range + + @DataFeatures.PipelineStepEnter + def __enter__(self): + + logging.info('GazePositionGenerator context starts...') + + # Create stop event + self.__stop_event = threading.Event() + + # Start gaze position generator thread + self.__gaze_thread = threading.Thread(target=self.__generate_gaze_position) + self.__gaze_thread.start() + + return self + + def __generate_gaze_position(self): + """Generate gaze position.""" + + start_time = time.time() + self.__x = int(self.range[0] / 2) + self.__y = int(self.range[1] / 2) + + while not self.__stop_event.is_set(): + + # Edit millisecond timestamp + timestamp = int((time.time() - start_time) * 1e3) + + self.__x += random.randint(-10, 10) + self.__y += random.randint(-10, 10) + + logging.debug('> timestamp=%i, x=%i, y=%i', timestamp, self.__x, self.__y) + + # Process timestamped random gaze position + self._process_gaze_position(timestamp = timestamp, x = self.__x, y = self.__y) + + # wait 10ms + time.sleep(0.01) + + @DataFeatures.PipelineStepExit + def __exit__(self, exception_type, exception_value, exception_traceback): + + logging.info('GazePositionGenerator context ends...') + + # Stop gaze position generator thread + self.__stop_event.set() + threading.Thread.join(self.__gaze_thread) +
\ No newline at end of file diff --git a/src/argaze/utils/demo/random_context.json b/src/argaze/utils/demo/random_context.json new file mode 100644 index 0000000..bb18a41 --- /dev/null +++ b/src/argaze/utils/demo/random_context.json @@ -0,0 +1,12 @@ +{ + "argaze.utils.contexts.Random.GazePositionGenerator" : { + "name": "Random gaze position generator", + "range": [1920, 1149], + "pipeline": "gaze_analysis_pipeline.json", + "catch_exceptions": true, + "image_parameters": { + "draw_times": true, + "draw_exceptions": true + } + } +}
\ No newline at end of file |