手搓ZLMediakit实现推流拉流系列扩展(RKNN C++推理流程)

        在使用 ZLMediaKit 并结合RK MPP解码模块后,想对得到的视频帧进行深度学习模型推理,在推理之前,有必要先了解一下RKNN使用C++推理的流程。此外,为了方便之后项目的扩展,建议将RKNN推理库封装成一个类(仅供参考)。

目录

1. RKNN通用API C++ 推理流程

1.1 初始化RKNN Context对象

1.2 查询RKNN相关信息

1.3 设置RKNN输入数据

1.4 执行推理

1.5 获取RKNN输出数据

2. 封装自己的RKNN库

2.1 封装通用框架推理库 : engine.h

2.2 封装RKNN框架推理库

2.2.1 实现 rknn_engine.h

2.2.2 实现 rknn_engine.cpp

2.2.2.1 加载模型文件

2.2.2.2 获取输入tensor的基本信息

2.2.2.3 获取输出tensor的基本信息

2.2.2.4 执行推理

2.3 错误信息库 : error.h

2.4 基本数据类型库 : datatype.h



1. RKNN通用API C++ 推理流程

1.1 初始化RKNN Context对象

// 创建rknn_context对象
rknn_context rknn_ctx_
int ret = rknn_init(&rknn_ctx_, model_data, model_data_size, 0, NULL);

参数:

  • arg1:rknn_context对象
  • arg2:RKNN 模型的二进制数据或者 RKNN 模型路径
  • arg3:当 model 是二进制数据,表示模型大小,当 model 是路径,则设置为0
  • arg4:特定的初始化标志
  • arg5:特定初始化时的扩展信息

1.2 查询RKNN相关信息

ret = rknn_query(rknn_ctx_, rknn_query_cmd, void* info, uint32_t size);

参数:

  • arg1:rknn_context对象
  • arg2:查询相关命令

rknn_query_cmd常用值

含义

RKNN_QUERY_SDK_VERSION

版本相关信息

RKNN_QUERY_IN_OUT_NUM

输入输出 的个数

RKNN_QUERY_INPUT_ATTR

输入tensor的属性

RKNN_QUERY_OUTPUT_ATTR

输出tensor的属性

  • arg3:存放查询结果的结构体变量
  • arg4:结构体变量的大小

1.3 设置RKNN输入数据

//创建rknn_input对象
rknn_input rknn_inputs[g_max_io_num];
int ret = rknn_inputs_set(rknn_ctx_, (uint32_t)inputs.size(), rknn_inputs);

参数:

  • arg1:rknn_context对象
  • arg2:输入数据个数
  • arg3:输入数据数组,数组每个元素是rknn_input类型的结构体

1.4 执行推理

ret = rknn_run(rknn_ctx_, nullptr);

参数:

  • arg1:rknn_context对象
  • arg2:目前默认填nullptr即可

1.5 获取RKNN输出数据

rknn_output rknn_outputs[g_max_io_num];
ret = rknn_outputs_get(rknn_ctx_, output_num_, rknn_outputs, NULL);

参数:

  • arg1:rknn_context对象
  • arg2:输出数据个数
  • arg3:输出数据数组,数组每个元素是rknn_output类型的结构体

2. 封装自己的RKNN库

因涉及到的其它库较多,本章节仅供提供一个思路用于RKNN 推理库项目封装,如果需要完整项目代码和指导可以私信我,创作不易,请多多支持!

封装思路:通用框架推理库-->RKNN框架推理库

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想起名字呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值