{"id":26745208,"url":"https://github.com/dl-cv/openivs","last_synced_at":"2025-07-11T04:06:30.713Z","repository":{"id":283957878,"uuid":"945802913","full_name":"dl-cv/OpenIVS","owner":"dl-cv","description":"OpenIVS是一个开源的工业视觉系统，它提供了一套工业视觉软件框架，帮助你快速完成工业视觉检测项目。","archived":false,"fork":false,"pushed_at":"2025-07-10T13:35:52.000Z","size":2107,"stargazers_count":54,"open_issues_count":1,"forks_count":15,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-10T20:40:35.315Z","etag":null,"topics":["csharp","deep-learning","image-processing","industrial-automation","modbus","opencv","wpf"],"latest_commit_sha":null,"homepage":"https://dlcv.com.cn/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dl-cv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-10T06:35:30.000Z","updated_at":"2025-07-10T17:18:37.000Z","dependencies_parsed_at":"2025-07-03T10:19:36.088Z","dependency_job_id":"d358a44e-53da-4ecd-9f6c-5d77d7793f14","html_url":"https://github.com/dl-cv/OpenIVS","commit_stats":null,"previous_names":["dl-cv/openivs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dl-cv/OpenIVS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-cv%2FOpenIVS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-cv%2FOpenIVS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-cv%2FOpenIVS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-cv%2FOpenIVS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dl-cv","download_url":"https://codeload.github.com/dl-cv/OpenIVS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dl-cv%2FOpenIVS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264726769,"owners_count":23654494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","deep-learning","image-processing","industrial-automation","modbus","opencv","wpf"],"created_at":"2025-03-28T08:15:53.489Z","updated_at":"2025-07-11T04:06:30.707Z","avatar_url":"https://github.com/dl-cv.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenIVS 文档\n\n## 简介\n\nOpenIVS 的全称是 Open Source Industrial Vision System，即开源工业视觉系统。它是一个开源的工业视觉软件框架，帮助你快速完成工业视觉检测项目。\n\nOpenIVS 是一个基于 .NET 平台的工业视觉软件框架，提供了相机连接、图像采集、图像处理、模型推理、PLC控制等功能。你可以使用 OpenIVS 快速搭建一个工业视觉检测系统，实现自动化检测、缺陷识别等功能。\n\n![](README/openivs.png)\n\n## 目录\n\n- [安装需求](#安装需求)\n- [使用说明](#使用说明)\n  - [修改PLC配置](#修改plc配置)\n  - [修改相机配置](#修改相机配置)\n  - [修改模型推理方法](#修改模型推理方法)\n  - [修改设备逻辑](#修改设备逻辑)\n\n## 安装需求\n\n在使用 OpenIVS 前，需要安装以下软件：\n\n* **海康相机MVS**\n  - 版本：MVS_STD_4.4.0_240913.exe\n  - 下载地址：[MVS_STD_4.4.0_240913.zip](https://www.hikrobotics.com/cn2/source/support/software/MVS_STD_4.4.0_240913.zip)\n  - 用于相机连接和图像采集\n\n![MVS](README/image.png)\n\n* **Halcon**（可选）\n  - 版本：halcon-20.11.1.0-windows.exe\n  - 下载地址：[https://www.mvtec.com/downloads](https://www.mvtec.com/downloads)\n  - 如果需要使用Halcon接口进行图像处理，则需要安装\n\n* **深度视觉AI平台**\n  - 官方网站：[https://dlcv.com.cn](https://dlcv.com.cn)\n  - 需要安装**高性能SDK套件**才能加载模型进行推理\n  - 您需要使用深度视觉AI平台训练模型\n  - 该SDK提供了模型推理所需的各项功能\n  - 参考文档：[https://docs.dlcv.com.cn/deploy/csharp_sdk](https://docs.dlcv.com.cn/deploy/csharp_sdk)\n\n![](README/image-1.png)\n\n## 使用说明\n\n### 修改PLC配置\n\n在 [ModbusManager.cs](OpenIVSWPF\\Managers\\ModbusManager.cs) 中可以修改PLC相关配置：\n\n#### 串口通信参数设置\n\n   ```csharp\n   _modbusApi.SetSerialPort(\n       settings.PortName,  // 串口名称\n       settings.BaudRate,  // 波特率\n       settings.DataBits,  // 数据位\n       settings.StopBits,  // 停止位\n       settings.Parity,    // 校验位\n       (byte)settings.DeviceId   // 设备ID\n   );\n   ```\n\n也可以在设置页面修改：\n\n![](README/image-2.png)\n\n#### 位置控制参数\n   - 修改`MoveToPositionAsync`方法可调整位置控制逻辑\n   - 调整位置精度：`Math.Abs(currentPosition - position) \u003c 1.0f`\n\n#### 增加其他动作\n\n可在`ModbusManager`中增加其他PLC控制动作，以满足特定需求。例如：增加 OK/NG 信号控制。\n\n假设 PLC 通过写入寄存器 16 实现 OK/NG 信号控制，可以在`ModbusManager`中增加如下方法：\n\n```csharp\n_modbusApi.WriteSingleRegister(16, isOK);\n```\n\n### 修改相机配置\n\n#### 修改相机配置\n\n单相机的情况下，可以在设置页面修改，包括相机名称，触发方式等：\n\n![](README/image-3.png)\n\n同时也可以在设置页面修改：\n\n* 存图路径\n* 存图质量\n* 是否存储OK图或NG图\n\n#### 多相机支持\n\n多相机的情况下，可以在 [CameraInitializer.cs](OpenIVSWPF\\Managers\\CameraInitializer.cs) 中修改相机连接参数：\n\n- 当前系统使用单例模式管理相机：`CameraInstance.Instance`\n- 若需支持多相机，可修改为列表管理多个相机实例\n\n```csharp\n// 多相机管理示例\nprivate List\u003cCameraManager\u003e _cameraManagers = new List\u003cCameraManager\u003e();\n\n// 初始化多个相机\npublic void InitializeMultipleCameras(Settings settings)\n{\n      foreach (var cameraConfig in settings.CameraConfigs)\n      {\n         var cameraManager = new CameraManager();\n         // 设置相机参数\n         _cameraManagers.Add(cameraManager);\n      }\n}\n```\n\n### 修改模型推理方法\n\n#### 设置模型路径\n\n在设置页面，可以修改模型路径：\n\n![](README/image-4.png)\n\n#### 自定义模型推理\n\n在 [ModelManager.cs](OpenIVSWPF\\Managers\\ModelManager.cs) 中可以修改AI模型推理相关配置：\n\n1. **加载多个模型**\n   ```csharp\n   // 多模型管理示例\n   private Dictionary\u003cstring, Model\u003e _models = new Dictionary\u003cstring, Model\u003e();\n   \n   // 加载多个模型\n   public void LoadModels(List\u003cstring\u003e modelPaths)\n   {\n       foreach (var path in modelPaths)\n       {\n           string modelName = Path.GetFileNameWithoutExtension(path);\n           _models[modelName] = new Model(path, 0);\n       }\n   }\n   ```\n\n2. **实现模型级联**\n   - 可修改`PerformInference`方法实现多模型级联推理\n   ```csharp\n   // 级联推理示例\n   public string PerformCascadeInference(Bitmap image)\n   {\n       // 第一阶段：检测\n       var detectionResult = _models[\"DetModel\"].InferBatch(imageList);\n       \n       // 第二阶段：分割\n       var smallImages = CropImage(image, detectionResult);\n       var segmentationResult = _models[\"SegModel\"].InferBatch(smallImages);\n       \n       return segmentationResult;\n   }\n   ```\n\n3. **自定义结果处理**\n   - 可修改结果提取和处理逻辑，实现更复杂的决策规则\n\n### 修改设备逻辑\n\n简单的设备逻辑可以在设置里修改：\n\n![](README/image-5.png)\n\n#### 自定义处理逻辑\n\n在 [MainLoopManager.cs](OpenIVSWPF\\Managers\\MainLoopManager.cs) 中可以修改整体处理逻辑：\n\n1. **修改位置序列**\n   ```csharp\n   // 位置序列定义可以根据需要调整\n   private readonly float[] _positionSequence = new float[] { 195, 305, 415, 305 };\n   ```\n\n2. **调整处理流程**\n   - 主流程在`RunMainLoopAsync`方法中定义\n   - 可修改移动-拍照-推理的顺序或添加额外步骤\n\n3. **添加图像预处理**\n   - 在`ProcessImageAsync`方法中添加图像处理逻辑\n   ```csharp\n   // 图像预处理示例\n   private Bitmap PreprocessImage(Bitmap image)\n   {\n       using (var mat = BitmapConverter.ToMat(image))\n       {\n           // 添加预处理步骤，如二值化等\n           Cv2.CvtColor(mat, mat, ColorConversionCodes.BGR2GRAY);\n           Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);\n           \n           return BitmapConverter.ToBitmap(mat);\n       }\n   }\n   ```\n\n4. **自定义后处理逻辑**\n   - 在推理结果处理后添加自定义逻辑，如结果聚合、条件判断等\n   ```csharp\n   // 后处理逻辑示例\n   private bool PostProcessResult(string result)\n   {\n       // 实现自定义决策逻辑\n       if (result.Contains(\"缺陷\") \u0026\u0026 _currentPositionIndex == 2)\n       {\n           // 特定位置的特定缺陷处理\n           return false;\n       }\n       return string.IsNullOrEmpty(result);\n   }\n   ```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdl-cv%2Fopenivs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdl-cv%2Fopenivs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdl-cv%2Fopenivs/lists"}