2023-03-04 20:49:02 +08:00
2023-02-27 15:47:55 +08:00
2023-03-04 20:49:02 +08:00
2023-02-28 13:42:19 +08:00
2023-03-02 15:23:57 +08:00
2023-03-04 20:49:02 +08:00
2023-03-01 17:16:01 +08:00
2023-03-02 12:06:10 +08:00
2023-02-27 15:47:55 +08:00
2023-02-27 15:47:55 +08:00
2023-02-27 16:25:41 +08:00
2023-03-02 16:02:32 +08:00
2023-03-02 16:02:32 +08:00

logo_t

HyperLPR3 - High Performance License Plate Recognition Framework.

11

中文文档

Quick installation

python -m pip install hyperlpr3

support:python3, Windows, Mac, Linux, Raspberry Pi。
720p cpu real-time (st on MBP r15 2.2GHz haswell).

Quick Test

# image url
lpr3 sample -src https://koss.iyong.com/swift/v1/iyong_public/iyong_2596631159095872/image/20190221/1550713902741045679.jpg

# image path
lpr3 sample -src images/test_img.jpg -det high

How to Use

# import opencv
import cv2
# import hyperlpr3
import hyperlpr3 as lpr3

# Instantiate object
catcher = lpr3.LicensePlateCatcher()
# load image
image = cv2.imread("images/test_img.jpg")
# print result
print(catcher(image))

Start the WebAPI service

# start server
lpr3 rest --port 8715 --host 0.0.0.0

Path to open SwaggerUI after startup:http://localhost:8715/api/v1/docs View and test the online Identification API service:

swagger_ui

Q&A

Q:Whether the accuracy of android in the project is consistent with that of apk-demo?

A:Please compile or download the Android shared library from the release and copy it to Prj-Android for testing。

Q:Source of training data for license plates?

A:Since the license plate data used for training involves legal privacy and other issues, it cannot be provided in this project. Open more big data sets CCPD registration dataset。

Q:Provision of training code?

A:The resources provide the old training code, and the training methods for HyperLPR3 will be sorted out and presented later。

Resources

Other Versions

TODO

  • Support for rapid deployment of WebApi services
  • Support multiple license plates and double layers
  • Support large Angle license plate
  • Lightweight recognition model

Specialty

  • 720p faster, single core Intel 2.2G CPU (MaBook Pro 2015) average recognition time is less than 100ms
  • End-to-end license plate recognition does not require character segmentation
  • The recognition rate is high, and the accuracy of the entrance and exit scene is about 95%-97%
  • Support cross-platform compilation and rapid deployment

Matters Need Attention:

  • The C++ and Python implementations of this project are separate
  • When compiling C++ projects, OpenCV 4.0 and MNN 2.0 must be used, otherwise it will not compile
  • Android project compilation ndk as far as possible to use version 21

Python Dependency

  • opencv-python (>3.3)
  • onnxruntime (>1.8.1)
  • fastapi (0.92.0)
  • uvicorn (0.20.0)
  • loguru (0.6.0)
  • python-multipart
  • tqdm
  • requests

Cross-platform support

Platform

  • Linux: x86、Armv7、Armv8
  • MacOS: x86
  • Android: arm64-v8a、armeabi-v7a

Embedded Development Board

  • Rockchip: rv1109rv1126(RKNPU)

CPP Dependency

  • Opencv 4.0 above
  • MNN 2.0 above

C/C++ Compiling Dependencies

Compiling C/C++ projects requires the use of third-party dependency libraries. After downloading the library, unzip it, and put it into the root directory (the same level as CMakeLists.txt) by copying or soft linking.baidu drive code: 5duf

Linux/Mac Shared Library Compilation

  • Need to place or link dependencies in the project root (same level as CMakeLists.txt)
# execute the script
sh command/build_release_linux_share.sh

Compiled to the build/linux/install/hyperlpr3 dir,Which contains:

  • include - header file
  • lib - shared dir
  • resource - test-images and models dir

Copy the files you need into your project

Linux/Mac Compiling the Demo

  • You need to complete the compilation action of the previous step,And ensure that the compilation is successful and the compiled file is placed in the root directory: build/linux/install/hyperlpr3
  • Go to the Prj-Linux folder
# go to Prj-linux
cd Prj-Linux
# make build and enter
mkdir build && cd build
# Start compiling
cmake .. && make -j

The executable program is generated after compilation: PlateRecDemo,and Run the program

# first param models dir, second param image path
./PlateRecDemo ../hyperlpr3/resource/models/r2_mobile ../hyperlpr3/resource/images/test_img.jpg

Linux/Mac Quick Use SDK Code Example

// Load image
cv::Mat image = cv::imread(image_path);
// Create a ImageData
HLPR_ImageData data = {0};
data.data = image.ptr<uint8_t>(0);         // Setting the image data flow
data.width = image.cols;                   // Setting the image width
data.height = image.rows;                  // Setting the image height
data.format = STREAM_BGR;                  // Setting the current image encoding format
data.rotation = CAMERA_ROTATION_0;         // Setting the current image corner
// Create a Buffer
P_HLPR_DataBuffer buffer = HLPR_CreateDataBuffer(&data);

// Configure license plate recognition parameters
HLPR_ContextConfiguration configuration = {0};
configuration.models_path = model_path;         // Model folder path
configuration.max_num = 5;                      // Maximum number of license plates
configuration.det_level = DETECT_LEVEL_LOW;     // Level of detector
configuration.use_half = false;
configuration.nms_threshold = 0.5f;             // Non-maxima suppress the confidence threshold
configuration.rec_confidence_threshold = 0.5f;  // License plate number text threshold
configuration.box_conf_threshold = 0.30f;       // Detector threshold
configuration.threads = 1;
// Instantiating a Context
P_HLPR_Context ctx = HLPR_CreateContext(&configuration);
// Query the Context state
HREESULT ret = HLPR_ContextQueryStatus(ctx);
if (ret != HResultCode::Ok) {
    printf("create error.\n");
    return -1;
}
HLPR_PlateResultList results = {0};
// Execute LPR
HLPR_ContextUpdateStream(ctx, buffer, &results);

for (int i = 0; i < results.plate_size; ++i) {
	// Getting results
    std::string type;
    if (results.plates[i].type == HLPR_PlateType::PLATE_TYPE_UNKNOWN) {
        type = “Unknown";
    } else {
        type = TYPES[results.plates[i].type];
    }

    printf("<%d> %s, %s, %f\n", i + 1, type.c_str(),
           results.plates[i].code, results.plates[i].text_confidence);
}

// Release Buffer
HLPR_ReleaseDataBuffer(buffer);
// Release Context
HLPR_ReleaseContext(ctx);

Android: Compile the Shared Library

  • The first step is to install third-party dependencies
# execute the script
sh command/build_release_android_share.sh

Compiled to the: build/release_android/,Which contains:

  • arm64-v8a - 64bit shard library
  • armeabi-v7a - 32bit shard library

After compiling,Copyarm64-v8aandarmeabi-v7a dirs to Prj-Android/hyperlpr3/libs,And compile the Prj-Android project to use.

License Plate Type is Supported(Chinese)

支持

  • 单行蓝牌
  • 单行黄牌
  • 新能源车牌
  • 教练车牌

有限支持

  • 白色警用车牌
  • 使馆/港澳车牌
  • 双层黄牌
  • 武警车牌

待支持

  • 民航车牌
  • 双层武警
  • 双层军牌
  • 双层农用车牌
  • 双层个性化车牌
  • License plates from more countries
Note:Due to some imbalanced samples during training, some special license plates have low recognition rates, such as (Embassy/Hong Kong and Macao license plates), which will be improved in the subsequent versions.

Demo APP Install

Help

  • HyperInspire QQ Group: 529385694
S
Description
可生成Windows平台动态库(DLL)的HyperLPR项目 原库:https://github.com/szad670401/HyperLPR
Readme
364 MiB
Languages
C++ 83.9%
Python 6.6%
CMake 4.4%
C 2.7%
Java 1.9%
Other 0.5%