Skip to main content

hub-detection

Use for object detection and tracking nodes in dora. Triggers on: dora-yolo, dora-sam2, dora-cotracker, YOLO, YOLOv8, SAM, SAM2, CoTracker, object detection, segmentation, tracking, bounding box, mask, point tracking, 目标检测, 分割, 跟踪, 边界框

Jump to install

Source facts

Repository
ZhangHanDong/dora-skills
Last source activity
January 21, 2026 at 16:16
Detected SKILL.md language
English
Stars
7
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
hub-detection
description
Use for object detection and tracking nodes in dora. Triggers on: dora-yolo, dora-sam2, dora-cotracker, YOLO, YOLOv8, SAM, SAM2, CoTracker, object detection, segmentation, tracking, bounding box, mask, point tracking, 目标检测, 分割, 跟踪, 边界框
globs
["**/dataflow.yml","**/dataflow.yaml"]
source
https://github.com/dora-rs/dora-hub
# Object Detection & Tracking Nodes > YOLO detection, SAM2 segmentation, and CoTracker point tracking ## Available Detection Nodes | Node | Install | Description | GPU Required | |------|---------|-------------|--------------| | dora-yolo | `pip install dora-yolo` | YOLOv8 object detection | Recommended | | dora-sam2 | `pip install dora-sam2` | Segment Anything 2 | Required (CUDA) | | dora-cotracker | `pip install dora-cotracker` | Point tracking | Recommended | ## dora-yolo YOLOv8 object detection with bounding boxes, confidence scores, and labels. ### YAML Configuration ```yaml - id: yolo build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs: - bbox env: MODEL: yolov8n.pt # yolov5n, yolov8n/s/m/l/x ``` ### Input Format ```python # image: UInt8Array metadata = { "width": 640, "height": 480, "encoding": "bgr8" # or "rgb8" } ``` ### Output Format (bbox) ```python # StructArray with bounding boxes bbox = { "bbox": np.array([x1,y1,x2,y2, ...]).flatten(), # xyxy format "conf": np.array([0.95, 0.87, ...]), # confidence scores "labels": np.array(["person", "car", ...]) # class names } metadata = {"format": "xyxy", "primitive": "boxes2d"} ``` ### Decoding Bounding Boxes ```python bbox_data = event["value"][0] bbox = { "bbox": bbox_data["bbox"].values.to_numpy().reshape(-1, 4), "conf": bbox_data["conf"].values.to_numpy(), "labels": bbox_data["labels"].values.to_numpy(zero_copy_only=False) } # Draw boxes for i, box in enumerate(bbox["bbox"]): x1, y1, x2, y2 = box.astype(int) label = bbox["labels"][i] conf = bbox["conf"][i] cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(frame, f"{label} {conf:.2f}", (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) ``` ## dora-sam2 Segment Anything Model 2 for object segmentation. ### Requirements - NVIDIA GPU with CUDA support ### YAML Configuration ```yaml - id: sam2 build: pip install dora-sam2 path: dora-sam2 inputs: image: camera/image bbox: yolo/bbox # Optional: use YOLO boxes as prompts outputs: - masks # UInt8Array segmentation masks ``` ### Output Format ```python # masks: UInt8Array metadata = { "width": 640, "height": 480, "primitive": "masks" } ``` ### YOLO + SAM2 Pipeline ```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: sam2 build: pip install dora-sam2 path: dora-sam2 inputs: image: camera/image bbox: yolo/bbox outputs: - masks - id: rerun build: pip install dora-rerun path: dora-rerun inputs: image: camera/image detections: yolo/bbox segmentation: sam2/masks ``` ## dora-cotracker Real-time point tracking using Facebook's CoTracker model. ### YAML Configuration ```yaml - id: tracker build: pip install dora-cotracker path: dora-cotracker inputs: image: camera/image points_to_track: detector/points # Optional programmatic input outputs: - tracked_image # Visualization with tracked points - tracked_points # Current point positions ``` ### Interactive Usage - Left-click in "Raw Feed" window to add tracking points - Points assigned unique IDs (C0, C1 for clicks, I0, I1 for inputs) ### Programmatic Point Input ```python import numpy as np import pyarrow as pa # Send points to track points = np.array([ [320, 240], # Center [160, 120], # Top-left [480, 360] # Bottom-right ], dtype=np.float32) node.send_output("points_to_track", pa.array(points.ravel()), { "num_points": len(points), "dtype": "float32", "shape": (len(points), 2) }) ``` ### Output Format ```python # tracked_points: Float32Array # Same format as input points metadata = { "num_points": N, "dtype": "float32", "shape": (N, 2) } ``` ### YOLO Detection to CoTracker Pipeline ```yaml nodes: - id: camera build: pip install opencv-video-capture path: opencv-video-capture inputs: tick: dora/timer/millis/100 outputs: - image env: ENCODING: "rgb8" IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480 - id: yolo build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs: - bbox - centroids # Custom output: detection centers - id: tracker build: pip install dora-cotracker path: dora-cotracker inputs: image: camera/image points_to_track: yolo/centroids outputs: - tracked_image - tracked_points - id: rerun build: pip install dora-rerun path: dora-rerun inputs: raw_image: camera/image tracking_viz: tracker/tracked_image ``` ## Bounding Box Data Format ### Sending Bounding Boxes ```python import pyarrow as pa import numpy as np # Create bbox structure bbox_dict = { "bbox": np.array([x1, y1, x2, y2, ...], dtype=np.float32), "conf": np.array([0.95, ...], dtype=np.float32), "labels": np.array(["person", ...]) } # Encode as Arrow encoded = pa.array([bbox_dict]) node.send_output("bbox", encoded, { "format": "xyxy", "primitive": "boxes2d" }) ``` ### Box Format Conversion ```python # xyxy to xywh def xyxy_to_xywh(box): x1, y1, x2, y2 = box return [x1, y1, x2 - x1, y2 - y1] # xywh to xyxy def xywh_to_xyxy(box): x, y, w, h = box return [x, y, x + w, y + h] ``` ## Complete Detection Pipeline ```yaml nodes: - id: camera build: pip install opencv-video-capture path: opencv-video-capture inputs: tick: dora/timer/millis/33 outputs: - image env: IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480 - id: yolo build: pip install dora-yolo path: dora-yolo inputs: image: camera/image outputs: - bbox env: MODEL: yolov8n.pt - id: rerun build: pip install dora-rerun path: dora-rerun inputs: camera_feed: source: camera/image metadata: primitive: "image" detections: source: yolo/bbox metadata: primitive: "boxes2d" env: IMAGE_WIDTH: 640 IMAGE_HEIGHT: 480 ``` ## Related Skills - **hub-camera** - Camera input nodes - **hub-visualization** - Rerun visualization - **domain-vision** - Vision pipeline patterns
View on GitHub