OpenVINO 的 C API 2.0 有何新特性?

2024-03-23 13:59
文章标签 特性 api 2.0 有何 openvino

本文主要是介绍OpenVINO 的 C API 2.0 有何新特性?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:武卓 博士;River Li;Peter Chen

您是否准备好在新的一年体验英特尔® OpenVINO™ 工具套件分发版的最新长期支持 (LTS) 版本?OpenVINO™ 2022.3 LTS 版本现已发布,可帮助您快速轻松地开发卓越的人工智能应用,并跨边缘和云端部署深度学习推理工作负载,无论您处于人工智能编程的什么阶段。

作为人工智能开发人员,无论您希望将 OpenVINO 用于 C 应用内,还是希望将其用于无法兼容 OpenVINO 软件包的应用二进制接口 (ABI) 的 C++ 应用,或用于需要运行时加载 OpenVINO 库的应用,C API 均可助您一臂之力。C API 2.0 现已随 OpenVINO 2022.3 LTS 版本一起发布,包含以下主要功能:

  • C API 2.0 支持 OpenVINO 2.0 C++API

如果开发人员以前仅知道如何应用 OpenVINO C++API 2.0,该特性可帮助他们更轻松地应用 C API 2.0,反之亦然。

  • 新的 C API 使用张量名称和索引处理模型输入/输出

借助新的 C API 2.0 命名规则,开发人员可以更方便地编写代码和调用函数,因为它遵循了流行的深度学习命名规则和用途。

  • 支持动态输入和动态模型

一些深度学习模型涉及动态输入,即在某些输入维度上,输入尺寸可能会不时变化。例如,对于一些自然语言处理 (NLP) 用例,输入至模型的内容(例如所提问题问题的长度)取决于特定的问题。现在,C API 2.0 支持动态输入和动态模型,您可以轻松将其应用于动态输入和模型。上面列举了一些代码片段。

  • 为模型前期/后期处理提供大量 C API

C API 2.0 中提供了大量前期和后期处理 C API,以进一步加快 OpenVINO 实施深度学习模型推理的速度。例如,我们可以使用这样的预处理 API 将 NV12 输入数据转换为与实际模型输入相同的 BGR 格式,而无需使用 OpenCV 对 OpenVINO 执行数据格式转换,从而节省预处理时间。

  • 属性(键、数值、数字)的统一界面

对开发人员来说,为不同的用例设置/提供属性更为方便,而且这也可以提高可扩展性,便于未来支持更多新属性。

如何使用 C API 2.0

如要开始使用 C API 2.0 构建自己的应用,您需要创建一个管道将 OpenVINO 集成到您的应用中(如图 1 所示)。

图 1.OpenVINO 推理管道的步骤

步骤 1.创建 OpenVINO™ 运行时内核

添加标头文件以支持 OpenVINO™ 运行时:

#include <openvino/c/openvino.h>

使用以下代码创建 OpenVINO™ 内核,以管理可用设备和读取模型对象: 

ov_core_t* core = NULL;
ov_core_create(&core);

步骤 2.编译模型

以下代码展示了以 OpenVINO 中间代码 (IR) 文件的格式编译深度学习模型的示例。您还可将其替换为其他框架的模型格式,如 TensorFlow、ONNX 等。

ov_compiled_model_t* compiled_model = NULL;
ov_core_compile_model_from_file(core, "model.xml", "AUTO", 0, &compiled_model);

步骤 3.创建推理请求

使用以下代码创建推理请求:

ov_infer_request_t* infer_request = NULL;
ov_compiled_model_create_infer_request(compiled_model, &infer_request);

步骤 4.设置输入

// Get input port for model with one input
ov_output_const_port_t* input_port = NULL;
ov_model_const_input(model, &input_port);
// Get the input shape from input port
ov_shape_t input_shape;
ov_const_port_get_shape(input_port, &input_shape);
// Get the the type of input
ov_element_type_e input_type;
ov_port_get_element_type(input_port, &input_type);
// Create tensor from external memory
ov_tensor_t* tensor = NULL;
ov_tensor_create_from_host_ptr(input_type, input_shape, memory_ptr, &tensor);
// Set input tensor for model with one input
ov_infer_request_set_input_tensor(infer_request, tensor);

步骤 5.开始推理

OpenVINO™ 运行时支持同步或异步模式的推理。使用异步 API 可提高应用的整体帧速率:当加速器运行繁忙时,应用可在主机上正常工作,无需等待推理完成。以下代码展示了在异步模式下设置推理的示例。

​​ov_infer_request_start_async(infer_request);
ov_infer_request_wait(infer_request);

步骤 6.处理推理结果

检查输出张量,并使用以下代码处理推理结果。           

ov_tensor_t* output_tensor = NULL;
// Get output tensor by tensor index
ov_infer_request_get_output_tensor_by_index(infer_request, 0, &output_tensor);

步骤 7.释放分配的对象 

为避免内存泄漏,使用 C API 开发的应用需要按顺序释放分配的对象。

ov_shape_free(&input_shape);
ov_tensor_free(output_tensor);
ov_output_const_port_free(input_port);
ov_tensor_free(tensor);
ov_infer_request_free(infer_request);
ov_compiled_model_free(compiled_model);
ov_model_free(model);
ov_core_free(core);

在哪里找到 C API 2.0

您可以通过“runtime/lib/libopenvino_c.so”(如图 2 所示)轻松找到 C API 库和标头文件

图 2 在哪里找到 C API 2.0

总结

总之,在 OpenVINOTM 2022.3 LTS 版本中,C API 更新为 C API 2.0。借助 C API 2.0,开发人员可以获得多种新特性,能够更轻松地在 C 应用中集成 OpenVINO。

有关如何使用 C API 2.0 的更多信息和教程,请参见 C API 2.0 文档。

这篇关于OpenVINO 的 C API 2.0 有何新特性?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838515

相关文章

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep