VPI - Vision Programming Interface

0.3.7 Release

VPI - Vision Programming Interface Documentation

NVIDIA® Vision Programming Interface (VPI) is a software library that provides Computer Vision / Image Processing algorithms implemented on several computing hardware platforms available in NVIDIA embedded or discrete devices.

VPI provides seamless access to a variety of computing hardware that must be accessed through different and sometimes incompatible APIs, such as OpenCV and CUDA SDK, or when public APIs do not exist yet, such as PVA - Programmable Vision Accelerator.

Within VPI, the same algorithm is implemented in different backends, such as CPU, GPU and PVA1. The processing pipeline can be setup to fully utilize the installed computing capacity of the target device. For example, a Deep Learning inference stage can be run for one frame on the GPU while PVA is running a pre-processing stage for the next frame. At the same time, the CPU is free to perform GUI tasks such as showing the current result back to the user, or executing post-processing tasks on the previous frame.

To achieve high throughput, VPI provides seamless shared, zero-copy, memory mapping among the different backends it supports, depending on the memory characteristics (dimensions, element type, alignment, etc). The API is designed so that memory allocations can occur in an initialization stage, usually run once. Then, during the main loop of the application, the algorithms reuses the pre-allocated memory, as needed, avoiding memory fragmentation and enabling usage in contexts that need to conform to stricter memory allocation characteristics, such as automotive software.

Some examples of algorithms provided by VPI:

1 PVA backend is only available on Jetson devices. It exposes all available computing hardware except for CPU and GPU, which are exposed through CPU and CUDA backends respectively. Some PVA algorithms are only available on selected Tegra devices, such as Jetson AGX Xavier and Jetson Xavier NX.