Skip to content
/ OpenIVS Public

OpenIVS是一个开源的工业视觉系统,它提供了一套工业视觉软件框架,帮助你快速完成工业视觉检测项目。

License

Notifications You must be signed in to change notification settings

dl-cv/OpenIVS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenIVS 文档

简介

OpenIVS 的全称是 Open Source Industrial Vision System,即开源工业视觉系统。它是一个开源的工业视觉软件框架,帮助你快速完成工业视觉检测项目。

OpenIVS 是一个基于 .NET 平台的工业视觉软件框架,提供了相机连接、图像采集、图像处理、模型推理、PLC控制等功能。你可以使用 OpenIVS 快速搭建一个工业视觉检测系统,实现自动化检测、缺陷识别等功能。

目录

安装需求

在使用 OpenIVS 前,需要安装以下软件:

  • 海康相机MVS

MVS

使用说明

修改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);

修改相机配置

修改相机配置

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

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

  • 存图路径
  • 存图质量
  • 是否存储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);
      }
}

修改模型推理方法

设置模型路径

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

自定义模型推理

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

  1. 加载多个模型

    // 多模型管理示例
    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);
        }
    }
  2. 实现模型级联

    • 可修改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;
    }
  3. 自定义结果处理

    • 可修改结果提取和处理逻辑,实现更复杂的决策规则

修改设备逻辑

简单的设备逻辑可以在设置里修改:

自定义处理逻辑

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);
    }

About

OpenIVS是一个开源的工业视觉系统,它提供了一套工业视觉软件框架,帮助你快速完成工业视觉检测项目。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages