from enum import Enum from typing import Callable import cv2 import numpy as np class DoraStatus(Enum): CONTINUE = 0 STOP = 1 class Operator: """ Example operator incrementing a counter every times its been called. The current value of the counter is sent back to dora on `counter`. """ def __init__(self): self.counter = 0 def on_input( self, input_id: str, value: bytes, send_output: Callable[[str, bytes], None], ) -> DoraStatus: """Handle input by incrementing count by one. Args: input_id (str): Id of the input declared in the yaml configuration value (bytes): Bytes message of the input send_output (Callable[[str, bytes]]): Function enabling sending output back to dora. """ self.counter += 1 if input_id == "image": frame = np.frombuffer(value, dtype="uint8") frame = np.reshape(frame, (480, 640, 3)) cv2.imshow("frame", frame) if cv2.waitKey(1) & 0xFF == ord("q"): return DoraStatus.STOP if self.counter > 20: return DoraStatus.STOP else: return DoraStatus.CONTINUE def drop_operator(self): cv2.destroyAllWindows()