Hardware selection
PC requirements
- Supports recent Ubuntu Linux Long Term Support (LTS) releases (amd64). This is currently our only supported platform.
- Fast CPU. Currently an Intel CPU is recommended due to the use of the Intel Integrated Performance Primitives Library.
- Memory usage is not expected to be particularly high, because processing occurs in realtime.
- Sufficient and fast interfaces to cameras. If your cameras are USB3 or Gigabit ethernet, your computer needs to support enough bandwidth.
- Disk space and speed. For realtime tracking, the tracking data is only modest in size and so no particularly high performance requirements exist. With hardware-accelerated H.264 encoding (see below), compressed video can be saved to MP4 files with only modest CPU and disk requirements. For streaming uncompressed, raw video to disk (with MP4 or the FMF format), very fast disks and lots of disk space are required.
Hardware-accelerated video encoding
H.264 video encoding can be offloaded to hardware, freeing the CPU to continue tracking at full framerate while recording video. Two paths are supported:
NVIDIA NVENC. If an NVIDIA GPU with NVENC support is present, Strand Camera can use it directly via NVIDIA's NVENC library. This requires no additional software beyond the NVIDIA driver. Please see NVIDIA's site for supported hardware.
ffmpeg. Strand Camera can also pipe frames through
ffmpeg for encoding. Any hardware encoder that ffmpeg
supports (including NVIDIA NVENC, Intel Quick Sync, and AMD AMF) can be used
this way, provided the appropriate ffmpeg build and drivers are installed.
Software encoding via ffmpeg (e.g. libx264) is also possible but will use
substantially more CPU.
Camera requirements
Basler cameras using the Pylon API and Allied Vision cameras using the Vimba X API are supported. In addition, consumer webcams (UVC and similar) are supported as a development convenience (see Webcams below).
Basler cameras
Due to the use of the Pylon API, any camera which can be used in the Pylon Viewer can be used in principle. In practice, we regularly test with the following cameras:
- Basler a2A1920-160umPRO
- Basler a2A1920-160umBAS
- Basler acA1300-200um
- Basler acA640-120gm
Allied Vision cameras
Due to the use of the Vimba X API, any camera which can be used in the Vimba Viewer can be used in principle. In practice, we have tested with the following cameras:
- Allied Vision Alvium 1800 U-240m
Webcams
Consumer webcams (UVC and similar) are supported through the webcam camera
backend, which uses the operating system's native capture interface (V4L2 on
Linux, AVFoundation on macOS, and Media Foundation on Windows). This backend is
intended as a development convenience, so that Strand Camera can run without
high-end machine-vision hardware.
Webcams expose almost none of the controls that machine-vision cameras do.
Hardware triggering, exposure time, gain, frame-rate limiting, and the generic
GenICam feature accessors are not available; only device selection, frame
capture, and a choice between RGB8 (default) and Mono8 pixel formats are
supported. Because hardware triggering is unavailable, webcams are not suitable
for synchronized multi-camera 3D tracking with Braid.
Select the webcam backend explicitly (Pylon remains the default):
strand-cam --camera-backend webcam
A specific webcam can be chosen by its human-readable name (as printed at
startup) or by its index. If --camera-name is omitted, the first enumerated
webcam is used:
strand-cam --camera-backend webcam --camera-name "Integrated Camera"
strand-cam --camera-backend webcam --camera-name 0