UltimateALPR SDK

repository·master·Indexed 20 days ago

https://github.com/doubangotelecom/ultimatealpr-sdk

A high-performance, deep-learning-based Automatic Number Plate Recognition (ANPR) SDK designed for edge devices including ARM, CPU, GPU, and VPU. It supports multiple platforms such as Android, iOS, Raspberry Pi, Windows, Linux, and NVIDIA Jetson, with acceleration options for Amlogic NPU, Intel OpenVINO, and NVIDIA TensorRT. The SDK provides capabilities for license plate detection and classification, including License Plate Country Identification (LPCI), Vehicle Color Recognition (VCR), Vehicle Make Model Recognition (VMMR), and Vehicle Body Style Recognition (VBSR).

Tokens
23.3K
Snippets
53
Records
112
Agent score
72%

What's inside ultimatealpr-sdk

  1. Overview of UltimateALPR SDK features

    master

    UltimateALPR is a high-performance ANPR/ALPR (Automatic Number/License Plate Recognition) engine optimized for CPU, GPU, VPU, and FPGA. It uses deep learning with SIMD ARM NEON optimizations and fixed-point math to achieve high frame rates on low-power devices (e.g., 64fps on Khadas VIM3, 12fps on Raspberry Pi 4).

    Core Features:

    • LPR: License Plate Recognition
    • IENV: Image Enhancement for Night-Vision
    • LPCI: License Plate Country Identification
    • VCR: Vehicle Color Recognition
    • VMMR: Vehicle Make Model Recognition
    • VBSR: Vehicle Body Style Recognition
    • VDT: Vehicle Direction Tracking
    • VSE: Vehicle Speed Estimation

    Supported Languages: C++, C#, Java, and Python.

  2. Understand the C++ Recognizer Sample

    master

    The recognizer sample is reference code designed to demonstrate how to use the C++ API and verify recognition accuracy.

    Important Usage Note: This sample accepts paths to JPEG, PNG, or BMP files as input. This is not the recommended way to use the SDK in production. For optimal performance, you should read data directly from a camera and feed the SDK with uncompressed YUV data to avoid the overhead of file saving or RGB conversion.

  3. Understand the C# API and Recognizer Sample

    master

    The C# API is a wrapper around the underlying C++ API. The recognizer sample application serves as a reference implementation to demonstrate how to use this API and verify accuracy.

    Important Performance Note: While the sample accepts paths to JPEG, PNG, or BMP files, this is not the recommended production method. For optimal performance, you should read data directly from a camera and feed the SDK with uncompressed YUV data to avoid the overhead of file I/O and RGB conversion.

  4. Using TensorRT models on NVIDIA Jetson devices

    master

    The assets/models.tensorrt/ directory contains deep learning models specifically for NVIDIA Jetson devices.

    Important Constraints:

    • This folder is only useful if you are using an NVIDIA Jetson device.
    • The files in this directory are source models and cannot be used directly. They must be built and optimized for your specific target platform.
    • The resulting optimized models (plans) are generated and stored in the optimized/ folder.

    To build and optimize these models, refer to the Jetson building guide.

  5. Explore sample applications by platform

    master

    The ultimatealpr-sdk repository provides various sample applications to demonstrate SDK usage across different platforms and languages. Use the following directory structure to find relevant samples:

    • Android: GUI applications for Android 5.0+ (located in android/).
    • iOS: GUI applications for iOS 8.0+ (located in ios/).
    • C++: Command-line applications for Windows, Raspberry Pi, and Linux (located in c++/). Note: While these can be used for Android or iOS, the platform-specific folders are recommended.
    • C#: Command-line applications (located in csharp/).
    • Java: Command-line applications for all supported platforms (located in java/).
    • Python: Command-line applications for all supported platforms (located in python/).
  6. Supported platforms and architectures for UltimateALPR SDK binaries

    master

    The UltimateALPR SDK provides shared libraries for the following platforms and CPU architectures:

    • Android: arm64-v8a, armeabi-v7a, x86, x86_64
    • iOS: armv7s, arm64
    • Raspberry Pi (Raspbian OS): armv7l
    • Windows: x86_64
    • Linux: x86_64, aarch64
    • NVIDIA Jetson: aarch64

    Runtime Requirement: OpenCL 1.2 or higher is required. OpenCL is loaded at runtime and does not require explicit linking during the build process.

  7. Understand the assets directory structure

    master

    The assets directory contains various resources used by the UltimateALPR SDK. When integrating the SDK into your application, note the following regarding specific folders:

    • fonts: Used for displaying license plates. These are not required in your application.
    • images: Sample images for testing. These are not required in your application.
    • models: Contains Tensorflow models. Not all files are required; refer to models/README.md for specific requirements.
    • models.amlogic_npu: Contains Amlogic NPU models. Refer to models.amlogic_npu/README.md for details.
    • models.openvino: Contains Intel OpenVINO models. Refer to models.openvino/README.md for details.
    • models.tensorrt: Contains NVIDIA TensorRT models. Refer to models.tensorrt/README.md for details.
  8. Android Sample Applications Overview

    master

    The samples/android directory contains three distinct sample applications designed to demonstrate different usage patterns of the UltimateALPR SDK on Android:

    1. Benchmark: Used for performance testing and measuring the SDK's capabilities.
    2. VideoParallel: Demonstrates processing video streams using parallel execution.
    3. VideoSequential: Demonstrates processing video streams using sequential execution.

    For detailed instructions on how to run and test these samples, refer to the [Trying the samples (Android)]](../../README.md#trying-the-samples-android) section in the main repository README.

  9. Understand the Java API and Recognizer Sample

    master

    The Recognizer application is a reference implementation demonstrating how to use the Java API, which acts as a wrapper around the C++ API.

    Important Usage Note: While this sample accepts paths to JPEG, PNG, or BMP files via the --image flag, this is not the recommended way to use the SDK in production. For optimal performance, you should read data directly from a camera and feed the SDK with uncompressed YUV data to avoid the overhead of file saving or RGB conversion.