0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenVINO™的C API 2.0有何新特性?

英特尔物联网 来源:英特尔物联网 2023-02-24 11:14 次阅读

文章作者:武卓 博士/ 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 版本一起发布,包含以下主要功能:

01C API 2.0 支持 OpenVINO 2.0 C++API

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

02新的 C API 使用张量名称

索引处理模型输入/输出

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

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

6db9d66c-b366-11ed-bfe3-dac502259ad0.png

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

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

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

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

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

01如何使用 C API 2.0?

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

6de3b630-b366-11ed-bfe3-dac502259ad0.png

图 1.OpenVINO 推理管道的步骤

步骤1:创建 OpenVINO 运行时内核

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

 #include 

使用以下代码创建 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);

向右滑动查看完整代码

02在哪里找到 C API 2.0?

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

6e0de32e-b366-11ed-bfe3-dac502259ad0.jpg

图 2 在哪里找到 C API 2.0

03总结

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1485

    浏览量

    61817
  • 编程
    +关注

    关注

    88

    文章

    3592

    浏览量

    93596
  • 人工智能
    +关注

    关注

    1791

    文章

    46859

    浏览量

    237582
  • 函数
    +关注

    关注

    3

    文章

    4306

    浏览量

    62431
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120978

原文标题:OpenVINO™ 的 C API 2.0 有何新特性?| 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表了《基于 OpenVINO Python
    的头像 发表于 11-17 09:53 865次阅读
    如何使用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b>++ <b class='flag-5'>API</b>部署FastSAM模型

    μC/OSII哪些可以改进的地方呢?特性

    μC/OSII的特点与局限分别是什么?μC/OSII哪些可以改进的地方呢?特性
    发表于 11-04 07:05

    使用OpenVINO运行C++ API创建输入tensor并执行推理遇到的问题求解

    使用 OpenVINO™ 运行时 C++ API 创建输入 tensor 并执行推理: ov::Tensor input_tensor = ov::Tensor(input_type
    发表于 08-15 08:22

    在Raspberry Pi上从源代码构建OpenVINO 2021.3收到错误怎么解决?

    命名为“openvino.runtime”的模块。 分辨率 从 2022.1 OpenVINO™起,推出了新的OpenVINOAPI 2.0
    发表于 08-15 08:24

    JDBCTM 2.0 API

    The JDBCTM API is the JavaTM standard call-level API for database access. This documentcontains the final specification of the JDBC
    发表于 10-14 17:42 6次下载

    C++与C的const关键字差别?

    C++与C中的const关键字差别?
    的头像 发表于 02-03 14:51 1785次阅读

    OpenVINO工具套件预处理API的概念及使用方法

    OpenVINO 2022.1之前版本不提供OpenVINO Runtime原生的用于数据预处理的API函数1 ,如图1-1所示,开发者必须通过第三方库(例如:OpenCV)来实现数据预处理。
    的头像 发表于 06-09 17:25 2069次阅读

    OpenVINO™ 2022.2新版本哪些亮眼的新特性

    金秋已至。伴着凉爽的秋风一起到来的,还有 OpenVINO 工具套件刚刚推出的最新版本 OpenVINO 2022.2。除了能支持英特尔今年新推出的一系列独立显卡进行 AI 模型的推理加速及部署外,2022.2的新版本中还有哪些亮眼的新
    的头像 发表于 10-09 09:13 1668次阅读

    OpenVINOC++ API编写YOLOv8-Seg实例分割模型推理程序

    本文章将介绍使用 OpenVINO 2023.0 C++ API 开发YOLOv8-Seg 实例分割(Instance Segmentation)模型的 AI 推理程序。本文 C++
    的头像 发表于 06-25 16:09 1518次阅读
    用<b class='flag-5'>OpenVINO</b>™ <b class='flag-5'>C</b>++ <b class='flag-5'>API</b>编写YOLOv8-Seg实例分割模型推理程序

    OpenVINOC# API详解与演示

    OpenVINO C# API 支持 NuGet 程序包安装方式,这与 OpenVINO C++ 库的安装过程相比,更加简单。如果使用 Vi
    的头像 发表于 10-13 16:39 724次阅读
    <b class='flag-5'>OpenVINO</b>™  <b class='flag-5'>C</b># <b class='flag-5'>API</b>详解与演示

    基于OpenVINO Python API部署RT-DETR模型

    平台实现 OpenVINO 部署 RT-DETR 模型实现深度学习推理加速, 在本文中,我们将首先介绍基于 OpenVINO Python API 部署 RT-DETR 模型。
    的头像 发表于 10-20 11:15 910次阅读
    基于<b class='flag-5'>OpenVINO</b> Python <b class='flag-5'>API</b>部署RT-DETR模型

    基于OpenVINO C++ API部署RT-DETR模型

    应用中,我们为了与当前软件平台集成更多会采用 C++ 平台,因此在本文中,我们将基于 OpenVINO C++ API 向大家展示了不包含后处理的 RT-DETR 模型的部署流程,并向
    的头像 发表于 11-03 14:30 783次阅读
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b>++ <b class='flag-5'>API</b>部署RT-DETR模型

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO C++ API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于
    的头像 发表于 11-10 16:59 712次阅读
    基于<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b>部署RT-DETR模型

    OpenVINO C# API在intel平台部署YOLOv10目标检测模型

    的模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO
    的头像 发表于 06-21 09:23 946次阅读
    用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b>在intel平台部署YOLOv10目标检测模型

    使用OpenVINO C# API部署YOLO-World实现实时开放词汇对象检测

    的快速准确识别,并通过AR技术将虚拟元素与真实场景相结合,为用户带来沉浸式的交互体验。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO 2024.0部署
    的头像 发表于 08-30 16:27 551次阅读
    使用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>C</b># <b class='flag-5'>API</b>部署YOLO-World实现实时开放词汇对象检测