Link Search Menu Expand Document

Depth cameras

The Depth Camera Input device streams color, infrared, depth images and point clouds from depth cameras into ossia score, along with their inertial sensors and settings. It is available in the desktop builds since 3.9.0.

Supported cameras

Camera Linux Windows macOS
Orbbec Femto Mega / Mega i / Bolt yes yes color and infrared only¹
Orbbec Gemini 330 / 335 / 336 / 345, Gemini 2, Astra 2, DaBai yes yes yes
Kinect v2 (Xbox One) yes yes yes
Kinect v1 (Xbox 360) yes yes yes
Azure Kinect DK yes yes no²
Intel RealSense D400 / D500 / L500 / SR300 yes yes yes
Luxonis OAK-D, OAK-1 and OAK-4, including PoE models yes yes yes
Oak3DVision Oak CDK / QCDK (time-of-flight) yes no³ Intel Macs only³

¹ The Femto Mega and Bolt compute depth with an Orbbec depth engine that is not available for macOS. The Gemini and Astra cameras compute depth on the device and are not affected.
² Microsoft never released an Azure Kinect SDK for macOS.
³ The vendor only ships prebuilt binaries for Linux, Intel macOS and 32-bit Windows.

Orbbec Femto Mega cameras and Luxonis OAK PoE cameras also work over Ethernet.

Installation

The device itself ships with ossia score. The camera drivers come as a single Depth cameras package to install from score’s package manager, then restart score.

Linux: install the udev rules

The cameras are accessed over raw USB. Without the matching udev rules, the camera is not accessible and score reports no camera, exactly as if nothing was plugged in. The package contains the rules for all supported cameras:

sudo cp ~/Documents/ossia/score/packages/depth-camera/udev/*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

Then unplug and replug the camera.

Azure Kinect: install Microsoft’s SDK

The Azure Kinect depth engine cannot be redistributed. Install the Azure Kinect Sensor SDK system-wide, or place libk4a and its libk4a1.4/libdepthengine subfolder in the package folder. If it is missing, score’s log says so.

USB 3

The Azure Kinect DK, the Kinect v2 and the RealSense D400 series need a USB 3 port. On USB 2, the Kinect v2 and Azure Kinect do not show their cameras at all, and RealSense cameras fall back to very low frame rates. A USB-C cable does not guarantee a USB 3 port.

Adding the device

In Add device, choose Depth Camera Input in the Video In category. Each installed camera family appears as its own category in the browser, listing the cameras it can see; selecting one fills in its address. Leave the address empty to use the first camera found.

The address can also be typed, for instance to reach a camera by serial number or over the network:

orbbec:sn:CL8L1234ABC          Orbbec camera, by serial number
orbbec:net:192.168.0.12:8090   Femto Mega over Ethernet
freenect2:sn:012345678901      Kinect v2
freenect:index:0               Kinect v1
k4a:sn:000123456789            Azure Kinect
realsense:sn:040322070203      RealSense

If the requested camera is not present, the device does not connect rather than silently using another camera.

Streams

The device has one node per enabled stream:

Node Type Notes
rgb texture Color image. Not available on time-of-flight cameras without a color sensor.
ir texture Infrared image (on a time-of-flight camera, the amplitude image).
depth texture 16-bit depth image.
pointcloud geometry Connect it to a 3D process, such as a model display or any geometry input.
imu/accel, imu/gyro, imu/temperature vec3f / float Inertial sensors, when the camera has them and the Accelerometer / gyroscope option is enabled.

Point cloud positions are in metres, right-handed, with +X to the right, +Y down and +Z forward. Accelerations are in m/s² (including gravity) and angular velocities in rad/s.

Textures can be processed with shaders and the computer vision objects, and the point cloud can be used in 3D scenes.

Camera settings

The settings that each camera’s SDK allows to change appear under a controls node, grouped by what they affect: for instance controls/color/exposure, controls/depth/laser_power or controls/sensors/temperature. They are ordinary parameters with their real type and range: they can be automated, mapped or controlled over OSC. Read-only values (temperatures, measured exposure) are under sensors/, and rarely needed actions such as rebooting the camera are under advanced/.

On Luxonis OAK-D Pro cameras, depth/laser_power turns on the dot projector, which is off by default and needed to measure depth on plain surfaces.

Alignment, resolution and frame rate

Alignment brings the depth and color images into the same frame of reference, and decides the resolution of the point cloud:

  • Color to depth (default): the point cloud has the depth resolution. This is usually the right choice for point clouds.
  • Depth to color: the point cloud has the color resolution, which is much heavier (about five times more points than measured on a Femto Mega). Use it when you need pixel-aligned color and depth images.
  • None: no alignment. A colored point cloud requires an alignment other than None.

Choosing an explicit color resolution is the simplest way to reduce the cost of a depth to color point cloud.

Troubleshooting

Symptom Likely cause
No camera at all in the browser The Depth cameras package is not installed, or score was not restarted after installing it.
One camera family is missing Its udev rules are not installed (Linux), or for Azure Kinect, the Microsoft SDK is missing.
Kinect v2 or Azure Kinect missing, RealSense very slow The camera is on a USB 2 port.
Network Orbbec cameras do not appear A firewall drops the broadcast replies of the cameras (UDP source port 3956), or the camera is on another subnet: type its address instead.
Colored point cloud is greyed out Alignment is set to None.
No controls node The camera’s SDK offers no settings for this model.

Set the environment variable SCORE_DEPTHCAM_DEBUG=1 to log, every second, how many frames each point cloud receives.

More details are in the add-on’s README.