HyperLPR3车牌识别-Linux/MacOS使用:C/C++库编译
创始人
2024-05-30 02:42:18
0

简介

HyperLPR在2023年初已经更新到了v3的版本,该版本与先前的版本一样都是用于识别中文车牌的开源图像算法项目,最新的版本的源码可从github中提取:https://github.com/szad670401/HyperLPR

Linux C/C++库说明

项目支持编译出C/C++项目使用的动态链接库,暂时仅支持Linux、MacOS等这类*nix系列的系统。库采用CAPI的接口形式进行调用,仅需一个头文件+动态库即可。工程需要使用CMake进行编译。

准备工作

在编译库之前需要提前准备好以编译的工作环境,需要依赖如下:

  • CMake(3.10 以上)

  • OpenCV (4.20以上)

  • 编译对应的平台如android、ios、linux都需要采用各自平台支持的OpenCV-SDK

  • MNN (2.0.0以上)

  • C++编译器

  • GCC或Clang皆可 (macOS无需另外安装,Xcode自带)

  • GCC推荐版本4.9以上

  • 在某些发行版上GCC (GNU C编译器)和G++(GNU C++编译器是分开安装的)。

  • 同样以Ubuntu为例,需要分别安装 gcc 和 g++

  • Clang 推荐版本3.9以上

  • Catch2(仅编译TestCase需要)

拉取项目

从github或gitee中拉取最新版的HyperLPR工程到本地

# 从github拉取
git clone https://github.com/szad670401/HyperLPR.git

网络不太稳的同学可以使用gitee拉取项目

# 从gitee拉取
git clone https://gitee.com/tunmx/HyperLPR.git

安装CMake

CMake安装方式众多,Ubuntu用户可使用apt快捷安装:

sudo apt-get install cmake

MacOS可使用brew进行快捷安装:

sudo brew install cmake

如果快捷安装失败也可到CMake官方下载最新版自行编译安装。

安装依赖库

为了节约编译三方依赖库的时间,这边提供了一份已经编译好的库,提供的库均为功能相对标准的库,如有其他功能的需求,请自行调整参数重新编译。百度网盘 密码:5duf,下载后将其拷贝或链接到HyperLPR根目录下,与CMakeLists.txt同级即可:

HyperLPR/
├── 3rdparty_hyper_inspire_op # 放这里
├── CMakeLists.txt
├── LICENSE
├── Prj-Android
├── Prj-Linux
├── Prj-Python
├── README.md
├── build
├── cmake-build-debug
├── command
├── cpp
├── docs
├── images
└── resource

动态库快捷编译

准备好以上工作后,执行编译脚本即可开始编译:

# 执行编译脚本
sh command/build_release_linux_share.sh

编译后的相关物料放置于根目录下build/linux/install/hyperlpr3中,其中包含:

  • include 头文件

  • lib 动态库路径

  • resource 包含测试图片与模型等静态资源

按需取走需要的文件即可

使用Demo

编译好动态链接库后,我们提供了一个使用Demo,即根目录下的Prj-Linux文件夹,在编译完成上面的动态库后即可进入到该目录下进行测试,该demo仅体现SDK最简单的使用方式,代码如下:

#include 
#include "hyper_lpr_sdk.h"
#include "opencv2/opencv.hpp"static const std::vector TYPES = {"蓝牌", "黄牌单层", "白牌单层", "绿牌新能源", "黑牌港澳", "香港单层", "香港双层", "澳门单层", "澳门双层", "黄牌双层"};int main(int argc, char **argv) {char *model_path = argv[1];char *image_path = argv[2];// 读取图像cv::Mat image = cv::imread(image_path);// 创建ImageDataHLPR_ImageData data = {0};data.data = image.ptr(0);      // 设置图像数据流data.width = image.cols;                   // 设置图像宽data.height = image.rows;                  // 设置图像高data.format = STREAM_BGR;                  // 设置当前图像编码格式data.rotation = CAMERA_ROTATION_0;         // 设置当前图像转角// 创建数据BufferP_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;// 实例化车牌识别算法ContextP_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);}// 销毁BufferHLPR_ReleaseDataBuffer(buffer);// 销毁ContextHLPR_ReleaseContext(ctx);return 0;
}

执行命令即可编译:

# 进入到子工程demo
cd Prj-Linux
# 执行编译脚本
sh build.sh
# 进入目录
cd build/
# 编译好PlateRecDemo程序后 传入模型文件夹路径和需要预测的图像执行程序
./PlateRecDemo ../hyperlpr3/resource/models/r2_mobile ../hyperlpr3/resource/images/test_img.jpg

单元测试编译

如果需要验证代码、库与模型之间构成是否正确,可使用项目中自带的单元测试进行编译和测试

# 创建编译目录 并进入
mkdir build_test && cd build_test
# 编译单元测试程序
cmake -DBUILD_TEST=ON .. && make -j8

编译完成后需要执行单元测试程序,需要将resource链接到程序同级目录下再执行测试用例

# 使用链接的方式设置resource目录
ln -s ../resource .
# 执行测试
./UnitTest

帮助

以上为HyperLPR3的C/C++快速上手,需要获取其他的帮助,请移步到项目地址:https://github.com/szad670401/HyperLPR

相关内容

热门资讯

安卓se系统怎么启用,确保应用... 你有没有发现,你的安卓手机最近有点儿“懒”呢?运行速度慢,反应迟钝,是不是想给它来个“大变身”呢?别...
微软怎么使用安卓系统,技术融合... 你有没有想过,那个以Windows系统著称的微软,竟然也会和安卓系统玩起“亲密接触”?没错,就是那个...
安卓系统耗电特别快,快速诊断与... 手机电量总是不够用?安卓系统耗电特别快,是不是你也遇到了这样的烦恼?别急,今天就来跟你聊聊这个话题,...
安卓机 桌面 系统菜单,功能解... 你有没有发现,你的安卓手机桌面系统菜单,其实就像一个隐藏的宝藏库呢?里面藏着各种各样的功能,等着你去...
安卓ios系统怎么安装,安卓与... 你有没有想过,你的手机里那些好玩的应用是怎么来的呢?是不是觉得安装个软件就像变魔术一样简单?其实,这...
珍奥助手安卓系统下载,轻松体验 你有没有听说最近有个超级好用的助手软件——珍奥助手?没错,就是那个能让你手机生活变得更加便捷的小帮手...
安卓换ios系统.数据,数据迁... 你有没有想过,手机系统就像是我们生活中的衣服,有时候换一件新衣服,整个人都焕然一新呢?没错,今天咱们...
安卓系统提示怎么关,轻松关闭功... 手机屏幕上突然弹出一个安卓系统的提示,让你不禁皱起了眉头。别急,别慌,今天就来手把手教你如何轻松关闭...
安卓系统如何刷回flyme系统... 你是不是也和我一样,对安卓手机的Flyme系统情有独钟呢?有时候,因为一些原因,我们可能需要将手机刷...
手机订餐系统源码安卓,基于手机... 你有没有想过,每天忙碌的生活中,点外卖已经成为了一种不可或缺的享受?而这一切的背后,离不开那些默默无...
顾问营销系统安卓版,助力企业高... 你有没有想过,在这个信息爆炸的时代,如何让你的产品在众多竞争者中脱颖而出呢?别急,今天我要给你介绍一...
安卓系统连接雅马哈音箱,打造个... 你有没有想过,家里的安卓手机和雅马哈音箱也能来个甜蜜的“牵手”呢?没错,今天就要来给你揭秘,如何让这...
安卓系统文件日志查看,揭秘系统... 手机里的安卓系统文件日志,听起来是不是有点儿高深莫测?别担心,今天我就要带你一探究竟,揭开这些神秘日...
努比亚升级安卓p系统,畅享智能... 你知道吗?最近手机界可是热闹非凡呢!努比亚这个品牌,竟然悄悄地给他们的手机升级了安卓P系统。这可不是...
仿苹果装安卓系统,揭秘仿苹果装... 你有没有想过,如果你的苹果手机突然变成了安卓系统,那会是怎样的场景呢?想象你那熟悉的iOS界面,突然...
安装安卓13子系统,全新功能与... 你听说了吗?安卓13子系统终于来了!这可是安卓系统的一大革新,让我们的手机体验更加丰富多元。今天,就...
安卓系统内核日志保存,深度洞察... 你有没有想过,当你手机里的安卓系统在默默运行时,它其实就像一个勤劳的小蜜蜂,不停地记录着它的“工作日...
安卓系统可以调用dll,安卓系... 你知道吗?安卓系统竟然能调用DLL文件,这可是个让人眼前一亮的小秘密呢!想象你手中的安卓设备,不仅能...
安卓通讯 录系统代码,基于安卓... 你有没有想过,你的手机里那个默默无闻的通讯录系统,其实背后有着一套复杂的代码在支撑呢?今天,就让我带...
安卓系统版本对应关系,安卓系统... 你有没有发现,每次手机更新系统,那感觉就像给手机换了个新衣裳,焕然一新呢!不过,你知道吗?安卓系统的...