CvTracker C++ lib. Fast cross-platforms video tracking library

€6,000.00

CvTracker C++ video tracking library

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. Source code license also available: LICENSE.

CvTracker C++ video tracking library

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. Source code license also available: LICENSE.

Overview

C++ library CvTracker is intended for automatic object video tracking. The library is written in C++ (C++17 standard) and is compatible with any processors and operating systems that support a C++ compiler (C++17 standard) and, optionally, CUDA Toolkit for forward and backward FFT operations. The library provides fast calculations, compatibility with low-power processors, high accuracy, and contains many additional functions and modes, which allow its use 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 complex backgrounds. The library contains a description of the C++ class CvTracker. A single instance of the CvTracker class provides tracking of a single object in video. To track several objects simultaneously, several instances of the CvTracker class must be created. The 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, custom license similar to the BSD 2-Clause License). Additionally, the CvTracker 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). During 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.

Downloads

Documentation: GO TO DOCUMENTATION
Demo application v9.5.3 to test on your video (Windows x64): DOWNLOAD

Benchmark applications and demo libraries (time restricted) available by request for platforms: NXP IMX8 / IMX95, Jetson Nano, Jetson Orin, Raspberry Zero 2W, 4B, 5 and others

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 (2 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 (2 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 (2 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 (2 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 (2 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 (2 CPU cores usage) - 4.0 msec (~250 fps).

Demo video

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;
};