Onnxruntime c++接口说明及 动态调用示例
时间: 2023-12-02 18:06:42 浏览: 259
使用 C++ 和 ONNX Runtime 框架对 YOLOv11-CLS 图像分类模型进行部署(包含详细的完整的程序和数据)
Onnxruntime 是一个用于运行机器学习模型的开源框架,它支持多种语言,包括 C++、Python、C#、Java 等。下面是 Onnxruntime 的 C++ 接口说明及动态调用示例:
1. 引入头文件
```
#include <iostream>
#include "onnxruntime_cxx_api.h"
```
2. 创建一个 Onnxruntime 的 session
```
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "test");
Ort::SessionOptions session_options;
session_options.SetIntraOpNumThreads(1);
session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);
Ort::Session session(env, "model.onnx", session_options);
```
3. 获取输入和输出名称及形状
```
auto input_names = session.GetInputNames();
auto output_names = session.GetOutputNames();
auto input_info = session.GetInputTypeInfo(0);
auto tensor_info = input_info.GetTensorTypeAndShapeInfo();
auto num_dims = tensor_info.GetDimensionsCount();
auto dims = tensor_info.GetShape();
auto input_type = tensor_info.GetElementType();
```
4. 准备输入数据
```
Ort::AllocatorWithDefaultOptions allocator;
float* input = allocator.Allocate<float>(num_dims);
// fill input data
```
5. 运行 session
```
auto memory_info = Ort::MemoryInfo::CreateCpu(OrtAllocatorType::OrtDeviceAllocator);
Ort::Value input_tensor =
Ort::Value::CreateTensor<float>(memory_info, input, num_dims, dims, num_dims);
auto outputs = session.Run(Ort::RunOptions{nullptr}, input_names.data(),
&input_tensor, 1, output_names.data(), 1);
auto output_tensor = outputs.front().Get<Tensor>();
float* output = output_tensor.Data<float>();
// process output data
```
6. 释放资源
```
allocator.Free(input);
```
注意:使用 C++ 接口时,可以更方便地管理内存,不需要手动释放资源,RAII机制会自动释放资源。
阅读全文