


CvTracker C++ lib. Fast cross-platforms video tracking library
CvTracker C++ library version 9.4.1 compiled for OS Windows x64 (other platforms available by request).
LICENSE: We sell compiled version of this library as is, without future updates and technical support according to perpetual non-exclusive royalty-free license. You pay once and can use this library in your software and hardware products without limits. List of files of the compiled version of the library can be found in programmer’s manual. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.
CvTracker C++ library version 9.4.1 compiled for OS Windows x64 (other platforms available by request).
LICENSE: We sell compiled version of this library as is, without future updates and technical support according to perpetual non-exclusive royalty-free license. You pay once and can use this library in your software and hardware products without limits. List of files of the compiled version of the library can be found in programmer’s manual. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.
CvTracker C++ library version 9.4.1 compiled for OS Windows x64 (other platforms available by request).
LICENSE: We sell compiled version of this library as is, without future updates and technical support according to perpetual non-exclusive royalty-free license. You pay once and can use this library in your software and hardware products without limits. List of files of the compiled version of the library can be found in programmer’s manual. Please read the license agreement before purchasing: LICENSE. You can buy technical support service for this product.
Purchase options
You can buy technical support service for this product. Please contact us (info@constantrobotics.com) if you need:
Library for specific platform and OS (Windows and Linux supported).
Buying by bank transfer for company only. You can by additional technical support.
Source code of the library according to LICENSE.
Overview
C++ library CvTracker is intended for automatic object video tracking. The library is written in C++ (C++17 standard) and compatible with any processors and operating systems supporting C++ compiler (C++17 standard) and, optionally CUDA Toolkit for forward and backward FFT operations. The library provides fast calculation, compatibility with low-power processors, high accuracy and contains a lot of additional functions and modes, which allow using it in camera systems of any configuration. It contains an advanced tracking algorithm CSRM developed by ConstantRobotics. The library provides tracking of low-contrast and small-sized objects against a complex background. The library contains a description of the C++ class CvTracker. A single instance of the CvTracker class provides tracking of a single object on video. To track several objects simultaneously, several instances of the CvTracker class must be created. CvTracker library depends on third-party libraries: VTracker interface library (defines programming interface, source code included, Apache 2.0 license) and cuFFT (linked, optional if platform supports CUDA). Additionally demo application depends on third-party libraries: OpenCV open source library (for user interface, linked, version >= 4.5.0, Apache 2.0 license), FormatConverterOpenCv (provides functions to convert pixel formats, source code included) and SimpleFileDialog (file dialog library, source code included, Apache 2.0 license). In the CMake configuration step, the library determines whether CUDA support is available on the device. If CUDA is supported, the library will be compiled using cuFFT. The user can select the computation platform (CPU or GPU) in the library parameters at runtime.
Performance
Processing time per one frame with different parameters. The library is using only 2 CPU cores in multithreading mode. The results have been obtained with benchmark application which process 100 video frames and calculate average processing time per frame:
NXP IMX8M Plus: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 13 msec (~76 fps), 3 color channels (3 CPU cores usage) - 17 msec (~58 fps).
Jetson Nano: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 7 msec (~142 fps), 3 color channels (3 CPU cores usage) - 9 msec (~111 fps).
Jetson Orin NX: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 2.1 msec (~476 fps), 3 color channels (3 CPU cores usage) - 4.0 msec (~250 fps).
Raspberry Pi Zero 2W: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 20 msec (~50 fps), 3 color channels (3 CPU cores usage) - 26 msec (~38 fps).
Raspberry Pi 4B: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 7.1 msec (~140 fps), 3 color channels (3 CPU cores usage) - 12.4 msec (~80 fps).
Raspberry Pi 5: 1 color channel (e.g. thermal cameras, 1 CPU core usage) - 2.3 msec (~434 fps), 3 color channels (3 CPU cores usage) - 4.0 msec (~250 fps).
Demo video
Downloads
Programmer’s manual: DOWNLOAD
Demo application v9.4.1 to test on your video (Windows x64): DOWNLOAD
Demo application v9.3.1 to test on your video (Windows x64): DOWNLOAD
Demo application v9.2.1 to test on your video (Windows x64): DOWNLOAD
Benchmark applications and demo libraries (time restricted) available by request for platforms: NXP IMX8, Jetson Nano, Jetson Orin, Raspberry Zero 2W, 4B, 5 and others.
Simple interface
class CvTracker : public VTracker
{
public:
/// Get string of the library version.
static std::string getVersion();
/// Class constructor.
CvTracker();
/// Class destructor.
~CvTracker();
/// Init video tracker. All params will be set.
bool initVTracker(VTrackerParams& params) override;
/// Set video tracker param.
bool setParam(VTrackerParam id, float value) override;
/// Get video tracker parameter value.
float getParam(VTrackerParam id) override;
/// Get video tracker params (results).
void getParams(VTrackerParams& params) override;
/// Execute command.
bool executeCommand(VTrackerCommand id,
float arg1 = 0,
float arg2 = 0,
float arg3 = 0) override;
/// Process frame. Must be used for each input video frame.
bool processFrame(cr::video::Frame& frame) override;
/// Get image of internal surfaces.
void getImage(int type, cr::video::Frame& image) override;
/// Decode and execute command.
bool decodeAndExecuteCommand(uint8_t* data, int size) override;
};