Skip to content

Latest commit

 

History

History
 
 

c++

There are 3 C++ samples: Benchmark, Recognizer and RuntimeKey. Check here, here and here on how to build and use them.

The C++ samples are common to all platforms: Android, Windows, iOS, Raspberry Pi (3 or 4), Linux...

For Android, we recommend using the Java samples under android folder. These are complete samples with support for reatime recognition from video stream (camera) and require Android Studio to build. More info on how to install these samples is available here.

GPGPU acceleration

We use Tensorflow and OpenVINO as deep learning frameworks. The current repository contains Tensorflow libraries built without GPU functions to reduce the size. Also, few developers need GPGPU accelerated libraries. The GPU libraries will work on your device even if you don't have NVIDIA GPU.

OpenVINO

By default we use the "CPU" device when OpenVINO is enabled. If you have an Intel GPU and want to use it, then change the device type to "GPU" (--openvino_device="GNA"|"HETERO"|"CPU"|"MULTI"|"GPU"|"MYRIAD"|"HDDL"|"FPGA" command). More information at https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html#openvino-device.

Myriad

To run UltimateALPR on Myriad VPU you'll need version v3.3.5 or later. Windows 10+ is also required.

You have to run the sample applications with the following options: --openvino_enabled true --openvino_device MYRIAD. The device name is case-sensitive.

  • If you get Can not init Myriad device: NC_MVCMD_NOT_FOUND, make sure the driver is correctly installed as explained here. You can find these driver files in the binaries folder but we recommend using yours.
  • If you get Can not init Myriad device: NC_ERROR, make sure you're using v3.3.5 or later. Check issue #133 for more info.

Tensorflow libraries

The Tensorflow libraries are hosted at:

Windows

To use the Tensorflow version with GPU funtions you'll need to download [1], extract tensorflow.dll and override CPU-only tensorflow.dll in binaries/windows/x86_64

Linux

On Linux x86_64, libtensorflow.so is missing in the binaries folder. You'll need to download your preferred Tensorflow version ([3] or [4]) and copy the content to binaries/linux/x86_64.

NVIDIA Jetson

On NVIDIA Jetson TX1/TX2/Nano and Xavier AGX/NX libtensorflow_cc.so is only needed if you're using binaries in jetson_tftrt. You don't need Tensorflow to use the binaries under jetson. The difference between jetson_tftrt and jetson binaries is explained here.

If you're using jetson_tftrt instead of jetson then, you'll need to run the ./prepare.sh script as explained here to download Tensorflow C++ libraries.

Migration to Tensorflow 2.x and CUDA 11.x

Our SDK is built and shipped with Tensorflow 1.x to make it work on oldest NVIDIA GPUs. If you want to use newest NVIDIA GPUs (e.g. RTX3060) which requires CUDA 11.x, then you'll need to upgrade the Tensorflow version. Check https://www.tensorflow.org/install/source#gpu to know which CUDA version is required for your Tensorflow version.

This section is about Tensorflow 2.6, Ubuntu 20.04.2 LTS, NVIDIA RTX3060 GPU and cuda_11.1.TC455_06.29190527_0. Tensorflow 2.6 is the latest (11/29/2021) public version published at https://www.tensorflow.org/install/lang_c. Please note that we use CUDA 11.1 instead of 11.2 as suggested at https://www.tensorflow.org/install/source#gpu but both will work.

cd ultimateALPR-SDK/binaries/linux/x86_64
wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz
tar -xf libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz
cp lib/* .

make sure you don't have older Tensorflow binaries in that directory. ls from the current folder will give you libtensorflow_framework.so libtensorflow_framework.so.2 libtensorflow_framework.so.2.6.0 libtensorflow.so libtensorflow.so.2 libtensorflow.so.2.6.0

  • Checking dependencies and workaround

Now when you run ldd libultimate_alpr-sdk.so you'll see libtensorflow.so.1 => not found. That's normal because the SDK is built for Tensorflow 1.x. Do not worry, we use the C-API which is the same for all Tensorflow versions.

The litte trick is to rename the symbolic link: mv libtensorflow.so.2 libtensorflow.so.1

That's it, you're ready to use the SDK

Check the benchmark numbers if you want to know how fast the SDK runs on RTX3060.

Cross compilation

Every sample contain a single C++ source file and is easy to cross compile.

Raspberry Pi (Raspbian OS)

This section explain how to install Raspberry Pi 4 (Raspbian OS) toolchain to cross compile the samples. These instructions can be easily adapted to another target platform (e.g Android).

Installing the toolchain

Windows

The toolchain for Raspberry Pi 4 could be found at http://sysprogs.com/getfile/566/raspberry-gcc8.3.0.exe and more toolchain versions are at https://gnutoolchains.com/raspberry/.

If you haven't changed the installation dir then, it should be installed at C:\SysGCC. To add the toolchain to the %PATH:

set PATH=%PATH%;C:\SysGCC\raspberry\bin

Ubuntu

sudo apt-get update
sudo apt-get install crossbuild-essential-armhf

Known issues

  • On Linux you may get [CompVSharedLib] Failed to load library with path=<...>libultimatePluginOpenVINO.so, Error: 0xffffffff. Make sure to set LD_LIBRARY_PATH to add binaries folder to help the loader find all dependencies. You can also run ldd libultimatePluginOpenVINO.so to see which libraries are missing.
  • On Linux you may get 'GLIBC_2.27' not found (required by <...>). This message means you're using an old glibc version. Update glibc or your OS to Ubuntu 18, Debian Buster... You can check your actual version by running ldd --version.