README_CH.md
python -m pip install hyperlpr3
# 使用命令行测试 - 图像url地址
lpr3 sample -src https://koss.iyong.com/swift/v1/iyong_public/iyong_2596631159095872/image/20190221/1550713902741045679.jpg
# 使用命令行测试 - 本地图像路径
lpr3 sample -src images/test_img.jpg -det high
# 导入opencv库
import cv2
# 导入依赖包
import hyperlpr3 as lpr3
# 实例化识别对象
catcher = lpr3.LicensePlateCatcher()
# 读取图片
image = cv2.imread("images/test_img.jpg")
# 识别结果
print(catcher(image))
# 启动服务
lpr3 rest --port 8715 --host 0.0.0.0
启动后可打开SwaggerUI的路径:http://localhost:8715/api/v1/docs 查看和测试在线识别API服务:
Q:Android识别率没有所传demo apk的识别率高?
A:请自行编译或从release中下载安卓动态库放置于Prj-Android中进行测试。
Q:车牌的训练数据来源?
A:由于用于训练车牌数据涉及到法律隐私等问题,本项目无法提供。开放较为大的数据集有CCPD车牌数据集。
Q:训练代码的提供?
A:相关资源中有提供老版的训练代码,HyperLPR3的训练方法会陆续整理并给出。
Q:关于项目的来源?
A:此项目来源于作者早期的研究和调试代码,代码缺少一定的规范,同时也欢迎PR。
待补充...欢迎投稿
编译C/C++工程需要使用第三方依赖库,将库下载后解压,并将其通过拷贝或软链接放入根目录(与CMakeLists.txt同级)即可,依赖的库下载地址:百度网盘 code: eu31
# 执行编译脚本
sh command/build_release_linux_share.sh
编译后的相关物料放置于根目录下build/linux/install/hyperlpr3中,其中包含:
按需取走需要的文件即可
# 进入到子工程demo
cd Prj-Linux
# 执行编译脚本
sh build.sh
编译完成后生成可执行程序PlateRecDemo,执行运行测试
# 进入编译目录
cd build/
# 传入模型文件夹路径和需要预测的图像执行程序
./PlateRecDemo ../hyperlpr3/resource/models/r2_mobile ../hyperlpr3/resource/images/test_img.jpg
// 读取图像
cv::Mat image = cv::imread(image_path);
// 创建ImageData
HLPR_ImageData data = {0};
data.data = image.ptr<uint8_t>(0); // 设置图像数据流
data.width = image.cols; // 设置图像宽
data.height = image.rows; // 设置图像高
data.format = STREAM_BGR; // 设置当前图像编码格式
data.rotation = CAMERA_ROTATION_0; // 设置当前图像转角
// 创建数据Buffer
P_HLPR_DataBuffer buffer = HLPR_CreateDataBuffer(&data);
// 配置车牌识别参数
HLPR_ContextConfiguration configuration = {0};
configuration.models_path = model_path; // 模型文件夹路径
configuration.max_num = 5; // 最大识别车牌数量
configuration.det_level = DETECT_LEVEL_LOW; // 检测器等级
configuration.use_half = false;
configuration.nms_threshold = 0.5f; // 非极大值抑制置信度阈值
configuration.rec_confidence_threshold = 0.5f; // 车牌号文本阈值
configuration.box_conf_threshold = 0.30f; // 检测器阈值
configuration.threads = 1;
// 实例化车牌识别算法Context
P_HLPR_Context ctx = HLPR_CreateContext(&configuration);
// 查询实例化状态
HREESULT ret = HLPR_ContextQueryStatus(ctx);
if (ret != HResultCode::Ok) {
printf("create error.\n");
return -1;
}
HLPR_PlateResultList results = {0};
// 执行车牌识别算法
HLPR_ContextUpdateStream(ctx, buffer, &results);
for (int i = 0; i < results.plate_size; ++i) {
// 解析识别后的数据
std::string type;
if (results.plates[i].type == HLPR_PlateType::PLATE_TYPE_UNKNOWN) {
type = "未知";
} 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);
}
// 销毁Buffer
HLPR_ReleaseDataBuffer(buffer);
// 销毁Context
HLPR_ReleaseContext(ctx);
# 执行编译脚本
sh command/build_release_android_share.sh
编译完成后android的动态库会放置于build/release_android/,其中包含:
完成Android的动态库编译后,将arm64-v8a和armeabi-v7a文件夹放置于子项目路径Prj-Android/hyperlpr3/libs中,再编译android项目即可使用。Prj-Android项目中已内置hyperlpr3的SDK与使用demo。
如果你需要使用docker编译,我们提供了几种编译方法:
你需要提前安装好docker和docker-compose,并执行脚本构建hyperlpr_build的镜像:
docker build -t hyperlpr_build .
开始编译动态库:
docker-compose up build_linux_x86_shared_lib
编译目录: build/linux
我们提供了一个Android-SDK相关的Demo工程:hyperlpr3-android-sdk,您可以根据需求去编译动态库使用该项目。
如果你需要快速将我们的sdk集成到你自己的Android项目中,那么你可以将以下依赖添加到项目的build.gradle中:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.HyperInspire:hyperlpr3-android-sdk:1.0.3'
}
// 初始化通常在程序初始化时执行,只需执行一次
HyperLPR3.getInstance().init(this, new HyperLPRParameter());
…
// 识别一张图像
Plate[] plates = HyperLPR3.getInstance().plateRecognition(bitmap, HyperLPR3.CAMERA_ROTATION_0, HyperLPR3.STREAM_BGRA);
关于快速集成到安卓工程可以查看: Prj-Android