Tutorial: run pipelines on cameras & streams

Your first pipeline ran on a test video. Now point it at the real world: USB cameras, RTSP streams, several sources at once — then add tracking and pose on top.

USB and RTSP pipelines

Point a pipeline at any source

In the Voyager SDK, the source is just the last argument to inference.py. Everything you learned in the first tutorial carries over — swap the source and the same pipeline runs on a camera, a stream, or a mix. You can drive every step here two ways: ask Agent Dev in plain words, or run the command yourself in the workspace terminal.

  1. Run on a USB camera

    Plug in a webcam and use usb:0 as the source — usb:1 for a second camera. Append a format like usb:0:640x480@30 when the camera needs a specific resolution or frame rate.

    prompt

    Run the people detector on my USB camera.

    bash

    ./inference.py yolov8n-coco-onnx usb:0
    ./inference.py yolov8n-coco-onnx usb:0:640x480@30
  2. Point at an RTSP stream

    Network cameras speak RTSP. Pass the stream URL — credentials included — as the source. Add --no-display when the machine is headless.

    prompt

    Point the detector at the parking-lot camera:
    rtsp://user:pass@192.168.1.20:554/stream

    bash

    ./inference.py yolov8n-coco-onnx rtsp://user:pass@ip:port/stream
  3. Run several streams at once

    List several sources and the pipeline fans out across them — cameras and files can mix freely in one run. This is also how you find out how many streams one card can hold.

    bash

    ./inference.py yolov8n-coco-onnx usb:0 usb:1
    ./inference.py yolov8n-coco-onnx usb:0 rtsp://cam1/stream media/traffic1_1080p.mp4
  4. Add tracking

    Detection finds objects per frame; tracking gives them stable IDs across frames. yolov5m-v7-coco-tracker is the most battle-tested tracker pipeline in the SDK. For IDs that survive occlusion and re-entry, run the headline Re-ID tracker, yolox-deep-oc-sort-osnet-membank.

    prompt

    Track the vehicles in this stream and keep their IDs stable.

    bash

    ./inference.py yolov5m-v7-coco-tracker media/traffic1_1080p.mp4
    ./inference.py yolox-deep-oc-sort-osnet-membank usb:0
  5. Try pose estimation

    Same trick, different task: swap the model for a pose network and your camera feed renders live skeletons. yolov8npose-coco is the fast default.

    bash

    ./inference.py yolov8npose-coco usb:0

One pipeline, many variations

  • One pipeline, any source: Sources are just arguments: usb:N, rtsp://…, video files, and images all feed the same pipeline.
  • Multi-stream is built in: Multiple sources in one command fan out across streams — that is also your capacity test.
  • Variations are cheap: Tracking and pose are model swaps, not rewrites — the zoo has prebuilt pipelines for both.

Continue to the model zoo

Next rung: learn what else is in the zoo and how to find it — Run model zoo pipelines.