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