作者:英特爾物聯(lián)網(wǎng)行業(yè)創(chuàng)新大使 王立奇
1.1什么是 LabVIEW
LabVIEW 是測(cè)試測(cè)量與自動(dòng)化行業(yè)常用的圖形化開發(fā)環(huán)境,其優(yōu)點(diǎn)有:
學(xué)習(xí)容易入門快,開發(fā)計(jì)算機(jī)視覺應(yīng)用程序簡(jiǎn)單方便;
自帶機(jī)器視覺函數(shù)庫(kù)(Vision Development 模塊),并提供支持 GigE、USB3 Vision 等標(biāo)準(zhǔn)總線的第三方相機(jī)的圖像采集驅(qū)動(dòng)程序(NI-IMAQdx),和 OpenCV 接口工具包(NIVision OpenCV Utilities),完全滿足 AI 機(jī)器視覺應(yīng)用程序的開發(fā)要求。
使用 LabVIEW 調(diào)用 OpenVINO IR 模型,可以快速完成深度學(xué)習(xí)項(xiàng)目開發(fā)與交付。
1.2準(zhǔn)備開發(fā)環(huán)境
要完成在 LabVIEW 中調(diào)用 OpenVINO 格式的 YOLOv8 模型,需要安裝:
LabVIEW,Vision Development 模塊和 NI-IMAQdx
OpenVINO 2023.0
Visual Studio 2022 Community
Ultralytics YOLOv8
1.2.1安裝 LabVIEW
請(qǐng)從下方地址下載 LabVIEW 安裝文件:
*需要注意的是:請(qǐng)選擇 LabVIEW 64 位版本,并勾選 Vision Development 模塊和 NI-IMAQdx。
1.2.2安裝 OpenVINO
OpenVINO分為 OpenVINO 運(yùn)行庫(kù)(OpenVINO Runtime)和 OpenVINO開發(fā)工具集(OpenVINO Development Tools)。
OpenVINO運(yùn)行庫(kù):一個(gè)提供 C/C++/Python API 的 C++ 函數(shù)庫(kù)。
OpenVINO開發(fā)工具集:一套包含模型優(yōu)化器(Model Optimizer)、基準(zhǔn)測(cè)試工具(Benchmark Tool)、訓(xùn)練后優(yōu)化工具(Post-Training Optimization Tool)、模型下載器(Model Downloader)等工具的開發(fā)工具集。
請(qǐng)先用命令:
pip install openvino-dev
安裝 OpenVINO開發(fā)工具集。該命令在安裝 OpenVINO開發(fā)工具集時(shí),會(huì)同時(shí)將提供 Python API 的 OpenVINO運(yùn)行庫(kù)作為依賴項(xiàng)進(jìn)行安裝。
然后從 OpenVINO官網(wǎng):
下載并解壓 Windows 版的 OpenVINO運(yùn)行庫(kù),如下圖所示:
本文將 OpenVINO 運(yùn)行庫(kù)壓縮包解壓到了 C:Program Files (x86)Intelopenvino,如下圖所示:
1.2.3安裝 Visual Studio 2022 Community
安裝 Visual Studio 2022 Community 詳細(xì)步驟請(qǐng)參考《在Windows中基于Visual Studio配置OpenVINO C++開發(fā)環(huán)境》。
1.2.4安裝 Ultralytics 并導(dǎo)出 YOLOv8 模型
YOLOv8 是 Ultralytics 公司基于 YOLO 框架,發(fā)布的一款面向物體檢測(cè)與跟蹤、實(shí)例分割、圖像分類和姿態(tài)估計(jì)任務(wù)的 SOTA(State-Of-The-Art)模型工具套件。
首先,使用命令,完成 ultralytics 軟件包安裝。
pip install ultralytics
然后,使用命令:
yolo export model=yolov8n.pt format=openvino half=True
導(dǎo)出 YOLOv8n OpenVINO格式模型,如下圖所示:
1.3為 LabVIEW 調(diào)用
編寫 OpenVINO dll 封裝函數(shù)
為了滿足 LabVIEW 調(diào)用 C++ dll 函數(shù)的規(guī)則,需要編寫 OpenVINO dll 封裝函數(shù)。整個(gè)封裝工作包括一個(gè)數(shù)據(jù)結(jié)構(gòu)體和四個(gè) API 函數(shù):
結(jié)構(gòu)體 lv_ov_engine:定義 OpenVINO推理時(shí)需要傳遞的數(shù)據(jù)結(jié)構(gòu)
create_ir():初始化 OpenVINO Core 對(duì)象并創(chuàng)建推理請(qǐng)求
infer():輸入預(yù)處理后的圖像數(shù)據(jù),執(zhí)行推理計(jì)算
getResult():獲得推理計(jì)算結(jié)果
release():釋放資源
1.3.1定義結(jié)構(gòu)體 lv_ov_engine
定義 OpenVINO推理時(shí)需要傳遞的數(shù)據(jù)結(jié)構(gòu),如下所示:
//定義OpenVINO推理時(shí)需要傳遞的數(shù)據(jù)結(jié)構(gòu) typedef struct lv_ov_engine { ov::Core ovCore; ov::InferRequest infer_request; } OvEngineStruct;
向右滑動(dòng)查看完整代碼
1.3.2創(chuàng)建 create_ir() 函數(shù)
創(chuàng)建 create_ir() 函數(shù),實(shí)現(xiàn)將 OpenVINO IR 模型載入指定的計(jì)算設(shè)備,并返回初始化好的推理請(qǐng)求,如下所示:
//將OpenVINO IR模型載入指定的推理設(shè)備 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; }
向右滑動(dòng)查看完整代碼
1.3.3創(chuàng)建 IE_Run 函數(shù)
創(chuàng)建 infer() 函數(shù),輸入預(yù)處理后的圖像數(shù)據(jù),執(zhí)行推理計(jì)算,如下所示:
//輸入預(yù)處理后的圖像數(shù)據(jù),執(zhí)行推理計(jì)算 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(); memcpy(data0, inputData, 1 * 3 * 640 * 640 * sizeof(float)); p->infer_request.infer(); }
向右滑動(dòng)查看完整代碼
1.3.4創(chuàng)建 getResult() 函數(shù)
創(chuàng)建 getResult() 函數(shù),用于獲取推理結(jié)果,如下所示:
//獲取推理后的結(jié)果(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(); memcpy(data, f, sizeof(float) * 1 * 84 * 8400); }
向右滑動(dòng)查看完整代碼
1.3.5創(chuàng)建 release 函數(shù)
創(chuàng)建 release 函數(shù),用于釋放推理引擎資源,如下所示:
//釋放推理引擎 extern "C" __declspec(dllexport) void release(OvEngineStruct * p) { delete p; }
向右滑動(dòng)查看完整代碼
完整代碼請(qǐng)參考:openvino_vi_wrapper.cpp,在 Visual Studio 中將 openvino_vi_wrapper.cpp 編譯為 dll,然后在 LabVIEW 中調(diào)用并封裝為 4 個(gè) VI,如下圖所示:
1.4使用 LabVIEW OpenVINO VI
實(shí)現(xiàn) YOLOv8 目標(biāo)檢測(cè)
請(qǐng)讀者先克隆本文的源代碼到本地:
git clone
https://github.com/wangstoudamire/lv_yolov8_openvino
按照 README.md 文檔安裝相關(guān)工具包,然后運(yùn)行 LabVIEW_OpenVINO_Demo.vi(運(yùn)行之前請(qǐng)確保電腦已聯(lián)網(wǎng)),運(yùn)行結(jié)果如下圖所示:
1.5結(jié)論
基于 OpenVINO,創(chuàng)建 LabVIEW 推理計(jì)算 VI,實(shí)現(xiàn) AI 推理計(jì)算簡(jiǎn)單方便。結(jié)合 LabVIEW 圖形化開發(fā)環(huán)境,可以快速開發(fā) AI 應(yīng)用程序。更多 AI 推理計(jì)算功能,可以參考 VIRobotics 的 LabVIEW AI 工具包:
審核編輯:湯梓紅
-
英特爾
+關(guān)注
關(guān)注
61文章
10158瀏覽量
173773 -
LabVIEW
+關(guān)注
關(guān)注
1993文章
3669瀏覽量
332525 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2926文章
45776瀏覽量
386901 -
模型
+關(guān)注
關(guān)注
1文章
3477瀏覽量
49922 -
目標(biāo)檢測(cè)
+關(guān)注
關(guān)注
0文章
222瀏覽量
15885
原文標(biāo)題:OpenVINO?2023.0實(shí)戰(zhàn) | 在LabVIEW中部署YOLOv8目標(biāo)檢測(cè)模型
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
labview調(diào)用yolov8/11目標(biāo)檢測(cè)、分割、分類
使用YOLOv8做目標(biāo)檢測(cè)和實(shí)例分割的演示
在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8分類模型

在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

YOLOv8版本升級(jí)支持小目標(biāo)檢測(cè)與高分辨率圖像輸入

AI愛克斯開發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測(cè)模型

YOLOv6在LabVIEW中的推理部署(含源碼)

在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實(shí)例分割模型

在AI愛克斯開發(fā)板上用OpenVINO?加速YOLOv8-seg實(shí)例分割模型

三種主流模型部署框架YOLOv8推理演示
基于YOLOv8的自定義醫(yī)學(xué)圖像分割

基于OpenCV DNN實(shí)現(xiàn)YOLOv8的模型部署與推理演示

RV1126 yolov8訓(xùn)練部署教程

RV1126 yolov8訓(xùn)練部署教程

評(píng)論