# HalconVisonStudio **Repository Path**: AAAandSphinx/halcon-vison-studio ## Basic Information - **Project Name**: HalconVisonStudio - **Description**: **Halcon Vision Studio** 是基于 Halcon 机器视觉库的可视化流程编辑器,采用 WPF + Prism 插件化架构,支持拖拽式编排视觉检测流程,集成海康等工业相机,提供 60+ 视觉算子插件,实现零代码构建视觉检测方案。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Halcon Vision Studio 基于 Halcon 机器视觉库的可视化流程编辑器,采用插件化架构设计,支持拖拽式流程编排和多种工业相机接入。 ## 项目概述 Halcon Vision Studio 是一个功能强大的机器视觉工作流编辑平台,通过可视化界面让用户能够快速构建和部署视觉检测方案。项目采用 WPF 技术开发,基于 Prism 框架实现模块化架构,支持插件扩展。 ## 核心特性 ### 1. 可视化流程编辑 - **拖拽式编排**:通过拖拽算子节点构建视觉处理流程 - **可视化连线**:直观展示数据流向和节点依赖关系 - **参数配置**:每个算子节点支持独立的参数配置界面 - **实时预览**:流程执行过程中实时显示图像处理结果 ### 2. 插件化架构 - **模块化设计**:基于 Prism 框架的模块化架构,支持动态加载插件 - **算子注册中心**:统一的算子注册和管理机制 - **分类展示**:算子按功能类型分组展示在工具箱中 ### 3. 工业相机支持 - **统一接口**:提供工业相机统一抽象接口 `ICamera` - **多品牌支持**: - 海康威视(HIK)相机 SDK 集成 - Halcon 通用图像采集接口 - **触发模式**:支持软触发和硬触发两种采集模式 - **参数配置**:曝光时间、增益、触发延迟等参数的读取和设置 ### 4. 方案管理 - **方案持久化**:支持流程方案的保存和加载 - **多流程支持**:一个方案可包含多个独立流程 - **数据序列化**:节点、连线、参数等数据的完整序列化 ## 项目优势 ### 1. 开发效率提升 - **零代码开发**:通过可视化拖拽方式构建视觉检测流程,无需编写代码 - **快速原型验证**:几分钟内即可完成视觉方案的原型设计和验证 - **所见即所得**:实时预览处理结果,快速调试和优化参数 ### 2. 架构设计优势 - **高度解耦**:插件化架构使核心引擎与算子实现完全分离 - **易于扩展**:新增算子只需实现标准接口,无需修改核心代码 - **统一管理**:算子注册中心统一管理所有算子,便于维护和查询 ### 3. 工业级应用支持 - **多相机兼容**:统一接口支持多种工业相机品牌,切换相机无需修改流程 - **触发模式完善**:支持软触发、硬触发等多种采集模式,适应不同工业场景 - **参数配置灵活**:相机参数(曝光、增益、触发延迟等)可独立配置和保存 ### 4. 用户体验优化 - **直观的界面**:现代化的 UI 设计,清晰的操作流程 - **分类清晰**:算子按功能分类展示,快速定位所需功能 - **参数可视化**:每个算子都有独立的参数配置界面,支持交互式设置 ### 5. 技术先进性 - **最新框架**:基于 .NET 10.0 和 WPF 开发,性能优异 - **成熟架构**:采用 Prism 框架,代码结构清晰,易于维护 - **依赖注入**:使用 Unity 容器管理依赖,降低耦合度 ### 6. 学习价值 - **架构参考**:可作为插件化架构、MVVM 模式的学习案例 - **视觉算法库**:涵盖机器视觉全流程的经典算法实现 - **工业应用**:展示工业视觉检测系统的完整解决方案 ## 项目结构 ``` halcon-vison-studio/ ├── AAAandSphinx.Vision.SDK/ # 相机 SDK 基础库 │ ├── SDK/ │ │ ├── ICamera.cs # 相机统一接口 │ │ ├── BaseCamera.cs # 相机抽象基类 │ │ └── CameraConfig.cs # 相机配置数据模型 │ └── E*.cs # 枚举定义(触发模式、IO线等) │ ├── AAAandSphinx.Vision.SDK.HK/ # 海康相机 SDK 实现 │ └── CameraHik.cs # 海康相机具体实现 │ ├── AAAandSphinx.Vision.SDK.Halcon/ # Halcon 相机 SDK 实现 │ └── CameraHalcon.cs # Halcon 相机具体实现 │ ├── HalconVisionStudio.Core/ # 核心功能模块 │ ├── Registration/ │ │ └── ControlCenter.cs # 算子注册中心 │ └── Runtime/ │ └── HandleRunModel.cs # 运行时模型 │ ├── HalconVisionStudio.Shared/ # 共享库 │ ├── Abstractions/ # 接口定义 │ ├── Data/ # 数据模型 │ ├── Handles/ # 算子基类 │ ├── Parameters/ # 参数系统 │ └── Runtime/ # 运行时支持 │ ├── HalconVisionStudio.UI/ # UI 组件库 │ ├── Dialogs/ # 对话框 │ ├── Workflow/ # 工作流编辑器 │ └── Toolbox/ # 工具箱 │ ├── HalconVisionStudio/ # 主应用程序 │ ├── Plugins/ # 插件目录 │ ├── Geometry/ # 几何生成 │ ├── ImageInput/ # 图像输入 │ ├── Preprocessing/ # 图像预处理 │ ├── Segmentation/ # 图像分割 │ ├── RegionProcessing/ # 区域处理 │ ├── ShapeFeature/ # 形状特征 │ ├── GrayFeature/ # 灰度特征 │ ├── ShapeMatching/ # 形状匹配 │ ├── Measurement/ # 测量 │ ├── ContourProcessing/ # 轮廓处理 │ ├── ResultOutput/ # 结果输出 │ └── DeviceCommunication/ # 设备通信 │ └── Demo.SDK.*/ # SDK 演示项目 ``` ## 插件系统 项目包含丰富的视觉算子插件,按功能分类如下: > **⚠️ 注意事项** > > 当前项目处于持续开发阶段,部分算子插件功能尚不完善,待后续更新优化: > - **轮廓处理类算子**:ContourFeatures、ContourProcessing 等算子的参数配置和交互功能待完善 > - **设备通信算子**:DeviceCommunication 算子的通信协议支持有限,待扩展 > - **部分测量算子**:ContourMeasure 等算子的测量精度和结果输出格式待优化 > - **高级分割算子**:ScratchSegmentation 等专用分割算子待完善参数配置界面 > - **部分预处理算子**:GrayOpeningRect、GrayClosingRect 等算子的参数验证待加强 > > 欢迎开发者提交 Issue 或 Pull Request 共同完善这些算子功能。 ### 1. 几何生成(Geometry) - **GenCircle**:生成圆形区域 - **GenEllipse**:生成椭圆区域 - **GenRectangle1**:生成矩形(轴对齐) - **GenRectangle2**:生成矩形(任意方向) - **GenEmptyRegion**:生成空区域 ### 2. 图像输入(ImageInput) - **ReadImage**:从文件读取图像 - **CameraHik**:海康相机采集 ### 3. 图像预处理(Preprocessing) - **MeanImage**:均值滤波 - **MedianImage**:中值滤波 - **SobelAmp**:Sobel 边缘检测 - **RgbToGray**:RGB 转灰度 - **ScaleImage**:图像缩放 - **Emphasize**:图像增强 - **EquHistoImage**:直方图均衡化 - **Illuminate**:光照校正 - **ReduceDomain**:缩小定义域 - **TopHat/BottomHat**:形态学 TopHat/BottomHat - **GrayOpeningRect/GrayClosingRect**:灰度开闭运算 ### 4. 图像分割(Segmentation) - **Threshold**:阈值分割 - **AutoThreshold**:自动阈值 - **BinaryThreshold**:二值化阈值 - **FastThreshold**:快速阈值 - **DynThreshold**:动态阈值 - **VarThreshold**:可变阈值 - **LocalThreshold**:局部阈值 - **HysteresisThreshold**:滞后阈值 - **EdgesSubPix**:亚像素边缘检测 - **LinesGauss**:高斯线条检测 ### 5. 区域处理(RegionProcessing) - **Connection**:连通区域分割 - **FillUp**:区域填充 - **ShapeTrans**:形状变换 - **SelectShape**:形状筛选 - **UnionRegion**:区域合并 - **Skeleton**:骨架提取 - **Morphology**:形态学运算 - **OpeningRectangle/ClosingRectangle**:开闭运算 ### 6. 形状特征(ShapeFeature) - **AreaCenter**:面积和中心 - **SmallestCircle**:最小外接圆 - **SmallestRectangle1/2**:最小外接矩形 - **InnerCircle**:最大内接圆 - **InnerRectangle1**:最大内接矩形 ### 7. 灰度特征(GrayFeature) - **Intensity**:灰度强度 - **MinMaxGray**:灰度极值 - **AreaCenterGray**:灰度重心 ### 8. 形状匹配(ShapeMatching) - **CreateShapeModel**:创建形状模型 - **FindShapeModel**:查找形状模型 - **CreateScaledShapeModel**:创建缩放形状模型 - **FindScaledShapeModel**:查找缩放形状模型 - **ReadShapeModel/WriteShapeModel**:模型读写 - **ClearShapeModel**:清除模型 - **SetShapeModelOrigin**:设置模型原点 - **GetShapeModelContours**:获取模型轮廓 ### 9. 测量(Measurement) - **DefectMeasure**:缺陷测量 - **CompareCondition**:条件比较 - **DistanceMeasure**:距离测量 - **AngleMeasure**:角度测量 - **ShapeGeometry**:形状几何测量 - **ShapeFeature**:形状特征测量 - **ContourMeasure**:轮廓测量 ### 10. 轮廓处理(ContourProcessing) - **ContourFeatures**:轮廓特征 - **ContourProcessing**:轮廓处理 ### 11. 结果输出(ResultOutput) - **DisplayInfo**:显示信息 ### 12. 设备通信(DeviceCommunication) - **DeviceCommunication**:设备通信 ## 技术栈 - **.NET 10.0**:目标框架 - **WPF**:桌面应用框架 - **Prism**:MVVM 框架和模块化支持 - **Halcon**:机器视觉库 - **MahApps.Metro**:UI 控件库 - **Unity**:依赖注入容器 ## 快速开始 ### 环境要求 - Windows 操作系统 - .NET 10.0 SDK - Halcon 运行时库 - 海康相机 SDK(可选) ### 编译运行 1. 克隆项目仓库 2. 使用 Visual Studio 2022 或更高版本打开 `HalconVS.slnx` 3. 还原 NuGet 包 4. 编译并运行项目 ### 使用说明 1. 启动应用程序后,左侧显示算子工具箱 2. 从工具箱拖拽算子到画布中 3. 连接算子节点构建处理流程 4. 双击节点配置参数 5. 点击运行按钮执行流程 ## 扩展开发 ### 创建自定义算子插件 1. **创建插件项目** - 创建新的类库项目,引用 `HalconVisionStudio.Shared` - 实现 `IModule` 接口 2. **定义算子参数** ```csharp public class MyParameter : IHandleParameter { // 定义参数属性 } ``` 3. **实现算子逻辑** ```csharp [Handle("显示名称", "唯一键", "描述", "分类")] public class MyHandle : ParameterHandleBase { public override void Handle() { // 实现处理逻辑 } } ``` 4. **注册算子** ```csharp public class MyModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { var center = containerProvider.Resolve(); var model = new HandleRegisterModel(typeof(MyHandle)); center.Register(model.Key, model); } } ``` ## 许可证 本项目仅供学习和研究使用。 ## 贡献 欢迎提交 Issue 和 Pull Request。 ## 联系方式 如有问题或建议,请通过 Issue 与我们联系。