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

审核编辑 :李倩

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

    关注

    1921

    文章

    3619

    浏览量

    317523
  • 自动化
    +关注

    关注

    28

    文章

    5052

    浏览量

    77817
  • 模型
    +关注

    关注

    1

    文章

    2720

    浏览量

    47765

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    LabVIEW调用C#编写的.NET类库

    本文主要是LabVIEW无法调用回调函数dll的问题的解决方法,也介绍了LabVIEW调用C#库的方法。
    的头像 发表于 09-06 17:43 3795次阅读
    <b class='flag-5'>LabVIEW</b><b class='flag-5'>调用</b>C#编写的.NET类库

    LabVIEw调用多个simulink模型

    哥哥姐姐们,求助啊,小弟最近才开始看LabVIEW,老师让做个一个LabVIEW的面板,通过下拉菜单来选择加入不同的simulink模型
    发表于 07-20 10:37

    LabVIEW调用simulink模型

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

    labview调用Halcon实例

    `本人写了一个小程序,labview调用halcon实现扫码功能,还存在一些问题,调用的halcon程序如果在循环中,则无法通过
    发表于 09-13 19:39

    labview调用yolo 目标检测速度太慢?yolov4:速度和精度的完美结合,性能和精度碾压yolov3

    labview需要增加延时,才能看清overlay的结果。该内容即将加入到《龙哥手把手教你学视觉-深度学习简明教程》,届时该课程将包含:labview训练调用tensorflow版深
    发表于 01-05 09:22

    labview调用深度学习tensorflow模型非常简单,附上源码和模型

    本帖最后由 wcl86 于 2021-9-9 10:39 编辑 `labview调用深度学习tensorflow模型非常简单,效果如下,附上源码和训练过的模型:[hide][/h
    发表于 06-03 16:38

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

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

    无法使用MYRIADOpenVINO trade运行YOLOv7自定义模型怎么解决?

    无法确定如何将 YOLOv7 模型的重量(.pt 文件)转换为OpenVINO™中间表示 (IR) 并推断有 MYRIAD 的 IR。 分辨率 转换使用此 GitHub* 存储库
    发表于 08-15 08:29

    使用OpenVINO™ 部署PaddleSeg模型库中的DeepLabV3+模型

          01 概述     本文是OpenVINO 工具套件与百度飞桨PaddlePaddle模型转换/部署系列的第二部。这篇文章专注于展示如何将百度飞桨PaddelSeg项目
    的头像 发表于 11-22 14:58 9091次阅读
    使用<b class='flag-5'>OpenVINO</b>™ 部署PaddleSeg<b class='flag-5'>模型</b>库中的DeepLabV3+<b class='flag-5'>模型</b>

    LABVIEW调用C# DLL的实例分享

    LABVIEW调用C# DLL的实例分享
    发表于 01-04 11:20 95次下载

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

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

    如何将Pytorch自训练模型变成OpenVINO IR模型形式

    本文章将依次介绍如何将Pytorch自训练模型经过一系列变换变成OpenVINO IR模型形式,而后使用OpenVINO Python API 对IR
    的头像 发表于 06-07 09:31 1178次阅读
    如何将Pytorch自训练<b class='flag-5'>模型</b>变成<b class='flag-5'>OpenVINO</b> IR<b class='flag-5'>模型</b>形式

    没有“中间商赚差价”, OpenVINO™ 直接支持 PyTorch 模型对象

    随着 OpenVINO 2023.0 版本的发布,OpenVINO 工具库中预置了全新的 PyTorch 前端,为开发者们提供了一条全新的 PyTorch 模型支持路径,带来更友好的用户
    的头像 发表于 06-27 16:39 446次阅读
    没有“中间商赚差价”, <b class='flag-5'>OpenVINO</b>™ 直接支持 PyTorch <b class='flag-5'>模型</b>对象

    NNCF压缩与量化YOLOv8模型OpenVINO部署测试

    OpenVINO2023版本衍生出了一个新支持工具包NNCF(Neural Network Compression Framework – 神经网络压缩框架),通过对OpenVINO IR格式模型的压缩与量化更好的提升
    的头像 发表于 11-20 10:46 970次阅读
    NNCF压缩与量化YOLOv8<b class='flag-5'>模型</b>与<b class='flag-5'>OpenVINO</b>部署测试