前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenVINO 2020R01 SDK的改动与应用开发演示

OpenVINO 2020R01 SDK的改动与应用开发演示

作者头像
OpenCV学堂
发布于 2020-03-25 15:17:23
发布于 2020-03-25 15:17:23
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

OpenVINO 2020R01版本

之前写了一篇OpenVINO2020R01版本中如何使用OpenCV深度神经网络模型实现模型推理加速,详细交代了相关配置与程序演示内容。

OpenCV4.2 + OpenVINO2020安装配置与应用演示

但是还缺少OpenVINO SDK开发与应用程序集成相关的代码演示部分,所以这篇文章就是关于OpenVINO SDK应用开发代码演示相关步骤与说明,代码主要是跟我之前的OpenVINO2019R03的测试程序差不多,在此基础上稍有改动。

开发环境配置

要使用OpenVINO的推理引擎的相关SDK开发,首先就要完成相关配置,这里先说一下我的开发环境:

  • VS2015
  • Windows 10 64位
  • OpenCV4.2
  • OpenVINO2020R01

在VS2015中配置OpenVINO开发支持,很简单的!(以我安装好的路径为例)

1. 配置包含目录,指向include目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Intel\openvino_2020.1.033\deployment_tools\inference_engine\include

2. 配置库目录,指向lib目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Intel\openvino_2020.1.033\deployment_tools\inference_engine\lib\intel64\Release

3. 配置链接器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inference_engine.lib

4. 配置环境变量,指向bin目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Intel\openvino_2020.1.033\deployment_tools\inference_engine\bin\intel64\Release

此外环境变量还需要添加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Intel\openvino_2020.1.033\deployment_tools\ngraph\libC:\Intel\openvino_2020.1.033\deployment_tools\inference_engine\external\tbb\bin

配置好之后,记得重启一下VS2015/VS2017/VS2019即可。

SDK开发程序演示

首先可以调用InferenceEngine::Core 来实现设备支持查询,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Core ie;
 vector<string> availableDevices = ie.GetAvailableDevices();
 for (int i = 0; i < availableDevices.size(); i++) {
          printf("supported device name : %s \n", availableDevices[i].c_str());
 }

本机查询结果如下:

基于face-detection-retail-0004人脸检测模型,实现图像人脸检测演示程序,首先需要加载IR模型与配置信息(xml与bin文件),代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//  加载检测模型
CNNNetReader network_reader;
network_reader.ReadNetwork(model_xml);
network_reader.ReadWeights(model_bin);

设置网络的输入与输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 请求网络输入与输出信息
auto network = network_reader.getNetwork();
InferenceEngine::InputsDataMap input_info(network.getInputsInfo());
InferenceEngine::OutputsDataMap output_info(network.getOutputsInfo());
// 设置输入格式
for (auto &item : input_info) {
      auto input_data = item.second;
      input_data->setPrecision(Precision::U8);
      input_data->setLayout(Layout::NCHW);
      input_data->getPreProcess().setResizeAlgorithm(RESIZE_BILINEAR);
      input_data->getPreProcess().setColorFormat(ColorFormat::RGB);
}
printf("get it \n");


// 设置输出格式
for (auto &item : output_info) {
      auto output_data = item.second;
      output_data->setPrecision(Precision::FP32);
}

创建可执行网络,在2020之前的版本中,创建可执行网络CPU执行的时候使用MKLDNNPlugin.dll,但是很多网络模型CPU扩展支持,所以会这样去加载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建可执行网络对象
ie.AddExtension(std::make_shared<Extensions::Cpu::CpuExtensions>(), "CPU");
auto executable_network = ie.LoadNetwork(network, "CPU");

2020R01版本安装好之后的sample代码中是这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IExtensionPtr extension_ptr = make_so_pointer<IExtension>(FLAGS_l);
ie.AddExtension(extension_ptr, "CPU");

我是从sample代码(Sample代码中还有CPU_EXTENSION,这个深深误导了我)做参考写这个演示程序的,后来我发现我死活也找不到编译好的CPU_EXTENSION相关文件,搜索了整个sample代码,还是没有!于是我在官方的Release Notes里面找到了这样一段话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://software.intel.com/en-us/articles/OpenVINO-RelNote

什么意思啊,意思是2020版本开始,CPU执行代码这样就了可以了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auto executable_network = ie.LoadNetwork(network, "CPU");

跟计算棒执行没什么两样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auto executable_network = ie.LoadNetwork(network, "MYRIAD");

直接用即可!再也不用为了CPU扩展加载而编译sample了!我感觉sample代码是不是要更新一波了。

下面就是请求推动,填上输入数据,然后执行推理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 请求推断图
auto infer_request = executable_network.CreateInferRequest();

/** Iterating over all input blobs **/
for (auto & item : input_info) {
    auto input_name = item.first;

    /** Getting input blob **/
    auto input = infer_request.GetBlob(input_name);
    size_t num_channels = input->getTensorDesc().getDims()[1];
    size_t h = input->getTensorDesc().getDims()[2];
    size_t w = input->getTensorDesc().getDims()[3];
    size_t image_size = h*w;
    Mat blob_image;
    resize(src, blob_image, Size(h, w));

    // NCHW
    unsigned char* data = static_cast<unsigned char*>(input->buffer());
    for (size_t row = 0; row < h; row++) {
        for (size_t col = 0; col < w; col++) {
            for (size_t ch = 0; ch < num_channels; ch++) {
                data[image_size*ch + row*w + col] = blob_image.at<Vec3b>(row, col)[ch];
            }
        }
    }
} 

// 执行预测
infer_request.Infer();

对推理输出结果进行解析,得到输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 处理输出结果
for (auto &item : output_info) {
    auto output_name = item.first;

    // 获取输出数据
    auto output = infer_request.GetBlob(output_name);
    const float* detection = static_cast<PrecisionTrait<Precision::FP32>::value_type*>(output->buffer());
    const SizeVector outputDims = output->getTensorDesc().getDims();
    const int maxProposalCount = outputDims[2];
    const int objectSize = outputDims[3];

    // 解析输出结果
    for (int curProposal = 0; curProposal < maxProposalCount; curProposal++) {
        float label = detection[curProposal * objectSize + 1];
        float confidence = detection[curProposal * objectSize + 2];
        float xmin = detection[curProposal * objectSize + 3] * image_width;
        float ymin = detection[curProposal * objectSize + 4] * image_height;
        float xmax = detection[curProposal * objectSize + 5] * image_width;
        float ymax = detection[curProposal * objectSize + 6] * image_height;
        if (confidence > 0.5) {
            printf("label id : %d\n", static_cast<int>(label));
            Rect rect;
            rect.x = static_cast<int>(xmin);
            rect.y = static_cast<int>(ymin);
            rect.width = static_cast<int>(xmax - xmin);
            rect.height = static_cast<int>(ymax - ymin);
            putText(src, "OpenVINO-2020R01 face detection demo", Point(20, 20), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(0, 0, 255), 2, 8);
            rectangle(src, rect, Scalar(0, 255, 255), 2, 8, 0);
        }
        std::cout << std::endl;
    }
}
imshow("openvino-ssd-face-demo", src);

代码实现之后,就开始编译了,这个时刻VS2015会开始翻车表演,你会得到很多C4996的错误,大致意思是告诉你一些API函数下个版本不能用了,早做打算,这个明明应该是个警告,怎么VS2015 IDE就是不让编译通过啊,没办法,直接强制告诉编译器,别管它,怎么设置,看这里:

怎么搞,就是在禁止特定警告中加上4996,意思是告诉编译器别检查此项了!然后再重新编译,一般都会正常通过了。

但是我有个哥们跟我一样,还是继续翻车了,无法编译通过,他还是有C2240跟C2664两个编译错误,这个其实是因为项目字节编码导致的,检查一下,如果你还是unicode的话改成下面这样就好啦!

这次是真的可以了,直接重新编译,生成,运行结果如下:

以上就是OpenVINO C++版本的SDK在Windows系统下我的调用经过!

总结一下:

1.不需要CPU扩展代码加载了,这个必须赞扬 2.VS2015上配置简单了 3.C4996希望下个版本可以没有了,影响开发体验

OpenVINO下载地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://software.intel.com/en-us/openvino-toolkit/choose-download?innovator=CONT-0030837

云厚者,雨必猛

弓劲者,箭必远

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
使用ASP.NET Core MVC框架构建Web应用
ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。
conanma
2021/12/29
1.5K0
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/11/12
3K0
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-06
KenTalk
2018/12/21
2.2K0
ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
本篇代码基于以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/11/09
2.4K0
ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2019/04/12
1.7K0
ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/10/16
2.5K0
ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
本篇代码基于上一篇进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/10/09
1.2K0
ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2019/04/01
1.3K0
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用
https://ken.io/serie/dotnet-core-quickstart
KenTalk
2018/09/26
1.9K0
ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/12/29
2.3K0
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
这样入门asp.net core,如何
本文章主要说明asp.net core的创建和简单使用。 一、使用到的命令 dotnet new :创建项目(解决方案,类库,单元测试等),如:dotnet new web dotnet add package 添加一个nuget的引用 dotnet test:运行测试 dotnet build:编译项目 dotnet sln add:将项目添加到解决方案 dotnet add reference:对此项目添加项目引用 二、建立空项目 在测试目录下运行 dotnet new web -n baseWeb,创
sam dragon
2018/03/28
2.2K0
这样入门asp.net core,如何
.NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
一、前言 本篇开发环境? 1、操作系统:CentOS7(因为ken比较偏爱CentOS7) 2、SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识 1、了解如何通过Hyper-V安装CentOS虚拟机 2、了解CentOS7基础命令/常用命令 二、安装 .NET Core SDK 1、安装必要依赖 sudo yum -y install libunwind libicu 2、下载(SDK列表) cd /home/downloads curl -sSL -o dotnet-
KenTalk
2018/09/11
1.6K0
玩转VSCode-完整构建VSCode开发调试环境
目前使用VS2019开发.NET Core应用,一直有一个想法,在VS Code中复刻VS的开发环境,同时迁移到VS Code。
李明成
2020/02/12
2.3K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一、前言 本篇开发环境? 1、操作系统: Windows 10 X64 2、SDK: .NET Core 2.0 Preview 二、安装 .NET Core SDK 1、下载 .NET Core 下载地址:https://www.microsoft.com/net/download/core 根据自己电脑情况选择对应版本即可 .NET CORE 2.0下载地址:https://aka.ms/dotnet-sdk-2.0.0-preview2-win-x64 2、安装 微软出品,一键安装,只需一步,看图
KenTalk
2018/09/11
1.7K0
.NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
【ASP.NET Core 基础知识】--MVC框架--MVC入门
MVC(Model-View-Controller)是一种软件架构模式,用于设计和组织应用程序的代码。它将应用程序分为三个主要组成部分:
喵叔
2024/01/10
9330
【ASP.NET Core 基础知识】--MVC框架--MVC入门
【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法
在ASP.NET Core的MVC(Model-View-Controller)框架中,View 扮演着呈现用户界面的角色。View负责展示应用程序的数据给用户,并接收用户的输入。它与Model和Controller协同工作,通过模型绑定从Controller获取数据,然后使用Razor语法或其他视图引擎将数据呈现为用户可见的HTML。
喵叔
2024/01/11
1.3K0
Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点
本文将主要演示怎么将多个Asp.Net MVC项目部署到一个IIS站点中的例子,主要使用的是Asp.Net MVC提供的区域的功能。
老马
2022/05/10
9120
Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点
.net Core 1.0.1 下的Web框架的的搭建过程step by step
环境:ubuntu+VScode 数据库:mysql ,ORM框架:chloe 官网
FreeTimeWorker
2020/08/31
4900
.net Core 1.0.1 下的Web框架的的搭建过程step by step
Ken的杂谈从ASP.NET Core 2.1迁移到3.1
Ken的杂谈从2017年就开始采用 .NET Core作为开发框架,当时用的还是 .NET Core 2.0。 随后,.NET Core 2.1(LTS) 在2018年发布,Ken的杂谈又紧跟版本升级到 .NET Core 2.1 后面.NET Core3.0发布,但不是LTS版本,再加上我又懒,所以就干脆等到 .NET Core 3.1(LTS)正式发布,才来升级。毕竟这也是 .NET Core的最后一个主版本,下一个版本就是大一统的 .NET 5了。
KenTalk
2020/01/20
1.5K0
一小时学会ASP.NET Core,马上构建你的第一个Web应用
欢迎进入ASP.NET Core的快速入门指南!ASP.NET Core是一款跨平台的Web应用程序开发框架,它具有高度的灵活性和性能优势,适用于构建各种规模和类型的Web应用程序。让我们开始吧!
Echo_Wish
2023/11/30
1.3K0
推荐阅读
相关推荐
使用ASP.NET Core MVC框架构建Web应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档