Skip to main content

hub-visualization

Use for visualization nodes in dora. Triggers on: dora-rerun, opencv-plot, rerun, visualization, plot, display, image display, bounding box visualization, 3D visualization, depth visualization, 可视化, 显示, 绘图

معلومات المصدر

المستودع
ZhangHanDong/dora-skills
آخر نشاط في المصدر
٢١ يناير ٢٠٢٦ في ١٦:١٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٧
التفرعات
١

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
hub-visualization
description
Use for visualization nodes in dora. Triggers on: dora-rerun, opencv-plot, rerun, visualization, plot, display, image display, bounding box visualization, 3D visualization, depth visualization, 可视化, 显示, 绘图
globs
["**/dataflow.yml","**/dataflow.yaml"]
source
https://github.com/dora-rs/dora-hub
# Visualization Nodes > Rerun and OpenCV visualization for images, 3D data, and telemetry ## Available Visualization Nodes | Node | Install | Description | |------|---------|-------------| | dora-rerun | `pip install dora-rerun` | Comprehensive visualization with Rerun | | opencv-plot | `pip install opencv-plot` | Simple OpenCV image + bbox display | ## dora-rerun Powerful visualization using Rerun with 12 supported primitives. ### Installation ```bash pip install dora-rerun ``` ### YAML Configuration ```yaml - id: rerun build: pip install dora-rerun path: dora-rerun inputs: camera_feed: camera/image detections: yolo/bbox depth_sensor: realsense/depth env: IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480 RERUN_MEMORY_LIMIT: 25% README: | # My Visualization Description shown in Rerun ``` ### Primitive-Based Visualization (v0.24.0+) All inputs require a `primitive` metadata field to specify visualization type. #### Method 1: Explicit Metadata in YAML ```yaml inputs: front_camera: source: camera/image metadata: primitive: "image" depth_sensor: source: realsense/depth metadata: primitive: "depth" focal: [600, 600] camera_position: [0, 0, 0] ``` #### Method 2: Sender Includes Primitive ```python # Sender node includes primitive in metadata node.send_output("image", image_data, { "width": 640, "height": 480, "encoding": "bgr8", "primitive": "image" }) ``` ### Supported Primitives | Primitive | Data Type | Required Metadata | |-----------|-----------|-------------------| | image | UInt8Array | width, height, encoding | | depth | Float32Array | width, height | | text | StringArray | - | | boxes2d | StructArray/Float32Array | format: "xyxy" or "xywh" | | boxes3d | Float32Array | format, solid, color | | masks | UInt8Array | width, height | | jointstate | Float32Array | (requires URDF config) | | pose | Float32Array [x,y,z,qx,qy,qz,qw] | - | | series | Float32Array | - | | points3d | Float32Array | color, radii | | points2d | Float32Array | - | | lines3d | Float32Array | color, radius | ### Primitive Details #### image ```python metadata = { "primitive": "image", "width": 640, "height": 480, "encoding": "bgr8" # bgr8, rgb8, jpeg, png, avif } ``` #### depth (with 3D reconstruction) ```python metadata = { "primitive": "depth", "width": 640, "height": 480, "camera_position": [0, 0, 0], # [x, y, z] "camera_orientation": [0, 0, 0, 1], # [qx, qy, qz, qw] "focal": [600, 600], # [fx, fy] "principal_point": [320, 240] # [cx, cy] optional } ``` #### boxes2d ```python bbox = { "bbox": np.array([x1,y1,x2,y2,...]).flatten(), "conf": np.array([0.95,...]), "labels": np.array(["person",...]) } metadata = {"primitive": "boxes2d", "format": "xyxy"} ``` #### boxes3d ```python # center_half_size format (default) boxes = np.array([cx,cy,cz, hx,hy,hz, ...]) metadata = { "primitive": "boxes3d", "format": "center_half_size", # or "center_size", "min_max" "solid": False, # wireframe (default) or solid "color": [255, 0, 0] # RGB } ``` #### points3d ```python points = np.array([x1,y1,z1, x2,y2,z2, ...], dtype=np.float32) metadata = { "primitive": "points3d", "color": [0, 255, 0], "radii": [0.01, 0.01, ...] } ``` #### lines3d ```python # Line segments: pairs of xyz points lines = np.array([x1,y1,z1, x2,y2,z2, ...], dtype=np.float32) metadata = { "primitive": "lines3d", "color": [0, 0, 255], "radius": 0.005 } ``` #### pose ```python # 7 values: position + quaternion pose = np.array([x, y, z, qx, qy, qz, qw], dtype=np.float32) metadata = {"primitive": "pose"} ``` #### jointstate (with URDF) ```yaml - id: rerun path: dora-rerun inputs: jointstate_robot: arm/joint_state env: robot_urdf: /path/to/robot.urdf robot_transform: "0 0.3 0" # x y z offset ``` ### Complete Visualization Example ```yaml nodes: - id: camera build: pip install opencv-video-capture path: opencv-video-capture inputs: tick: dora/timer/millis/33 outputs: - image - id: yolo build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs: - bbox - id: vlm build: pip install dora-qwen2-5-vl path: dora-qwen2-5-vl inputs: image: source: camera/image queue_size: 1 outputs: - text env: DEFAULT_QUESTION: "Describe the scene." - id: rerun build: pip install dora-rerun path: dora-rerun inputs: camera: source: camera/image metadata: primitive: "image" detections: source: yolo/bbox metadata: primitive: "boxes2d" description: source: vlm/text metadata: primitive: "text" env: IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480 RERUN_MEMORY_LIMIT: 25% ``` ## opencv-plot Simple OpenCV visualization with image, bounding boxes, and text overlay. ### YAML Configuration ```yaml - id: plot build: pip install opencv-plot path: opencv-plot inputs: image: camera/image bbox: yolo/bbox text: vlm/text env: PLOT_WIDTH: 640 # Optional, defaults to image width PLOT_HEIGHT: 480 # Optional, defaults to image height ``` ### Input Formats **image:** UInt8Array ```python metadata = {"width": 640, "height": 480, "encoding": "bgr8"} ``` **bbox:** StructArray ```python bbox = { "bbox": np.array([x1,y1,x2,y2,...]), "conf": np.array([0.95,...]), "labels": np.array(["person",...]) } metadata = {"format": "xyxy"} ``` **text:** StringArray ```python text = pa.array(["Detection: person 95%"]) ``` ### Simple Camera + Detection Visualization ```yaml nodes: - id: camera build: pip install opencv-video-capture path: opencv-video-capture inputs: tick: dora/timer/millis/33 outputs: - image - id: yolo build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs: - bbox - id: plot build: pip install opencv-plot path: opencv-plot inputs: image: camera/image bbox: yolo/bbox ``` ## Migration to dora-rerun v0.24.0 ### Old Way (still works with auto-detection) ```yaml inputs: image: camera/image # Primitive inferred from "image" in name ``` ### New Way (recommended) ```yaml inputs: front_camera: source: camera/image metadata: primitive: "image" ``` ## Environment Variables | Variable | Description | |----------|-------------| | IMAGE_WIDTH | Default image width | | IMAGE_HEIGHT | Default image height | | RERUN_MEMORY_LIMIT | Memory limit (e.g., "25%", "1GB") | | README | Markdown text shown in Rerun | | *_urdf | Path to URDF file for joint visualization | | *_transform | Position offset "x y z" for URDF | ## Related Skills - **hub-camera** - Camera input nodes - **hub-detection** - Detection output visualization - **hub-robot** - Joint state visualization
عرض على GitHub