Skip to content

Vision Libraries (libvl)#

The Vision Libraries (libvl) provide a unified API for camera access, image processing, and encoding on 3dvisionlabs Edge Camera Modules. The library abstracts the underlying camera hardware and Jetson platform, giving you a single interface regardless of the sensor or driver in use.

Key Features#

  • Hardware abstraction — one API for Nvidia Argus, Allied Vision Alvium, and Vision Components cameras
  • Zero-copy image pipeline — CUDA managed memory avoids unnecessary copies between CPU and GPU
  • Streaming & synchronous modes — asynchronous frame delivery via observer pattern, or simple single-shot grabImage()
  • Image post-processing — resize, rotate, flip, pixel format conversion (RGB, Gray, NV12, YUV420)
  • JPEG / PNG encoding — hardware-accelerated encoding with configurable quality
  • Trigger & flash control — software and hardware trigger, flash synchronization
  • Auto exposure & gain — configurable auto control with brightness targets and limits
  • Settings persistence — save and load camera configuration as JSON
  • Multi-language support — native C++, with SWIG-generated bindings for Python and C#

Supported Camera Types#

Factory Function Camera Type Description
makeCamera() Auto-detect Use this. Automatically selects the correct driver
makeAlviumCamera() Allied Vision Alvium Alvium CSI modules via the VimbaX SDK
makeArgusCamera() Nvidia Argus Jetson-native CSI cameras (IMX sensors)
makeVcCamera() Vision Components MIPI CSI-2 modules; routes to Argus or V4L2

Always use makeCamera() unless you have a specific reason not to. It detects the connected hardware and creates the appropriate camera instance, so the same application runs on every C7 generation. The backend-specific factories are meant for diagnostics; hard-coding one ties the application to a single camera generation.

All current C7 cameras use Alvium CSI modules and therefore the VimbaX backend. Older C7 models are built around Vision Components modules: the C7-R12 (IMX412, color) uses Argus, the C7-R20 (IMX183) uses the VC V4L2 implementation. See the compatibility matrix for the full mapping.

Architecture#

┌─────────────────────────────────────────┐
│             Your Application            │
├──────────┬──────────┬───────────────────┤
│   C++    │  Python  │       C#          │
│ (native) │  (SWIG)  │     (SWIG)        │
├──────────┴──────────┴───────────────────┤
│              libvl API                  │
│  ICamera · IFrameObserver · Image       │
│  ImageSettings · Encoding · Types       │
├──────────┬──────────┬───────────────────┤
│  Alvium  │  Argus   │  VC (V4L2/MIPI)   │
│ (VimbaX) │          │                   │
├──────────┴──────────┴───────────────────┤
│    Jetson (Nano / Xavier NX / Orin)     │
└─────────────────────────────────────────┘

Getting Started#

All packages are published to the public package registry of the vl project — a tarball for C++, a NuGet package for C#, and a wheel for Python. No login is required. Sample applications are available in the vl-samples repository.

  • Installation — getting the packages for C++, C# and Python
  • C++ API — native interface with full feature access
  • Python API — convenient wrapper with NumPy integration
  • C# API — .NET bindings via NuGet package
  • Changelog — version history and release notes