.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 控制、图像采集、模型推理、结果反馈等功能模块,适用于各种自动化检测场景。 ![](https://cdn.res.knowhub.vip/c/2505/29/6b157216.jpg?G1QAAOQ11zgpn0C2jTZQnaV32gxIVBFU6lmve%2b%2b5ToDnC0Yu%2bfpbH7E%2b%2fKH1EaBuKgaMrKhInishE7lgTUclNxTV%2fM4A) ## 项目功能 OpenIVS 主要包含以下核心功能模块: ### 1、相机连接与图像采集 支持海康MVS相机驱动; 可配置触发方式、曝光参数、图像保存路径; 支持单相机或多相机管理; 图像质量与存储策略可自定义。 ### 2、AI模型推理 集成深度视觉AI平台高性能SDK; 支持加载多个模型并实现级联推理; 支持图像预处理与结果后处理; 模型路径可通过界面动态配置。 ### 3、PLC控制与设备逻辑 支持Modbus串口通信协议; 可设置串口参数、设备ID、寄存器地址; 提供位置控制、OK/NG信号反馈等基础逻辑; 支持扩展自定义控制动作。 ### 4、系统配置与设置 提供图形化设置页面,便于修改相机参数、PLC设置、模型路径; 支持图像保存策略(是否保存OK图或NG图); 可灵活调整位置序列、处理流程、图像处理算法等。 ## 项目特点 OpenIVS 不仅功能全面,还具备以下优势: **模块化设计** 各功能模块(相机、AI、PLC、图像处理)高度解耦,便于独立开发、调试与替换。 **开源免费** 作为开源项目,开发者可以自由查看源码、进行二次开发,适配自身业务需求。 **易于扩展** 支持多相机、多模型、多任务并发处理,满足复杂工业场景下的定制化需求。 **跨平台兼容性好** 基于 .NET 平台,可在 Windows 上稳定运行,未来可拓展至 Linux 环境。 **实时性强、稳定性高** 通过异步处理机制和良好的资源管理,确保系统在高频率检测任务中的实时性和稳定性。 ![](https://cdn.res.knowhub.vip/c/2505/29/265b3677.png?G1UAAMTsdJxIfCS026hD2jvFHc1ARRpBpZ71es9Z%2byb6fgcjx2e0Pn1%2f%2bEXr00mLqRiBoawIAVdiZLGqGlKBwViqxjUc) ## 安装需求 在使用 OpenIVS 前,需要安装以下软件: **1、海康相机MVS** 版本:MVS\_STD\_4.4.0\_240913.exe 下载地址:MVS\_STD\_4.4.0\_240913.zip 用于相机连接和图像采集 ![](https://cdn.res.knowhub.vip/c/2505/29/604ddf64.png?G1QAAETn9LwUrADZvtMdbIlTE20GJKoIKvWs13vO2jfR9wcYkp%2fR%2boz94Q%2btzyB102oEhrIieVyFIWq1WhJXVzFHXiMA) **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 ![](https://cdn.res.knowhub.vip/c/2505/29/14f1216e.png?G1UAAER17rxgW11R%2fE480ASBBJqBijSCSj3r9e491y3y%2fRUKj08vbdT14ReljSo8E48kUFCJEJBNQVO6B8sG%2boXMOHsF) ## 项目使用 ### 1、修改PLC配置 在 ModbusManager.cs 中可以修改PLC相关配置: **串口通信参数设置** ```cs _modbusApi.SetSerialPort( settings.PortName, // 串口名称 settings.BaudRate, // 波特率 settings.DataBits, // 数据位 settings.StopBits, // 停止位 settings.Parity, // 校验位 (byte)settings.DeviceId // 设备ID ); ``` 也可以在设置页面修改: ![](https://cdn.res.knowhub.vip/c/2505/29/c37ac8fa.png?G1UAAER17rxgo1KGfice0wSBBJuBijSCSj3r9fz%2f2pfI%2bzkUOd6j9en7wy9any60wqMIFFQiBJxJQWRTDclKBSuzxTUc) **位置控制参数** 修改`MoveToPositionAsync`方法可调整位置控制逻辑 调整位置精度:`Math.Abs(currentPosition - position) < 1.0f` **增加其他动作** 可在ModbusManager中增加其他PLC控制动作,以满足特定需求。例如:增加 OK/NG 信号控制。 假设 PLC 通过写入寄存器 16 实现 OK/NG 信号控制,可以在`ModbusManager`中增加如下方法: ```cs _modbusApi.WriteSingleRegister(16, isOK); ``` ### 2、修改相机配置 **修改相机配置** 单相机的情况下,可以在设置页面修改,包括相机名称,触发方式等: ![](https://cdn.res.knowhub.vip/c/2505/29/46fd1400.png?G1QAAMTydJz4dxx0G3X4NlEk2gxIVBFU6lmv5%2f%2f3uUTez6BI%2fp59LDsf%2ftDHMmHJjFmgoBLOowUFiRqrS01TDlro9zQ%3d) 同时也可以在设置页面修改: - 存图路径 - 存图质量 - 是否存储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、修改模型推理方法 **设置模型路径** 在设置页面,可以修改模型路径: ![](https://cdn.res.knowhub.vip/c/2505/29/90ef9add.png?G1QAAMTW3Dgp8AZF22gDdWfqnTYDElUElXrW6917rpvo%2bwOMIz%2b9thHrwx9qG0F6mhYjMJQVycOFYexwSS7iUL5Knj0A) **自定义模型推理** 在 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、修改设备逻辑 简单的设备逻辑可以在设置里修改: ![](https://cdn.res.knowhub.vip/c/2505/29/157ea782.png?G1UAAMT0bJxoe7TCNvqh%2f4lHQjNQkUZQqWe93nv3aUTf72Dk%2bMw%2blp8Pv%2bhjOWkxTUZgKCtCQBWGwQQliHCuJUFy3NMB) **自定义处理逻辑** 在 `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、相机采集、开源框架、自动化检测 ## 最后 如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。