aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/argaze/utils/contexts/Random.py77
-rw-r--r--src/argaze/utils/demo/random_context.json12
2 files changed, 89 insertions, 0 deletions
diff --git a/src/argaze/utils/contexts/Random.py b/src/argaze/utils/contexts/Random.py
new file mode 100644
index 0000000..192e477
--- /dev/null
+++ b/src/argaze/utils/contexts/Random.py
@@ -0,0 +1,77 @@
+"""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 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...')
+
+ start_time = time.time()
+ self.__x = int(self.range[0] / 2)
+ self.__y = int(self.range[1] / 2)
+
+ while True:
+
+ # Edit millisecond timestamp
+ timestamp = int((time.time() - start_time) * 1e3)
+
+ self.__x += random.randint(-10, 10)
+ self.__y += random.randint(-10, 10)
+
+ logging.info('> 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)
+
+ return self
+
+ @DataFeatures.PipelineStepExit
+ def __exit__(self, exception_type, exception_value, exception_traceback):
+
+ logging.info('GazePositionGenerator context ends...') \ 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