前言

随着工业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

需要安装高性能SDK套件才能加载模型进行推理

需要使用深度视觉AI平台训练模型

该SDK提供了模型推理所需的各项功能

参考文档:https://docs.dlcv.com.cn/deploy/csharp_sdk

项目使用

1、修改PLC配置

在 ModbusManager.cs 中可以修改PLC相关配置:

串口通信参数设置

_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中增加如下方法:

_modbusApi.WriteSingleRegister(16, isOK);

2、修改相机配置

修改相机配置

单相机的情况下,可以在设置页面修改,包括相机名称,触发方式等:

同时也可以在设置页面修改:

  • 存图路径
  • 存图质量
  • 是否存储OK图或NG图

多相机支持

  • 多相机的情况下,可以在 CameraInitializer.cs 中修改相机连接参数:
  • 当前系统使用单例模式管理相机:CameraInstance.Instance

若需支持多相机,可修改为列表管理多个相机实例

// 多相机管理示例
private List<CameraManager> _cameraManagers = new List<CameraManager>(); // 初始化多个相机
public void InitializeMultipleCameras(Settings settings)
{
foreach (var cameraConfig in settings.CameraConfigs)
{
var cameraManager = new CameraManager();
// 设置相机参数
_cameraManagers.Add(cameraManager);
}
}

3、修改模型推理方法

设置模型路径

在设置页面,可以修改模型路径:

自定义模型推理

在 ModelManager.cs 中可以修改AI模型推理相关配置:

加载多个模型

// 多模型管理示例
private Dictionary<string, Model> _models = new Dictionary<string, Model>(); // 加载多个模型
public void LoadModels(List<string> modelPaths)
{
foreach (var path in modelPaths)
{
string modelName = Path.GetFileNameWithoutExtension(path);
_models[modelName] = new Model(path, 0);
}
}

实现模型级联

可修改PerformInference方法实现多模型级联推理

// 级联推理示例
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、修改位置序列

// 位置序列定义可以根据需要调整
private readonly float[] _positionSequence = new float[] { 195, 305, 415, 305 };

2、调整处理流程

主流程在RunMainLoopAsync方法中定义

可修改移动-拍照-推理的顺序或添加额外步骤

3、添加图像预处理

在ProcessImageAsync方法中添加图像处理逻辑

// 图像预处理示例
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、自定义后处理逻辑

在推理结果处理后添加自定义逻辑,如结果聚合、条件判断等

// 后处理逻辑示例
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、相机采集、开源框架、自动化检测

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

.NET 开源工业视觉系统 OpenIVS 快速搭建自动化检测平台的更多相关文章

  1. Docker: 快速搭建LNMP网站平台

    快速搭建LNMP网站平台 步骤: 1.自定义网络(这里建立一个自定义网络,名字叫 lnmp, 让LNMP网站的服务,都加入这个自定义网络)docker network create lnmp2.创建M ...

  2. Docker搭建代码检测平台SonarQube并检测maven项目

    1 前言 良好的代码习惯是一个优秀程序员应该具备的品质,但靠人的习惯与记忆来保证代码质量,始终不是一件靠谱的事.在计算机行业应该深知,只要是人为的,都会有操作风险.本文讲解如何通过Docker搭建代码 ...

  3. 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』

    Apache Spark 简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎.Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源 ...

  4. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)

    每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...

  5. Cucumber+Rest Assured快速搭建api自动化测试平台

    转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/ 什么是 ...

  6. 通过hadoop + hive搭建离线式的分析系统之快速搭建一览

    最近有个需求,需要整合所有店铺的数据做一个离线式分析系统,曾经都是按照店铺分库分表来给各自商家通过highchart多维度展示自家的店铺经营 数据,我们知道这是一个以店铺为维度的切分数据,非常适合目前 ...

  7. 使用Hexo开源博客系统,轻松搭建你的个人博客(2)- 配置篇

    上一章节,我们介绍了Hexo的基础搭建,搭建完大家一定发现,是英文版本的,并且页面有点丑陋.这一章节,就来跟大家介绍Hexo的配置和主题的设置. 站点信息 上一章有跟大家提到过_config.yml这 ...

  8. 使用Hexo开源博客系统,轻松搭建你的个人博客(1)

    Hexo 是一个轻量级.简洁.高效且高逼格的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.同时有着丰富的主题,官网或者GitHub都可 ...

  9. 使用HttpReports快速搭建API分析平台

    HttpReports 简单介绍 HttpReports 是 .Net Core下的一个Web组件,适用于 WebAPI 项目和 API 网关项目,通过中间件的形式集成到您的项目中, 通过HttpRe ...

  10. vue.js快速搭建图书管理平台

      前  言 上一期简单讲解了vue的基本语法,这一次我们做一个小项目,搭建一个简单的图书管理平台,能够让我们更深刻的理解这门语言的妙用.   1.DEMO样式 首先我们需要搭建一个简单的demo样式 ...

随机推荐

  1. 使用 Trae 辅助开发一个网页文本高亮插件

    项目概述 本插件是一个用于在网页上高亮显示选中文本的工具,支持多种颜色选择.高亮复制和删除等功能.插件基于 Edge 扩展测试开发. 目前只大致开发了内容交互脚本和插件弹出页,后台管理页暂未开发. 项 ...

  2. leaflet生成地图封装成jquery插件使用

    公司业务里一直都有使用leaflet地图插件来做地图展示.绘图等操作.公司有个项目已经有好几年了,由于项目原因一直在使用,今年由于google 地图 api过期,导致已经使用的地图无法加载.我作为现在 ...

  3. logback-spring.xml 模版

    <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...

  4. 无法解析@NotBlank

    当碰到无法解析的时候,一般都是地址写错了,找不到相应的路劲 我是全局能搜到这个包@NotBlank,在jakarta.validation-api包里面,但是我网上搜https://www.cnblo ...

  5. PKCS#系列规范分别规定了什么

    PKCS#1:定义了RSA公钥和私钥的表示方法,以及如何进行RSA加密和签名. PKCS#2:原本是用以规范RSA加密摘要的转换方式,现已被纳入PKCS#1之中. PKCS#3:规范以Diffie-H ...

  6. Linux 系统出现异常排查思路

    16 系统出现异常排查思路16.1 查看用户信息16.1.1查看当前的用户# who 04:39:39 up  1:30,  1 user,  load average: 0.01, 0.01, 0. ...

  7. C++文件读写常用操作

    C++文件读写常用操作 最近的毕设工作要使用C++保存读取一些矩阵,此篇博文记录比较好用的C++文件读写操作. 写 #include <iostream> #include <fst ...

  8. 移动应用APP购物车(店铺系列二)

    今天还是说移动app开发,店铺系列文章,我们经常去超市使用购物车,即一个临时的储物空间,用完清空回收.我大兄弟说, 平时很忙,录入订单的目录很多,临时有事回来要可以继续填写,提交订单后才算结束,这就是 ...

  9. 【跟K8S学设计】Informer全分析-Reflector(上)

    鉴于Informer架构及其处理逻辑蕴含了丰富的实战技术,本文将分为上下两章进行深入探讨. 上篇将专注于解析Informer中的Reflector组件,而下篇则会详尽分析Indexer模块.通过这种结 ...

  10. 测试工作中用到的Redis命令

    由于项目测试的需要,经常需要连接Redis数据库修改某些键值,无奈最近Redis的客户端连接工具使用不了 只有使用命令行来操作了,现总结如下: 1.远程连接Redis redis-cli -h hos ...