1 在LabVIEW中调用OpenVINO™ 模型-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

在LabVIEW中调用OpenVINO™ 模型

英特尔物联网 来源:英特尔物联网 作者:英特尔物联网 2022-03-21 10:05 次阅读

1.1

什么是LabVIEW

LabVIEW测试测量与自动化行业常用,图形化开发环境,其优点有:

1

图形化开发环境,学习容易入门快

2

自带机器视觉函数库,并提供OpenCV接口库,开发机器视觉与自动化应用程序速度快

使用LabVIEW调用OpenVINO IR模型,可以快速完成深度学习项目开发与交付。

LabVIEW详细介绍参考:

https://www.ni.com/zhcn/shop/labview.html

1.2

准备开发环境

要完成在LabVIEW中调用OpenVINO 模型,需要安装:

1

LabVIEW、Vision Development Module和NIVision OpenCV Utilities

2

Visual Studio 2019 Community;

3

OpenVINO 2021.4.2 LTS

1.2.1

安装LabVIEW

LabVIEW请从下列网址下载安装文件,通过NI Package Manager完成安装。

https://www.ni.com/zh-cn/support/downloads/software-products/download.labview.html#411431

需要注意的是:选择LabVIEW 64位版本,并同时安装Vision Development模块,安装完毕后至少保证如图1-1所示的打钩模块都已安装。

f5705716-a264-11ec-952b-dac502259ad0.png

图1-1 安装LabVIEW和Vision Development模块

“以管理员身份运行”JKI VI Package Manager,搜索并安装NIVision OpenCV Utilities,如图1-2所示。

f597d962-a264-11ec-952b-dac502259ad0.png

图1-2 安装NIVision OpenCV Utilities

从C:Program FilesNational InstrumentsLabVIEW 2021examplesVisionNIVision OpenCV Utilities文件夹中打开任意一个范例程序,若成功运行,证明安装成功,如图1-3所示。

f5e18986-a264-11ec-952b-dac502259ad0.png

图1-3 安装NIVision OpenCV Utilities成功

1.2.1

安装Visual Studio 2019 Community

和OpenVINO工具套件

从https://visualstudio.microsoft.com/zh-hans/downloads/中下载并安装Visual Studio 2019 Community。

从https://www.intel.cn/content/www/cn/zh/developer/tools/openvino-toolkit/overview.html 中下载并安装OpenVINO工具套件

1.3

准备OpenVINO IR模型

请参考本文的姊妹篇《PPYOLOv2模型从训练到OpenVINO部署-上篇》完成PPYOLOv2模型的部署,《PPYOLOv2模型从训练到OpenVINO部署-下篇》完成将PPYOLOv2飞桨模型转换为OpenVINO IR模型。

读者可以从https://github.com/dlod-openvino/ppyolov2_openvino_samples中下载已转换好的OpenVINO IR模型

1.4

编写OpenVINOAPI的LabVIEWWrapper

1.4.1

定义存储InferenceEngine的结构体

定义存储Inference Engine的结构体如代码清单1-1所示,方便创建和删除。

代码清单1-1 Inference Engine结构体

//定义结构体,存储与InferenceEngine相关的变量

typedefstructlv_infer_engine{

Coreie;//ie对象

ExecutableNetworkexec_net;

InferRequestinfer_request;

}InferEngineStruct;

1.4.2

创建ppyolov2_init函数

创建ppyolov2_init函数,主要是创建指向InferEngine的指针,并反回给LabVIEW。

代码清单1-2 ppyolov2_init函数

//创建指向InferEngine的指针,并反馈给LabVIEW

EXTERN_CNI_EXPORTvoid*ppyolov2_init(char*model_xml_file,char*device_name,NIErrorHandleerrorHandle){

InferEngineStruct*p=newInferEngineStruct();

p->exec_net=p->ie.LoadNetwork(model_xml_file,device_name);

p->infer_request=p->exec_net.CreateInferRequest();

return(void*)p;

}

1.4.3

创建ppyolov2_predict函数

创建ppyolov2_predict函数,用于执行ppyolov2模型预测功能。

代码清单1-3 ppyolov2函数

EXTERN_CvoidNI_EXPORTppyolov2_predict(NIImageHandlesourceHandle,void*pInferEngine,char*bbox_name,char*bbox_num_name,float*detections,NIErrorHandleerrorHandle){

NIERRORerror=NI_ERR_SUCCESS;

ReturnOnPreviousError(errorHandle);

try{

NIImagesource(sourceHandle);

MatsourceMat;

InferEngineStruct*p=(InferEngineStruct*)pInferEngine;

//从NIImage对象中浅拷贝图像数据到

Mat对象

ThrowNIError(source.ImageToMat(sourceMat));

autotype=source.type;

Blob::Ptrimage_blob=p->infer_request.GetBlob("image");

autoinput_H=image_blob->getTensorDesc().getDims()[2];

autoinput_W=image_blob->getTensorDesc().getDims()[3];

//交换RB通道

cv::Matblob;

cv::cvtColor(sourceMat,blob,cv::COLOR_BGRA2RGB);

//放缩图片到(input_H,input_W)

cv::resize(blob,blob,cv::Size(input_H,input_W),0,0,cv::INTER_LINEAR);

//图像数据归一化,减均值mean,除以方差std

//PaddleDetection模型使用imagenet数据集的Mean=[0.485,0.456,0.406]和std=[0.229,0.224,0.225]

vectormean_values{0.485*255,0.456*255,0.406*255};

vectorstd_values{0.229*255,0.224*255,0.225*255};

vectorrgbChannels(3);

split(blob,rgbChannels);

for(autoi=0;i< rgbChannels.size(); i++)

{

rgbChannels[i].convertTo(rgbChannels[i],CV_32FC1,1.0/std_values[i],(0.0-mean_values[i])/std_values[i]);

}

merge(rgbChannels,blob);

fillBlobImage(image_blob,blob);

constfloatscale_h=float(input_H)/float(sourceMat.rows);

constfloatscale_w=float(input_W)/float(sourceMat.cols);

constpairscale_factor(scale_h,scale_w);

autoscale_factor_blob=p->infer_request.GetBlob("scale_factor");

fillBlobImInfo(scale_factor_blob,scale_factor);

constpairim_shape(input_H,input_W);

autoim_shape_blob=p->infer_request.GetBlob("im_shape");

fillBlobImInfo(im_shape_blob,im_shape);

p->infer_request.Infer();

constfloat*infer_results=p->infer_request.GetBlob(bbox_name)->buffer().as();

constint*bbox_nums=p->infer_request.GetBlob(bbox_num_name)->buffer().as();

autobbox_num=bbox_nums[0];

for(inti=0;i< bbox_num; i++) {

detections[i*6+0]=infer_results[i*6+0];

detections[i*6+1]=infer_results[i*6+1];

detections[i*6+2]=infer_results[i*6+2];

detections[i*6+3]=infer_results[i*6+3];

detections[i*6+4]=infer_results[i*6+4];

detections[i*6+5]=infer_results[i*6+5];

}

}

catch(NIERROR_err){

error=_err;

}

catch(...){

error=NI_ERR_OCV_USER;

}

ProcessNIError(error,errorHandle);

}

1.4.4

创建ppyolov2_delete函数

创建ppyolov2_delete函数,用于释放ppyolov2_init创建的内存。

代码清单1-4 ppyolov2_delete函数

EXTERN_CvoidNI_EXPORTppyolov2_delete(void*pInferEngine,NIErrorHandleerrorHandle){

NIERRORerror=NI_ERR_SUCCESS;

ReturnOnPreviousError(errorHandle);

InferEngineStruct*p=(InferEngineStruct*)pInferEngine;

deletep;

}

1.4.5

LabVIEW 中调用三个函数

在Visual Studio中将三个函数编译为dll,并在LabVIEW中调用,参考范例lv_opencv_demo.vi,运行结果如下所示。

f62563fe-a264-11ec-952b-dac502259ad0.png

图1-4 LabVIEW中调用三个API函数

以上代码可以从代码仓中下载:

https://github.com/dlod-openvino/ppyolov2_openvino_samples

审核编辑 :李倩

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

    关注

    1970

    文章

    3654

    浏览量

    323260
  • 自动化
    +关注

    关注

    29

    文章

    5562

    浏览量

    79239
  • 模型
    +关注

    关注

    1

    文章

    3226

    浏览量

    48806

原文标题:在LabVIEW中调用OpenVINO™ 模型 | 开发者实战

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

收藏 人收藏

    评论

    相关推荐

    LabVIEW+OpenVINOCPU上部署新冠肺炎检测模型实战(含源码)

    使用LabVIEW+OpenVINOCPU上部署新冠肺炎CT图像病害分割
    的头像 发表于 03-23 13:34 1739次阅读
    <b class='flag-5'>LabVIEW+OpenVINO</b><b class='flag-5'>在</b>CPU上部署新冠肺炎检测<b class='flag-5'>模型</b>实战(含源码)

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

    FastSAM 模型 | 开发者实战》,该文章我们向大家展示了基于 OpenVINO Python API 的基本部署流程。实际部署
    的头像 发表于 11-17 09:53 911次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ API部署FastSAM<b class='flag-5'>模型</b>

    LabVIEW调用simulink模型

    各位亲,小弟simulink做了一个模型 想通过使用SIT工具包在LabVIEW里面调用,但是遇到了些许小问题,一直搞不懂 向各位请教一
    发表于 09-17 13:09

    如何将PyTorch模型OpenVINO trade结合使用?

    无法确定如何转换 PyTorch 掩码 R-CNN 模型以配合OpenVINO™使用。
    发表于 08-15 07:04

    LabVIEW调用DLL的高级技巧后续资源包

    1、LabVIEW调用DLL的高级技巧2、.NET InteropAssembly Builder3、LabVIEW机器人版
    发表于 07-01 08:28 209次下载

    LabVIEW网络讲坛第四季:LabVIEW调用DLL的技巧

    通过共享库文件共享代码是业界最常用的方式。本集介绍了LabVIEW调用dll的各种技巧。
    的头像 发表于 06-22 14:15 5851次阅读
    <b class='flag-5'>LabVIEW</b>网络讲坛第四季:<b class='flag-5'>在</b><b class='flag-5'>LabVIEW</b><b class='flag-5'>中</b><b class='flag-5'>调用</b>DLL的技巧

    LabVIEW可用的几种计算模型

    本文将概括了LabVIEW可用的几种计算模型,以及何时使用这些模型的指南。
    发表于 04-25 15:46 21次下载

    LabVIEW调用DLL的整个过程及注意事项

    LabVIEW调用DLL的整个过程及注意事项说明。
    发表于 05-25 15:10 116次下载

    C++中使用OpenVINO工具包部署YOLOv5模型

    下载并转换YOLOv5预训练模型的详细步骤,请参考:《基于OpenVINO™2022.2和蝰蛇峡谷优化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的头像 发表于 02-15 16:53 4641次阅读

    AI爱克斯开发板上用OpenVINO™加速YOLOv8目标检测模型

    AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 分类模型》介绍了 AI 爱克斯开发板上使用 OpenVINO 开发套件
    的头像 发表于 05-12 09:08 1311次阅读
    <b class='flag-5'>在</b>AI爱克斯开发板上用<b class='flag-5'>OpenVINO</b>™加速YOLOv8目标检测<b class='flag-5'>模型</b>

    自训练Pytorch模型使用OpenVINO™优化并部署AI爱克斯开发板

    本文章将依次介绍如何将 Pytorch 自训练模型经过一系列变换变成 OpenVINO IR 模型形式,而后使用 OpenVINO Python API 对 IR
    的头像 发表于 05-26 10:23 925次阅读
    自训练Pytorch<b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>™优化并部署<b class='flag-5'>在</b>AI爱克斯开发板

    AI爱克斯开发板上用OpenVINO™加速YOLOv8-seg实例分割模型

    AI 爱克斯开发板上用 OpenVINO 加速 YOLOv8 目标检测模型》介绍了 AI 爱克斯开发板上使用 OpenVINO 开发
    的头像 发表于 06-30 10:43 902次阅读
    <b class='flag-5'>在</b>AI爱克斯开发板上用<b class='flag-5'>OpenVINO</b>™加速YOLOv8-seg实例分割<b class='flag-5'>模型</b>

    Python环境搭建和LabVIEW调用

    本文主要介绍Python相关的环境搭建、Anaconda的使用以及LabVIEW调用Python的方法。
    的头像 发表于 10-13 17:56 3113次阅读
    Python环境搭建和<b class='flag-5'>LabVIEW</b><b class='flag-5'>中</b>的<b class='flag-5'>调用</b>

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

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

    如何快速下载OpenVINO Notebooks的AI大模型

    OpenVINO Notebooks是Jupyter Notebook形式的OpenVINO范例程序大集合,方便开发者快速学习并掌握OpenVINO推理程序,并通过Copy&Paste方式将范例
    的头像 发表于 12-12 14:40 1118次阅读
    如何快速下载<b class='flag-5'>OpenVINO</b> Notebooks<b class='flag-5'>中</b>的AI大<b class='flag-5'>模型</b>