作为《探索QCS6490目标检测AI应用开发》文章,紧接上一期,我们介绍如何在应用程序中介绍如何使用解码后的视频帧结合Yolov8n模型推理。 高通 Qualcomm® AI Engine Direct 是一套能够针对高通AI应用加速的软件SDK,更多的内容可以访问:Qualcomm Documentation
AI Engine Direct也称QNN,在本期文章的第一期中我们介绍了如何使用AI Engine Direct的工具链去转换ONNX模型,我们接下来讲介绍如何在应用中去推理转换好的Yolov8n模型
确报你已经完成了以下准备工作
AI Engine Direct提供了丰富的API接口,可以非常接近硬件底层高效利用资源。为了简化模型推理过程,我们推荐使用AI Engine Direct Helper,它是在AI Engine Direct基础上封装的一个助手类,能够以极少的代码实现模型的推理。
下载 AI Engine Direct Helper
GitHub - quic/ai-engine-direct-helper
在QCS6490开发板上进行相应的编译工作,以生成可用的库文件。
在集成模型推理之前,请确保已经阅读并遵循了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