# Dora Node for plotting data with OpenCV This node is used to plot a text and a list of bbox on a base image (ideal for object detection). # YAML ```yaml - id: opencv-plot build: pip install ../../node-hub/opencv-plot path: opencv-plot inputs: # image: Arrow array of size 1 containing the base image # bbox: Arrow array of bbox # text: Arrow array of size 1 containing the text to be plotted env: PLOT_WIDTH: 640 # optional, default is image input width PLOT_HEIGHT: 480 # optional, default is image input height ``` # Inputs - `image`: Arrow array containing the base image ```python ## Image data image_data: UInt8Array # Example: pa.array(img.ravel()) metadata = { "width": 640, "height": 480, "encoding": str, # bgr8, rgb8 } ## Example node.send_output( image_data, {"width": 640, "height": 480, "encoding": "bgr8"} ) ## Decoding storage = event["value"] metadata = event["metadata"] encoding = metadata["encoding"] width = metadata["width"] height = metadata["height"] if encoding == "bgr8": channels = 3 storage_type = np.uint8 frame = ( storage.to_numpy() .astype(storage_type) .reshape((height, width, channels)) ) ``` - `bbox`: an arrow array containing the bounding boxes, confidence scores, and class names of the detected objects ```Python bbox: { "bbox": np.array, # flattened array of bounding boxes "conf": np.array, # flat array of confidence scores "labels": np.array, # flat array of class names } encoded_bbox = pa.array([bbox], {"format": "xyxy"}) decoded_bbox = { "bbox": encoded_bbox[0]["bbox"].values.to_numpy().reshape(-1, 4), "conf": encoded_bbox[0]["conf"].values.to_numpy(), "labels": encoded_bbox[0]["labels"].values.to_numpy(zero_copy_only=False), } ``` - `text`: Arrow array containing the text to be plotted ```python text: str encoded_text = pa.array([text]) decoded_text = encoded_text[0].as_py() ``` ## License This project is licensed under Apache-2.0. Check out [NOTICE.md](../../NOTICE.md) for more information.