.NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
笔记哥 /
05-29 /
26点赞 /
0评论 /
720阅读
## 前言
随着工业4.0和智能制造的发展,工业视觉在质检、定位、识别等场景中发挥着越来越重要的作用。然而,开发一个完整的工业视觉系统往往需要集成相机控制、图像采集、图像处理、AI推理、PLC通信等多个模块,这对开发人员提出了较高的技术要求。
推荐一个基于 .NET 平台的开源工业视觉软件框架OpenIVS,提供完整的视觉系统开发所需的基础功能模块,帮助大家快速开发高效、稳定的工业检测系统。
## 项目介绍
OpenIVS 全称 Open Source Industrial Vision System,是一个面向工业视觉领域的开源软件框架,提供一套标准化、模块化、可扩展的视觉系统开发平台。
它基于 .NET 平台开发,支持与主流工业相机(如海康MVS)、图像处理库(如Halcon、OpenCV)、AI推理SDK(如深度视觉AI平台)进行集成,并提供 PLC 控制、图像采集、模型推理、结果反馈等功能模块,适用于各种自动化检测场景。

## 项目功能
OpenIVS 主要包含以下核心功能模块:
### 1、相机连接与图像采集
支持海康MVS相机驱动;
可配置触发方式、曝光参数、图像保存路径;
支持单相机或多相机管理;
图像质量与存储策略可自定义。
### 2、AI模型推理
集成深度视觉AI平台高性能SDK;
支持加载多个模型并实现级联推理;
支持图像预处理与结果后处理;
模型路径可通过界面动态配置。
### 3、PLC控制与设备逻辑
支持Modbus串口通信协议;
可设置串口参数、设备ID、寄存器地址;
提供位置控制、OK/NG信号反馈等基础逻辑;
支持扩展自定义控制动作。
### 4、系统配置与设置
提供图形化设置页面,便于修改相机参数、PLC设置、模型路径;
支持图像保存策略(是否保存OK图或NG图);
可灵活调整位置序列、处理流程、图像处理算法等。
## 项目特点
OpenIVS 不仅功能全面,还具备以下优势:
**模块化设计**
各功能模块(相机、AI、PLC、图像处理)高度解耦,便于独立开发、调试与替换。
**开源免费**
作为开源项目,开发者可以自由查看源码、进行二次开发,适配自身业务需求。
**易于扩展**
支持多相机、多模型、多任务并发处理,满足复杂工业场景下的定制化需求。
**跨平台兼容性好**
基于 .NET 平台,可在 Windows 上稳定运行,未来可拓展至 Linux 环境。
**实时性强、稳定性高**
通过异步处理机制和良好的资源管理,确保系统在高频率检测任务中的实时性和稳定性。

## 安装需求
在使用 OpenIVS 前,需要安装以下软件:
**1、海康相机MVS**
版本:MVS\_STD\_4.4.0\_240913.exe
下载地址:MVS\_STD\_4.4.0\_240913.zip
用于相机连接和图像采集

**2、Halcon(可选)**
版本:halcon-20.11.1.0-windows.exe
下载地址:https://www.mvtec.com/downloads
如果需要使用Halcon接口进行图像处理,则需要安装
**3、深度视觉AI平台**
官方网站:[https://dlcv.com.cn](https://dlcv.com.cn/)
需要安装高性能SDK套件才能加载模型进行推理
需要使用深度视觉AI平台训练模型
该SDK提供了模型推理所需的各项功能
参考文档:https://docs.dlcv.com.cn/deploy/csharp_sdk

## 项目使用
### 1、修改PLC配置
在 ModbusManager.cs 中可以修改PLC相关配置:
**串口通信参数设置**
```cs
_modbusApi.SetSerialPort(
settings.PortName, // 串口名称
settings.BaudRate, // 波特率
settings.DataBits, // 数据位
settings.StopBits, // 停止位
settings.Parity, // 校验位
(byte)settings.DeviceId // 设备ID
);
```
也可以在设置页面修改:

**位置控制参数**
修改`MoveToPositionAsync`方法可调整位置控制逻辑
调整位置精度:`Math.Abs(currentPosition - position) < 1.0f`
**增加其他动作**
可在ModbusManager中增加其他PLC控制动作,以满足特定需求。例如:增加 OK/NG 信号控制。
假设 PLC 通过写入寄存器 16 实现 OK/NG 信号控制,可以在`ModbusManager`中增加如下方法:
```cs
_modbusApi.WriteSingleRegister(16, isOK);
```
### 2、修改相机配置
**修改相机配置**
单相机的情况下,可以在设置页面修改,包括相机名称,触发方式等:

同时也可以在设置页面修改:
- 存图路径
- 存图质量
- 是否存储OK图或NG图
**多相机支持**
- 多相机的情况下,可以在 `CameraInitializer.cs` 中修改相机连接参数:
- 当前系统使用单例模式管理相机:`CameraInstance.Instance`
若需支持多相机,可修改为列表管理多个相机实例
```cs
// 多相机管理示例
private List _cameraManagers = new List();
// 初始化多个相机
public void InitializeMultipleCameras(Settings settings)
{
foreach (var cameraConfig in settings.CameraConfigs)
{
var cameraManager = new CameraManager();
// 设置相机参数
_cameraManagers.Add(cameraManager);
}
}
```
### 3、修改模型推理方法
**设置模型路径**
在设置页面,可以修改模型路径:

**自定义模型推理**
在 ModelManager.cs 中可以修改AI模型推理相关配置:
**加载多个模型**
```cs
// 多模型管理示例
private Dictionary _models = new Dictionary();
// 加载多个模型
public void LoadModels(List modelPaths)
{
foreach (var path in modelPaths)
{
string modelName = Path.GetFileNameWithoutExtension(path);
_models[modelName] = new Model(path, 0);
}
}
```
**实现模型级联**
可修改PerformInference方法实现多模型级联推理
```cs
// 级联推理示例
public string PerformCascadeInference(Bitmap image)
{
// 第一阶段:检测
var detectionResult = _models["DetModel"].InferBatch(imageList);
// 第二阶段:分割
var smallImages = CropImage(image, detectionResult);
var segmentationResult = _models["SegModel"].InferBatch(smallImages);
return segmentationResult;
}
```
**自定义结果处理**
可修改结果提取和处理逻辑,实现更复杂的决策规则
### 4、修改设备逻辑
简单的设备逻辑可以在设置里修改:

**自定义处理逻辑**
在 `MainLoopManager.cs` 中可以修改整体处理逻辑:
**1、修改位置序列**
```cs
// 位置序列定义可以根据需要调整
private readonly float[] _positionSequence = new float[] { 195, 305, 415, 305 };
```
**2、调整处理流程**
主流程在`RunMainLoopAsync`方法中定义
可修改移动-拍照-推理的顺序或添加额外步骤
**3、添加图像预处理**
在ProcessImageAsync方法中添加图像处理逻辑
```cs
// 图像预处理示例
private Bitmap PreprocessImage(Bitmap image)
{
using (var mat = BitmapConverter.ToMat(image))
{
// 添加预处理步骤,如二值化等
Cv2.CvtColor(mat, mat, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);
return BitmapConverter.ToBitmap(mat);
}
}
```
**4、自定义后处理逻辑**
在推理结果处理后添加自定义逻辑,如结果聚合、条件判断等
```cs
// 后处理逻辑示例
private bool PostProcessResult(string result)
{
// 实现自定义决策逻辑
if (result.Contains("缺陷") && _currentPositionIndex == 2)
{
// 特定位置的特定缺陷处理
return false;
}
return string.IsNullOrEmpty(result);
}
```
## 项目源码
**Gitee:** https://gitee.com/dl-cv/OpenIVS
## 总结
OpenIVS 是一个功能强大、结构清晰、易于扩展的开源工业视觉系统框架。无论你是刚入门的视觉开发新手,还是有经验的工程师,都可以借助 OpenIVS 快速搭建起属于自己的工业检测系统。
它不仅提供了从图像采集到缺陷识别的全流程能力,还开放了丰富的配置接口和扩展点,极大地降低了开发门槛和项目周期成本。
以上仅展示了OpenIVS 平台的部分功能。更多实用特性和详细信息,请大家访问项目源码。
希望本文能为从工业视觉开发的技术人员提供有价值的参考,感谢您阅读本篇文章,也欢迎交流讨论更多关于工业视觉平台设计与落地的经验!
**关键词**:OpenIVS、工业视觉、图像处理、AI推理、PLC控制、C#、.NET、相机采集、开源框架、自动化检测
## 最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/3816
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- .NET Core中的配置Configuration实战
- 常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具
- 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
- .NET 10 进展之 CoreCLR Interpreter
- 一款基于 .NET 开源、可以拦截并修改 WinSock 封包的 Windows 软件
- 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件
- 解锁.NET 9性能优化:内存、异步、代码与Web全方位指南
- 使用MCP C# SDK开发MCP Server + Client
- Gradio.Net:加速 .NET 的 Web 应用开发
- Magick.NET 支持100多种格式的强大 .NET 图片处理库
- 2025年C#/.NET/.NET Core优秀项目和框架推荐
- EF Core 10 中 LeftJoin 和 RightJoin 运算符在 LINQ 查询中的应用
- [开源][.Net Framework 4.0] SimpleLiveDataFeed v1.0更新:增加NuGet包
- .NET 10 Preview 4中ASP.NET Core 改进
- ASP.NET Core 实现的领域驱动设计框架推荐
- 如何在 .NET 中 使用 ANTLR4
- 如何把ASP.NET Core WebApi打造成Mcp Server
- .NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台
- C#/.NET/.NET Core技术前沿周刊 | 第 39 期(2025年5.19-5.25)
- C# LINQ 快速入门实战指南,建议收藏学习!
- 解决.NET AOT交叉编译到Linux - arm64的坑
- 10年+.NET Coder 心语 ── 单一职责原则的思维:为什么你的代码总在"牵一发而动全身"
- 3款基于.NET开源且免费的远程桌面工具分享
- 深入理解.NET Core中的配置Configuration和应用
- ASP.NET Core EFCore 属性配置与DbContext 详解
- .NET 的全新低延时高吞吐自适应 GC - Satori GC