diff options
Diffstat (limited to 'src/argaze/utils/context_run.py')
-rw-r--r-- | src/argaze/utils/context_run.py | 82 |
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 |