当前位置: 首页 > news >正文

探索QCS6490目标检测AI应用开发(三):模型推理

作为《探索QCS6490目标检测AI应用开发》文章,紧接上一期,我们介绍如何在应用程序中介绍如何使用解码后的视频帧结合Yolov8n模型推理。 高通 Qualcomm® AI Engine Direct 是一套能够针对高通AI应用加速的软件SDK,更多的内容可以访问:Qualcomm Documentation

AI Engine Direct也称QNN,在本期文章的第一期中我们介绍了如何使用AI Engine Direct的工具链去转换ONNX模型,我们接下来讲介绍如何在应用中去推理转换好的Yolov8n模型

1.前置条件

1.1 环境搭建

确报你已经完成了以下准备工作

  • 按照《探索QCS6490目标检测AI应用开发(一):Yolov8n模型转换及量化》中的指导,完成了Yolov8n模型的量化,得到序列化后的模型文件yolov8n_quant.bin
  • 准备一块QCS6490开发板
  • AI Engine Direct开发包已安装部署到QCS6490开发板

1.2 下载AI Engine Direct Helper

AI Engine Direct提供了丰富的API接口,可以非常接近硬件底层高效利用资源。为了简化模型推理过程,我们推荐使用AI Engine Direct Helper,它是在AI Engine Direct基础上封装的一个助手类,能够以极少的代码实现模型的推理。

下载 AI Engine Direct Helper

GitHub - quic/ai-engine-direct-helper

QCS6490开发板上进行相应的编译工作,以生成可用的库文件。

2. 模型推理

在集成模型推理之前,请确保已经阅读并遵循了AI Engine Direct Helper User Guide中的环境设置指南。这包括设置必要的库文件路径、安装Python及其扩展等。

利用AI Engine Direct Helper ,只需要几行代码就可以完成模型的推理

https://github.com/quic/ai-engine-direct-helper/blob/main/Docs/User_Guide.md

#include "LibQNNHelper.hpp"int main() {// 初始化日志级别SetLogLevel(2);// 创建LibQNNHelper实例LibQNNHelper libQNNHelper;// 定义输入输出缓冲区std::vector<uint8_t*> inputBuffers;std::vector<uint8_t*> outputBuffers;std::vector<size_t> outputSize;// 模型初始化std::string model_name = "yolov8n";std::string model_path = "/path/to/yolov8n_quant.bin";std::string backend_lib_path = "/path/to/libQnnHtp.so";std::string system_lib_path = "/path/to/libQnnSystem.so";if (!libQNNHelper.ModelInitialize(model_name, model_path, backend_lib_path, system_lib_path)) {QNN_ERR("ModelInitialize failed\n");return -1;}// 填充输入缓冲区// ... 此处应填充解码后的视频帧数据到inputBuffers ...// 执行模型推理if (!libQNNHelper.ModelInference(model_name, inputBuffers, outputBuffers, outputSize)) {QNN_ERR("ModelInference failed\n");// 清理资源libQNNHelper.ModelDestroy(model_name);return -1;}// 使用outputBuffers中的数据进行后处理,如绘制检测框等// 释放输出缓冲区内存for (int j = 0; j < outputBuffers.size(); j++) {free(outputBuffers[j]);}outputBuffers.clear();outputSize.clear();// 销毁模型并释放资源libQNNHelper.ModelDestroy(model_name);return 0;
}

作者:Ricky Li

http://www.lryc.cn/news/383983.html

相关文章:

  • C# 静态类中构造、字段和属性等的执行顺序,含有单例模式分析
  • c++设计模式之一创建型模式
  • 上古世纪台服注册账号+下载客户端全方位图文教程
  • 【Android】Android中继承Activity、Application和AppCompatActivity的区别
  • SQLite 可以随可执行文件部署在用户机器吗
  • 大模型的开源不同于传统的开源软件
  • 基于PHP+MySql的留言管理系统的设计与实现
  • 单目标应用:基于吸血水蛭优化器(Blood-Sucking Leech Optimizer,BSLO)的微电网优化(MATLAB代码)
  • 嵌入式工程师从0开始,到底该学什么,怎么学
  • Redis-集群-环境搭建
  • ITSG、COST-G、Tongji和WHU Level-2数据产品读取绘图(Matlab)
  • linux(ubuntucentos)-安装libreoffice
  • 上海市计算机学会竞赛平台2023年9月月赛丙组点对之和(一)
  • maven-jar-plugin在springboot中打包成普通引用的jar
  • 小型海外仓布局策略:高效利用有限空间,标准化3F流程
  • 【高考志愿】电气工程
  • 贪吃蛇项目:GameRun与GameEnd部分:游戏的主体运行与善后部分
  • mysql索引、事务以及存储引擎
  • idea添加文档注释
  • python函数练习
  • 基于PHP的奶茶商城系统
  • 物联网“此用户无权修改接入点名称设置”解决方案
  • 网工常见面试题
  • SQL实现UUIDv7
  • 2024期权交易佣金手续费最低是多少?期权交易有哪些成本?
  • 合合信息智能文档抽取:赋能不良资产管理行业的数字化转型
  • 【别再用Excel了!】这款免费可视化工具能帮你轻松提升效率
  • python holidays获取中国节日
  • Jenkins流水线发布,一篇就解决你的所有疑惑
  • 安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法