赞
踩
基于OpenVINOTM2023在LabVIEW中部署YOLOv8目标检测模型, 都是在windows下
LabVIEW是测试测量与自动化行业常用的图形化开发环境,其优点有:
学习容易入门快,开发计算机视觉应用程序简单方便
自带机器视觉函数库(Vision Development模块),并提供支持GigE、USB3 Vision等标准总线的第三方相机的图像采集驱动程序(NI-IMAQdx),和OpenCV接口工具包(NIVision OpenCV Utilities),完全满足AI机器视觉应用程序的开发要求。
LabVIEW详细介绍,请参考:https://www.ni.com/zh-cn/shop/labview.html。
使用LabVIEW调用OpenVINO IR模型,可以快速完成深度学习项目开发与交付。
要完成在LabVIEW中调用OpenVINO格式的YOLOv8模型,需要安装:
LabVIEW、Vision Development模块和NI-IMAQdx
OpenVINO 2023.0
Visual Studio 2022 Community
Ultralytics YOLOv8
LabVIEW请从https://www.ni.com/zh-cn/support/downloads/software-products/download.labview.html,下载LabVIEW安装文件。需要注意的是:请选择LabVIEW 64位版本,并勾选Vision Development模块和NI-IMAQdx。
OpenVINO分为OpenVINO™ 运行库(OpenVINO™ Runtime)和OpenVINO™开发工具集(OpenVINO™ Development Tools)。
OpenVINO™运行库:一个提供C/C++/Python API的C++函数库。
OpenVINO™开发工具集:一套包含模型优化器(Model Optimizer)、基准测试工具(Benchmark Tool)、训练后优化工具(Post-Training Optimization Tool)、模型下载器(Model Downloader)等工具的开发工具集。
请先用命令:pip install openvino-dev,安装OpenVINO™开发工具集。该命令在安装OpenVINO™开发工具集时,会同时将提供Python API的OpenVINO™运行库作为依赖项进行安装。
然后从OpenVINO官网,官网链接如下:
https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/overview.html。
下载并解压Windows版的OpenVINO^TM^ 运行库,如下图所示:
本文将OpenVINO™运行库压缩包解压到了C:\Program Files (x86)\Intel\openvino,如下图所示。
安装Visual Studio 2022 Community详细步骤请参考《在Windows中基于Visual Studio配置OpenVINO C++开发环境》(https://mp.weixin.qq.com/s/USN5UGsONanzTp-JNfHtuA)。
YOLOv8是Ultralytics公司基于YOLO框架,发布的一款面向物体检测与跟踪、实例分割、图像分类和姿态估计任务的SOTA(State-Of-The-Art)模型工具套件。
首先,使用命令:pip install ultralytics,完成ultralytics软件包安装。
然后,使用命令:yolo export model=yolov8n.pt format=openvino half=True,导出yolov8n OpenVINO格式模型,如下图所示。
为了满足LabVIEW调用C++ dll函数的规则,需要编写OpenVINO dll封装函数。整个封装工作包括一个数据结构体和四个API函数:
结构体lv_ov_engine:定义OpenVINO推理时需要传递的数据结构
create_ir():初始化OpenVINO Core对象并创建推理请求
infer():输入预处理后的图像数据,执行推理计算
getResult():获得推理计算结果
release():释放资源
定义OpenVINO推理时需要传递的数据结构,如下所示:
- *//定义OpenVINO推理时需要传递的数据结构*
-
- typedef struct lv_ov_engine {
-
- ov::Core ovCore;
-
- ov::InferRequest infer_request;
-
- } OvEngineStruct;
创建create_ir()函数,实现将OpenVINO IR模型载入指定的计算设备,并返回初始化好的推理请求,如下所示:
- *//将OpenVINO IR模型载入指定的推理设备*
-
- extern \"C\" \_\_declspec(dllexport) OvEngineStruct \* create_ir(char\* xml_file, char\* device_name)
-
- {
-
- OvEngineStruct\* p = new OvEngineStruct();
-
- auto compiled_model = p-\>ovCore.compile_model(xml_file, device_name);
-
- p-\>infer_request = compiled_model.create_infer_request();
-
- return p;
-
- }
创建infer()函数,输入预处理后的图像数据,执行推理计算,如下所示:
- *//输入预处理后的图像数据,执行推理计算*
-
- extern \"C\" \_\_declspec(dllexport) void infer(OvEngineStruct \* p, float\* inputData)
-
- {
-
- ov::Tensor input_tensor0 = p-\>infer_request.get_input_tensor(0);
-
- auto data0 = input_tensor0.data\<float\>();
-
- memcpy(data0, inputData, 1 \* 3 \* 640 \* 640 \* sizeof(float));
-
- p-\>infer_request.infer();
-
- }
创建getResult()函数,用于获取推理结果,如下所示: whaosoft aiot http://143ai.com
- *//获取推理后的结果(yolov8输出张量的大小为1\*84\*8400)*
-
- extern \"C\" \_\_declspec(dllexport) void getResult(OvEngineStruct \* p, float\* data)
-
- {
-
- auto output = p-\>infer_request.get_output_tensor(0);
-
- const float\* f = output.data\<float\>();
-
- memcpy(data, f, sizeof(float) \* 1 \* 84 \* 8400);
-
- }
创建release函数,用于释放推理引擎资源,如下所示。
- *//释放推理引擎*
-
- extern \"C\" \_\_declspec(dllexport) void release(OvEngineStruct \* p)
-
- {
-
- delete p;
-
- }
完整代码请参考:openvino_vi_wrapper.cpp,在Visual Studio中将openvino_vi_wrapper.cpp编译为dll,然后在LabVIEW中调用并封装为4个VI,如下图所示。
请读者先克隆本文的源代码到本地:
git clone https://github.com/wangstoudamire/lv_yolov8_openvino
按照README.md文档安装相关工具包,然后运行LabVIEW_OpenVINO_Demo.vi(运行之前请确保电脑已联网),运行结果如下图所示。
基于OpenVINO,创建LabVIEW 推理计算VI,实现AI推理计算简单方便。结合LabVIEW图形化开发环境,可以快速开发AI应用程序。更多AI推理计算功能,可以参考VIRobotics的LabVIEW AI工具包。 whaosoft aiot http://143ai.com
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。