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
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
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
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
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