Пример #1
0
    def monitor(self, thread):
        """ Monitor the console, and generate + monitor preview if requested """
        is_preview = self.args.preview
        logger.debug("Launching Monitor")
        logger.info("R|===============================================")
        logger.info("R|- Starting                                    -")
        if is_preview:
            logger.info("R|- Using live preview                          -")
        logger.info("R|- Press 'ENTER' to save and quit              -")
        logger.info("R|- Press 'S' to save model weights immediately -")
        logger.info("R|===============================================")

        keypress = KBHit(is_gui=self.args.redirect_gui)
        err = False
        while True:
            try:
                if is_preview:
                    with self.lock:
                        for name, image in self.preview_buffer.items():
                            cv2.imshow(name, image)  # pylint: disable=no-member
                    cv_key = cv2.waitKey(1000)  # pylint: disable=no-member
                else:
                    cv_key = None

                if thread.has_error:
                    logger.debug("Thread error detected")
                    err = True
                    break
                if self.stop:
                    logger.debug("Stop received")
                    break

                # Preview Monitor
                if is_preview and (cv_key == ord("\n") or cv_key == ord("\r")):
                    logger.debug("Exit requested")
                    break
                if is_preview and cv_key == ord("s"):
                    logger.info("Save requested")
                    self.save_now = True

                # Console Monitor
                if keypress.kbhit():
                    console_key = keypress.getch()
                    if console_key in ("\n", "\r"):
                        logger.debug("Exit requested")
                        break
                    if console_key in ("s", "S"):
                        logger.info("Save requested")
                        self.save_now = True

                sleep(1)
            except KeyboardInterrupt:
                logger.debug("Keyboard Interrupt received")
                break
        keypress.set_normal_term()
        logger.debug("Closed Monitor")
        return err
Пример #2
0
    def _monitor(self, thread: MultiThread) -> bool:
        """ Monitor the background :func:`_training` thread for key presses and errors.

        Parameters
        ----------
        thread: :class:~`lib.multithreading.MultiThread`
            The thread containing the training loop

        Returns
        -------
        bool
            ``True`` if there has been an error in the background thread otherwise ``False``
        """
        self._output_startup_info()
        keypress = KBHit(is_gui=self._args.redirect_gui)
        window_created = False
        err = False
        while True:
            try:
                if self._args.preview:
                    self._do_preview(window_created)
                    cv_key = cv2.waitKey(1000)  # pylint: disable=no-member
                else:
                    cv_key = None

                if thread.has_error:
                    logger.debug("Thread error detected")
                    err = True
                    break
                if self._stop:
                    logger.debug("Stop received")
                    break

                # Preview Monitor
                if not self._preview_monitor(cv_key):
                    break

                # Console Monitor
                if self._check_keypress(keypress):
                    break  # Exit requested

                # GUI Preview trigger update monitor
                self._process_gui_triggers()

                sleep(1)
            except KeyboardInterrupt:
                logger.debug("Keyboard Interrupt received")
                break
        keypress.set_normal_term()
        logger.debug("Closed Monitor")
        return err
Пример #3
0
    def _monitor(self, thread: MultiThread) -> bool:
        """ Monitor the background :func:`_training` thread for key presses and errors.

        Parameters
        ----------
        thread: :class:~`lib.multithreading.MultiThread`
            The thread containing the training loop

        Returns
        -------
        bool
            ``True`` if there has been an error in the background thread otherwise ``False``
        """
        self._output_startup_info()
        keypress = KBHit(is_gui=self._args.redirect_gui)
        err = False
        while True:
            try:
                if self._args.preview:
                    self._preview.display_preview()

                if thread.has_error:
                    logger.debug("Thread error detected")
                    err = True
                    break
                if self._stop:
                    logger.debug("Stop received")
                    break

                # Preview Monitor
                if self._preview.should_quit():
                    break
                if self._preview.should_save():
                    self._save_now = True

                # Console Monitor
                if self._check_keypress(keypress):
                    break  # Exit requested

                # GUI Preview trigger update monitor
                self._process_gui_triggers()

                sleep(1)
            except KeyboardInterrupt:
                logger.debug("Keyboard Interrupt received")
                break
        keypress.set_normal_term()
        logger.debug("Closed Monitor")
        return err
Пример #4
0
 def monitor_console(self, thread):
     """ Monitor the console
         NB: A custom function needs to be used for this because
             input() blocks """
     logger.debug("Launching Console Monitor")
     logger.info("R|===============================================")
     logger.info("R|- Starting                                    -")
     logger.info("R|- Press 'ENTER' to save and quit              -")
     logger.info("R|- Press 'S' to save model weights immediately -")
     logger.info("R|===============================================")
     keypress = KBHit(is_gui=self.args.redirect_gui)
     err = False
     while True:
         try:
             if thread.has_error:
                 logger.debug("Thread error detected")
                 err = True
                 break
             if self.stop:
                 logger.debug("Stop received")
                 break
             if keypress.kbhit():
                 key = keypress.getch()
                 if key in ("\n", "\r"):
                     logger.debug("Exit requested")
                     break
                 if key in ("s", "S"):
                     logger.info("Save requested")
                     self.save_now = True
         except KeyboardInterrupt:
             logger.debug("Keyboard Interrupt received")
             break
     keypress.set_normal_term()
     logger.debug("Closed Console Monitor")
     return err
Пример #5
0
    def monitor(self, thread):
        """ Monitor the console, and generate + monitor preview if requested """
        is_preview = self.args.preview
        logger.debug("Launching Monitor")
        logger.info("===================================================")
        logger.info("  Starting")
        if is_preview:
            logger.info("  Using live preview")
        logger.info("  Press '%s' to save and quit",
                    "Terminate" if self.args.redirect_gui else "ENTER")
        if not self.args.redirect_gui:
            logger.info("  Press 'S' to save model weights immediately")
        logger.info("===================================================")

        keypress = KBHit(is_gui=self.args.redirect_gui)
        err = False
        while True:
            try:
                if is_preview:
                    with self.lock:
                        for name, image in self.preview_buffer.items():
                            cv2.imshow(name, image)  # pylint: disable=no-member
                    cv_key = cv2.waitKey(1000)  # pylint: disable=no-member
                else:
                    cv_key = None

                if thread.has_error:
                    logger.debug("Thread error detected")
                    err = True
                    break
                if self.stop:
                    logger.debug("Stop received")
                    break

                # Preview Monitor
                if is_preview and (cv_key == ord("\n") or cv_key == ord("\r")):
                    logger.debug("Exit requested")
                    break
                if is_preview and cv_key == ord("s"):
                    logger.info("Save requested")
                    self.save_now = True

                # Console Monitor
                if keypress.kbhit():
                    console_key = keypress.getch()
                    if console_key in ("\n", "\r"):
                        logger.debug("Exit requested")
                        break
                    if console_key in ("s", "S"):
                        logger.info("Save requested")
                        self.save_now = True

                sleep(1)
            except KeyboardInterrupt:
                logger.debug("Keyboard Interrupt received")
                break
        keypress.set_normal_term()
        logger.debug("Closed Monitor")
        return err
Пример #6
0
    def _check_keypress(self, keypress: KBHit) -> bool:
        """ Check if a keypress has been detected.

        Parameters
        ----------
        keypress: :class:`lib.keypress.KBHit`
            The keypress monitor

        Returns
        -------
        bool
            ``True`` if an exit keypress has been detected otherwise ``False``
        """
        retval = False
        if keypress.kbhit():
            console_key = keypress.getch()
            if console_key in ("\n", "\r"):
                logger.debug("Exit requested")
                retval = True
            if console_key in ("s", "S"):
                logger.info("Save requested")
                self._save_now = True
        return retval
Пример #7
0
    def _monitor(self, thread):
        """ Monitor the background :func:`_training` thread for key presses and errors.

        Returns
        -------
        bool
            ``True`` if there has been an error in the background thread otherwise ``False``
        """
        is_preview = self._args.preview
        logger.debug("Launching Monitor")
        logger.info("===================================================")
        logger.info("  Starting")
        if is_preview:
            logger.info("  Using live preview")
        logger.info("  Press '%s' to save and quit",
                    "Stop" if self._args.redirect_gui or self._args.colab else "ENTER")
        if not self._args.redirect_gui and not self._args.colab:
            logger.info("  Press 'S' to save model weights immediately")
        logger.info("===================================================")

        keypress = KBHit(is_gui=self._args.redirect_gui)
        err = False
        while True:
            try:
                if is_preview:
                    with self._lock:
                        for name, image in self._preview_buffer.items():
                            cv2.imshow(name, image)  # pylint: disable=no-member
                    cv_key = cv2.waitKey(1000)  # pylint: disable=no-member
                else:
                    cv_key = None

                if thread.has_error:
                    logger.debug("Thread error detected")
                    err = True
                    break
                if self._stop:
                    logger.debug("Stop received")
                    break

                # Preview Monitor
                if is_preview and (cv_key == ord("\n") or cv_key == ord("\r")):
                    logger.debug("Exit requested")
                    break
                if is_preview and cv_key == ord("s"):
                    logger.info("Save requested")
                    self._save_now = True

                # Console Monitor
                if keypress.kbhit():
                    console_key = keypress.getch()
                    if console_key in ("\n", "\r"):
                        logger.debug("Exit requested")
                        break
                    if console_key in ("s", "S"):
                        logger.info("Save requested")
                        self._save_now = True

                sleep(1)
            except KeyboardInterrupt:
                logger.debug("Keyboard Interrupt received")
                break
        keypress.set_normal_term()
        logger.debug("Closed Monitor")
        return err