Feature: OpenCV plot node for dora dataflows #1

Closed
opened 2026-09-10 21:53:29 +00:00 by cristhian · 0 comments
Owner

Feature: OpenCV plot node for dora dataflows

User Story

As a developer debugging a dora vision pipeline,
I want a node that displays a video stream with bounding boxes and text drawn over it,
so that I can see what the pipeline is producing without writing frames to disk or adding a viewer to every node.

Requirements

  • Display a video stream in a window, redrawing on every image event.
  • Overlay bounding boxes (rectangle plus label, conf) and a text caption, both updated by their own inputs and drawn on the next redraw.
  • Accept the image encodings a dora camera can emit: bgr8, rgb8, jpeg/jpg/jpe/bmp/webp/png, yuv420, avif.
  • Accept both xyxy and xywh bounding-box formats.
  • Optional resizing of the displayed frame via PLOT_WIDTH/PLOT_HEIGHT.
  • Run headless in CI: decode every input but open no window.
  • Install with no system packages and no compiler, on linux-aarch64 (Jetson) and linux-x86_64 alike.
  • Ship a dora 1.0 node manifest so a consumer's dataflow fails validation on a wiring mistake rather than at runtime.

Acceptance Criteria

  • uv sync installs the node on aarch64 and x86_64 without apt packages or a compiler
  • Every listed encoding decodes to a BGR frame, verified by tests
  • xywh boxes are converted to xyxy corners
  • CI=true suppresses the window while still decoding every input
  • dora validate dataflow.yml passes under strict_types: true
  • Tests and lint run without a camera, a dataflow or a display

Notes

Based on opencv-plot from dora-hub, brought up to the dora 1.0 node contract and packaged with uv.

The node is deliberately Python rather than Rust. The opencv Rust crate generates its bindings from the OpenCV headers installed on the build machine, so it requires libopencv-dev and libclang-dev per machine and per architecture and does not cross-compile — which fails the multiarch requirement above. opencv-python ships prebuilt wheels for every target instead, and AVIF support comes from pillow-avif-plugin rather than OpenCV, which cannot decode it before 4.10.

Intended first consumer: liria/dora-zed, whose image_bgr output already carries the width, height and encoding metadata this node expects.

# Feature: OpenCV plot node for dora dataflows ## User Story As a developer debugging a dora vision pipeline, I want a node that displays a video stream with bounding boxes and text drawn over it, so that I can see what the pipeline is producing without writing frames to disk or adding a viewer to every node. ## Requirements - Display a video stream in a window, redrawing on every `image` event. - Overlay bounding boxes (rectangle plus `label, conf`) and a text caption, both updated by their own inputs and drawn on the next redraw. - Accept the image encodings a dora camera can emit: `bgr8`, `rgb8`, `jpeg`/`jpg`/`jpe`/`bmp`/`webp`/`png`, `yuv420`, `avif`. - Accept both `xyxy` and `xywh` bounding-box formats. - Optional resizing of the displayed frame via `PLOT_WIDTH`/`PLOT_HEIGHT`. - Run headless in CI: decode every input but open no window. - Install with no system packages and no compiler, on linux-aarch64 (Jetson) and linux-x86_64 alike. - Ship a dora 1.0 node manifest so a consumer's dataflow fails validation on a wiring mistake rather than at runtime. ## Acceptance Criteria - [ ] `uv sync` installs the node on aarch64 and x86_64 without apt packages or a compiler - [ ] Every listed encoding decodes to a BGR frame, verified by tests - [ ] `xywh` boxes are converted to `xyxy` corners - [ ] `CI=true` suppresses the window while still decoding every input - [ ] `dora validate dataflow.yml` passes under `strict_types: true` - [ ] Tests and lint run without a camera, a dataflow or a display ## Notes Based on [`opencv-plot`](https://github.com/dora-rs/dora-hub/tree/main/node-hub/opencv-plot) from dora-hub, brought up to the dora 1.0 node contract and packaged with `uv`. The node is deliberately Python rather than Rust. The `opencv` Rust crate generates its bindings from the OpenCV headers installed on the build machine, so it requires `libopencv-dev` and `libclang-dev` per machine and per architecture and does not cross-compile — which fails the multiarch requirement above. `opencv-python` ships prebuilt wheels for every target instead, and AVIF support comes from `pillow-avif-plugin` rather than OpenCV, which cannot decode it before 4.10. Intended first consumer: [`liria/dora-zed`](https://gitea.liria.cl/liria/dora-zed), whose `image_bgr` output already carries the `width`, `height` and `encoding` metadata this node expects.
cristhian added the feature label 2026-09-10 21:53:29 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: liria/dora-image-view#1