Skip to main content

camera-stream-orbbec

Standalone Orbbec DCW2 ingest extension. It isolates the legacy Orbbec SDK and its NumPy ABI from the main camera-stream server:

Component Environment
DCW2 extension Python 3.10 or 3.11, pyorbbecsdk v1, NumPy 1.26
camera-stream server Python 3.10+, independently resolved main-project dependencies
Transport ZeroMQ DEALER -> server ROUTER ingest endpoint

⚡ Run with uvx

The PyPI wheel bundles the matching Linux Orbbec v1 native runtime. No compiler, SDK installation, or persistent virtual environment is required:

uvx camera-stream server --config /absolute/path/to/server.yaml

uvx --python 3.11 camera-stream-orbbec --download-template
# Edit ./config.yaml: server address, serial, profiles, and alignment.
uvx --python 3.11 camera-stream-orbbec --config ./config.yaml

Supported release wheels are Linux x86_64 with glibc 2.28 or newer and CPython 3.10/3.11. Passing --python 3.11 keeps the legacy SDK ABI explicit even when the host's default Python is newer. Verify the bundled SDK without opening a camera:

uvx --python 3.11 camera-stream-orbbec --doctor

The plugin publishes <camera>/color and, when enabled, <camera>/depth. Both frames from one SDK frameset carry the same frameset_sequence, captured_monotonic_ns, and captured_utc_ns. Set camera.enabled: false to retain the configuration while exiting without opening the device or connecting to the server.

Configuration

server:
  ingest_endpoint: "tcp://192.168.5.24:5557"
  token: null
camera:
  name: dcw2
  enabled: true
  serial: "REPLACE_WITH_DCW2_SERIAL"
streams:
  color:
    profile: {width: 640, height: 480, fps: 15}
    codec: jpeg
    jpeg_quality: 85
  depth:
    enabled: true
    profile: {width: 640, height: 400, fps: 15}
    alignment: color       # native | color
    # scale_m: 0.001       # Optional override if the SDK cannot report it.

alignment: color requests SDK software alignment and emits depth at the color profile resolution. The DCW2 native depth profile is commonly 640x400 at 15 FPS, while aligned output follows the 640x480 color geometry. Use native to avoid resampling; the depth and color coordinates then have different geometries. Depth payloads are unsigned 16-bit little-endian values. Multiply a value by the header's depth_scale_m to obtain metres. The extension converts the SDK's millimetres-per-unit scale to metres per unit. Set scale_m only when a vendor SDK build cannot report the value or reports an incorrect one.

Behavior

  • One latest-frame slot is kept per topic; a slow network never builds a queue.
  • The server claims <camera>/color and <camera>/depth independently. A local topic always wins a collision.
  • The optional server ingest token is sent with every claim.
  • A duplicate local or remote topic is rejected and the plugin exits with a non-zero status instead of silently publishing under another name.
  • The plugin reconnects after a server restart and the server releases idle remote topics according to ingest_policy.topic_lease_s.
  • The server does not decode, transform, or re-encode plugin payloads.

The plugin intentionally does not import the main camera_stream package. If the SDK reports No device connected for an attached camera, install the Orbbec v1 udev rules and verify that the configured serial matches the device.

🛠️ Source development and release

The upstream pyorbbecsdk==1.3.2 Linux wheel is mislabeled and contains macOS ARM binaries. A source checkout can instead build the checksummed official SDK source into its isolated environment:

cd extensions/orbbec-dcw2
uv sync --extra build --extra dev
uv run camera-stream-orbbec --install-sdk
uv run pytest
uv run camera-stream-orbbec --config ./config.yaml

Do not use uv run --active; the SDK must remain isolated from the main server. The release build uses the manylinux_2_28 baseline required by the vendor's prebuilt native library and bundles the runtime plus its Apache 2.0 license:

bash scripts/build_wheels.sh  # Docker is required

Pushing a tag such as camera-stream-orbbec-v0.1.2 runs the two-wheel build in GitHub Actions. Before creating the tag, configure a PyPI Trusted Publisher for workflow orbbec-dcw2-pypi.yml and environment pypi.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (13.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (13.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 13.7 MB
  • Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for camera_stream_orbbec-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6af18df094377e209c2b956b77117de5c7f384c162a5b230dac69154bf1925e7
MD5 797713fe5be742f49cf5035197aa2202
BLAKE2b-256 36539adc0b27e759e9ba08b873cbcd8f82a828cec8bd600bc613754d8175ea3e

See more details on using hashes here.

File details

Details for the file camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 13.7 MB
  • Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for camera_stream_orbbec-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c39a24b3b62e0de563ecbff1e7b040fccbe31ecdb0bafbc483d22884f244ff7
MD5 c0a77badf5653947f4c89ca220a2b34e
BLAKE2b-256 e6050635b9fab292f28f8ed6f582012b843d06a883bd02a834df3b8937465760

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page