news 2026/3/29 3:12:54

LabVIEW 携手 YOLOv8:全方位视觉处理的奇妙之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LabVIEW 携手 YOLOv8:全方位视觉处理的奇妙之旅

labview yolov8分类,目标检测,实例分割,关键点检测onnxruntime推理,封装dll, labview调用dll,支持同时加载多个模型并行推理,可cpu/gpu, x86/x64位,识别视频和图片,cpu和gpu可选,只需要替换模型的onnx和names即可,源码和库函数,推理速度很快,还有trt模型推理。 同时还有标注,训练源码(labview编写,后台调用python)

在计算机视觉领域,YOLOv8 无疑是一颗耀眼的明星,它的高效与准确令人称赞。今天咱们就来聊聊如何在 LabVIEW 中玩转 YOLOv8,实现分类、目标检测、实例分割以及关键点检测,并且通过onnxruntime 推理,还能封装成 DLL 供 LabVIEW 调用,支持多模型并行推理,无论是 CPU 还是 GPU,x86 还是 x64 位系统都能轻松驾驭,同时还能识别视频和图片,这可太实用了!

一、onnxruntime 推理实现

首先讲讲onnxruntime 推理。onnxruntime 是一个跨平台的机器学习推理加速器,能很好地与 YOLOv8 的 ONNX 模型配合。

下面以一段简单的 Python 代码示例,展示如何使用onnxruntime 进行目标检测推理:

import onnxruntime import numpy as np # 加载ONNX模型 ort_session = onnxruntime.InferenceSession('yolov8n.onnx') # 假设我们有预处理好的图像数据 image_data = np.random.rand(1, 3, 640, 640).astype(np.float32) # 运行推理 outputs = ort_session.run(None, {'images': image_data})

在这段代码中,我们先通过onnxruntime.InferenceSession加载了 YOLOv8 的 ONNX 模型。然后准备了随机生成的图像数据(实际应用中肯定是从图片或视频帧获取并预处理好的数据),最后通过ort_session.run方法运行推理,得到输出结果。这些输出结果经过后续处理,就能获取到目标检测的相关信息,比如目标的类别、位置等。

二、封装 DLL

为了方便在 LabVIEW 中调用,我们需要把这些推理功能封装成 DLL。以 C++ 为例,利用 ONNX Runtime C++ API 来封装:

#include <onnxruntime_cxx_api.h> #include <iostream> #include <vector> extern "C" __declspec(dllexport) void runYoloInference(float* image_data, float* output_data) { Ort::Env env(ORT_LOGGING_LEVEL_ERROR, "yolo_inference"); Ort::SessionOptions session_options; session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL); Ort::Session session(env, "yolov8n.onnx", session_options); Ort::AllocatorWithDefaultOptions allocator; const int64_t input_shape[] = {1, 3, 640, 640}; Ort::Value input_tensor = Ort::Value::CreateTensor<float>(allocator, image_data, 3 * 640 * 640, input_shape, 4); std::vector<const char*> input_names = {"images"}; std::vector<const char*> output_names = {"output0"}; std::vector<Ort::Value> output_tensors; session.Run(Ort::RunOptions{nullptr}, input_names.data(), &input_tensor, 1, output_names.data(), output_tensors, 1); Ort::Value& output_tensor = output_tensors[0]; float* output = output_tensor.GetTensorMutableData<float>(); for (int i = 0; i < 1000; ++i) { output_data[i] = output[i]; } }

在这段 C++ 代码中,我们定义了一个runYoloInference函数,它接受输入图像数据指针和输出数据指针。在函数内部,创建了 ONNX Runtime 的环境和会话,准备输入张量并运行推理,最后将推理结果复制到输出数据指针指向的内存区域。通过declspec(dllexport)声明,这个函数就能被封装成 DLL 供其他程序调用,比如 LabVIEW。

三、LabVIEW 调用 DLL

在 LabVIEW 中调用这个 DLL 也不难。首先在 LabVIEW 中创建一个调用库函数节点,设置好 DLL 路径、函数名以及参数类型。假设我们之前封装的 DLL 名为yolo_inference.dll

  1. 在 LabVIEW 前面板创建输入输出控件,用于传递图像数据和接收推理结果。
  2. 在程序框图中放置调用库函数节点,设置库名称为yolo_inference.dll,函数名称为runYoloInference
  3. 配置参数,输入图像数据参数设置为float[]类型,输出数据参数也设置为float[]类型。

这样,就能在 LabVIEW 中顺利调用封装好的 DLL 进行 YOLOv8 推理啦。

四、多模型并行推理

支持同时加载多个模型并行推理是个超酷的功能。在代码实现上,可以利用多线程技术。比如在 Python 中使用concurrent.futures模块:

import concurrent.futures import onnxruntime import numpy as np def run_inference(model_path, image_data): ort_session = onnxruntime.InferenceSession(model_path) outputs = ort_session.run(None, {'images': image_data}) return outputs models = ['yolov8n1.onnx', 'yolov8n2.onnx'] image_data = np.random.rand(1, 3, 640, 640).astype(np.float32) with concurrent.futures.ThreadPoolExecutor() as executor: futures = [] for model in models: future = executor.submit(run_inference, model, image_data) futures.append(future) results = [] for future in concurrent.futures.as_completed(futures): results.append(future.result())

在这段代码中,定义了run_inference函数来运行单个模型的推理。然后通过ThreadPoolExecutor创建线程池,提交多个模型的推理任务到线程池并行执行,最后收集所有模型的推理结果。在实际应用到 LabVIEW 中时,结合之前封装的 DLL,通过合理的线程管理,就能实现多模型并行推理,大大提高处理效率。

五、标注与训练源码(LabVIEW 编写,后台调用 Python)

最后说说标注与训练源码。通过 LabVIEW 编写界面,后台调用 Python 脚本来实现标注和训练功能。

比如在 LabVIEW 中使用系统命令节点调用 Python 标注脚本:

  1. 在 LabVIEW 程序框图中放置系统命令节点。
  2. 设置命令行参数为python labelscript.py,其中labelscript.py是实现标注功能的 Python 脚本。
  3. 可以传递相关参数,比如数据集路径等给 Python 脚本。

对于训练部分同样如此,通过系统命令节点调用训练的 Python 脚本,像python train_script.py --model yolov8n --data data.yaml,这样就能方便地在 LabVIEW 界面控制下,利用 YOLOv8 进行训练了。

总之,通过以上一系列操作,我们在 LabVIEW 中构建了一个功能强大的 YOLOv8 视觉处理系统,无论是推理速度还是功能的多样性都表现出色,无论是处理图片还是视频都游刃有余,而且无论是 CPU 还是 GPU 环境,不同架构的系统都能很好适配,源码和库函数的结合也让开发者能够轻松拓展和优化。希望这篇博文能给大家在相关项目开发中带来启发和帮助!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 0:13:59

PyTorch安装后如何优化推理?vLLM镜像提供完整方案

PyTorch安装后如何优化推理&#xff1f;vLLM镜像提供完整方案 在大模型落地的今天&#xff0c;很多团队都已成功在服务器上跑通了PyTorch环境&#xff0c;也能用Hugging Face Transformers加载LLaMA或Qwen这类主流模型完成一次生成任务。但当真正面对线上高并发请求时&#xff…

作者头像 李华
网站建设 2026/3/27 13:02:17

震动微型电机的伏安特性

简 介&#xff1a; 本文研究了微型震动电机的伏安特性&#xff0c;使用可编程电源DG1766测试了0-5V电压范围内电流变化。结果显示&#xff1a;电压低于0.4V时电流呈线性关系&#xff0c;超过0.4V后电机开始震动&#xff0c;电流随电压快速上升。与普通直流电机不同&#xff0c;…

作者头像 李华
网站建设 2026/3/24 17:01:47

免费获取Qwen3-32B镜像的方法与合法使用建议

免费获取Qwen3-32B镜像的方法与合法使用建议 在当前大语言模型&#xff08;LLM&#xff09;快速演进的浪潮中&#xff0c;一个现实问题始终困扰着中小企业和独立开发者&#xff1a;如何在有限预算下获得接近顶级闭源模型能力的AI引擎&#xff1f;GPT-4级别的服务虽强&#xff0…

作者头像 李华
网站建设 2026/3/13 0:58:35

渗透测试行业术语扫盲(第十三篇)—— 安全运营与审计类

&#x1f3e2; 前言&#xff1a;从“部署产品”到“运营安全”——构建安全的神经中枢 当企业部署了琳琅满目的安全产品&#xff08;防火墙、WAF、EDR……&#xff09;后&#xff0c;真正的挑战才刚刚开始&#xff1a;如何让这些“孤岛”产生联动&#xff1f;如何从海量日志中识…

作者头像 李华
网站建设 2026/3/28 3:52:00

基于SpringBoot的实验管理系统的设计与实现

基于SpringBoot的实验管理系统的设计与实现 第一章 系统开发背景与现实意义 高校与科研机构的实验室是教学与科研的核心场所&#xff0c;但传统实验管理模式存在诸多痛点&#xff1a;实验设备预约依赖线下登记或零散软件&#xff0c;易出现时段冲突&#xff1b;耗材采购与领用缺…

作者头像 李华
网站建设 2026/3/27 17:57:09

基于SpringBoot的小型哺乳动物宠物诊所管理系统

基于SpringBoot的小型哺乳动物宠物诊所管理系统设计与实现 第一章 系统开发背景与现实意义 随着小型哺乳动物宠物&#xff08;仓鼠、兔子、龙猫等&#xff09;饲养量激增&#xff0c;专业诊所的需求日益迫切&#xff0c;但传统管理模式存在诸多痛点&#xff1a;这类宠物体型小、…

作者头像 李华