Source code for thelper.gui.utils
"""Graphical User Interface (GUI) utility module.
This module contains various tools and utilities used to instantiate annotators and GUI elements.
"""
import logging
import thelper.utils
logger = logging.getLogger(__name__)
[docs]def create_key_listener(callback):
"""Returns a key press listener based on pynput.keyboard (used for mocking)."""
import pynput.keyboard
return pynput.keyboard.Listener(on_press=callback)
[docs]def create_annotator(session_name, save_dir, config, datasets):
"""Instantiates a GUI annotation tool based on the type contained in the config dictionary.
The tool type is expected to be in the configuration dictionary's `annotator` field, under the `type` key. For more
information on the configuration, refer to :class:`thelper.gui.annotators.Annotator`. The instantiated type must be
compatible with the constructor signature of :class:`thelper.gui.annotators.Annotator`. The object's constructor will
be given the full config dictionary.
Args:
session_name: name of the annotation session used for printing and to create output directories.
save_dir: path to the session directory where annotations and other outputs will be saved.
config: full configuration dictionary that will be parsed for annotator parameters.
datasets: map of named dataset parsers that will provide the data to annotate.
Returns:
The fully-constructed annotator object, ready to begin annotation via its ``run()`` function.
.. seealso::
| :class:`thelper.gui.annotators.Annotator`
"""
if "annotator" not in config or not config["annotator"]:
raise AssertionError("config missing 'annotator' field")
annotator_config = config["annotator"]
if "type" not in annotator_config or not annotator_config["type"]:
raise AssertionError("annotator config missing 'type' field")
annotator_type = thelper.utils.import_class(annotator_config["type"])
return annotator_type(session_name, config, save_dir, datasets)