szad670401 / HyperLPR

基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.
Apache License 2.0
5.61k stars 2k forks source link
android cpp deep-learning plate-recognition tensorflow

logo_t

HyperLPR3 - High Performance License Plate Recognition Framework.

11

中文文档

Demo APP Installation

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

Specialty

Matters Need Attention:

Python Dependency

Cross-platform support

Platform

Embedded Development Board

CPP Dependency

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: eu31

Linux/Mac Shared Library Compilation

# execute the script
sh command/build_release_linux_share.sh

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

Copy the files you need into your project

Linux/Mac Compiling the Demo

// 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
- You need to prepare NDKS and configure environment variables: $ANDROID_NDK
- Supports cross-compilation on Linux/MacOS
```bash
# execute the script
sh command/build_release_android_share.sh

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

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

Compile with Docker

If you need to compile with docker, we provide a few ways to compile:

1. Compile the Linux-x86 Shared Library using Docker

You need to install docker and docker-compose,Build Image for hyperlpr_build:

docker build -t hyperlpr_build .

Start compiling the shared library:

docker-compose up build_linux_x86_shared_lib

Build dir: build/linux

Android SDK Demo

We have provided a demo project from the Android SDK source: hyperlpr3-android-sdk,You can compile the shared library and use the project as needed.

Quick to use in Android

If you need to quickly integrate our sdk in your own Android project, then you can add the following dependency to your project's build.gradle:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
// Initialization, which can be performed only once, is usually performed at program initialization
HyperLPR3.getInstance().init(this, new HyperLPRParameter());

…

// exec recognition
Plate[] plates =  HyperLPR3.getInstance().plateRecognition(bitmap, HyperLPR3.CAMERA_ROTATION_0, HyperLPR3.STREAM_BGRA);

Know more about: Prj-Android

License Plate Type is Supported(Chinese)

支持

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.

Example

demo

Author

Help