Skip to main content
STUB DOCUMENT: This page is intentionally minimal and will be expanded with deeper technical details in a future update.
The generic cyberwave-edge-camera-driver subscribes to detection results published by any ML worker on the same Zenoh router and renders bounding boxes + labels on the WebRTC stream before it reaches the frontend. No client-side changes are required.

How it works

  • Frames captured from the camera are published clean on cw/<twin_uuid>/data/frames/<sensor> — ML workers always receive unannotated images.
  • The driver also subscribes to cw/<twin_uuid>/data/detections/**. Any worker that publishes detections on that channel (e.g. detections/ultralytics, detections/onnxruntime) drives the overlay.
  • Bounding boxes are drawn in-place on the capture ndarray before it is handed to the WebRTC encoder, so the browser sees annotated frames without any extra infrastructure.
  • Workers publish every inference — including empty {"detections": []} heartbeats — so the driver’s freshness timer is kept alive between non-empty frames. Batches older than 2 seconds are discarded to avoid stale overlays.

Detection payload schema

Coordinates are in pixel space of the detection frame. The driver rescales them to the capture resolution.

Configuration

Overlays are disabled automatically for twins that declare a depth sensor in their capabilities.

Interop with native drivers

The same channel, payload schema, and staleness policy are used by the C++ OBSBOT driver, so an ML worker only needs to publish once — both driver families render the results identically.