aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/utils/context_run.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/utils/context_run.py')
-rw-r--r--src/argaze/utils/context_run.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/argaze/utils/context_run.py b/src/argaze/utils/context_run.py
new file mode 100644
index 0000000..ace7c54
--- /dev/null
+++ b/src/argaze/utils/context_run.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+"""Load and execute eyetracker pipeline.
+
+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 <http://www.gnu.org/licenses/>.
+"""
+
+__author__ = "Théo de la Hogue"
+__credits__ = []
+__copyright__ = "Copyright 2023, Ecole Nationale de l'Aviation Civile (ENAC)"
+__license__ = "GPLv3"
+
+import argparse
+import logging
+import contextlib
+
+from argaze import DataFeatures, ArFeatures
+
+import cv2
+
+# Manage arguments
+parser = argparse.ArgumentParser(description=__doc__.split('-')[0])
+parser.add_argument('configuration', metavar='CONFIGURATION', type=str, help='JSON configuration filepath')
+parser.add_argument('-p', '--patch', metavar='PATCH', type=str, help='JSON configuration patch filepath')
+parser.add_argument('-v', '--verbose', action='store_true', default=False, help='enable verbose mode to print information in console')
+parser.add_argument('-m', '--mouse', action='store_true', default=False, help='use mouse pointer as gaze position')
+
+args = parser.parse_args()
+
+# Manage logging
+logging.basicConfig(format = '%(levelname)s: %(message)s', level = logging.DEBUG if args.verbose else logging.INFO)
+
+def main():
+
+ # Load ArGaze context
+ with DataFeatures.from_json(args.configuration, args.patch) as context:
+
+ if args.verbose:
+
+ print(context)
+
+ # Create a window to display context
+ cv2.namedWindow(context.name, cv2.WINDOW_AUTOSIZE)
+
+ # Waiting for 'ctrl+C' interruption
+ with contextlib.suppress(KeyboardInterrupt):
+
+ # Visualisation loop
+ while True:
+
+ # Display context
+ cv2.imshow(context.name, context.image())
+
+ # Head-monted eye tracker case: display environment frames image
+ if issubclass(type(context.pipeline), ArFeatures.ArCamera):
+
+ for scene_frame in context.pipeline.scene_frames():
+
+ cv2.imshow(scene_frame.name, scene_frame.image())
+
+ # Key interaction
+ key_pressed = cv2.waitKey(10)
+
+ # Esc: close window
+ if key_pressed == 27:
+
+ raise KeyboardInterrupt()
+
+ # Stop frame display
+ cv2.destroyAllWindows()
+
+if __name__ == '__main__':
+
+ main() \ No newline at end of file