# dotnetflowsolution **Repository Path**: lcintj/dotnetflowsolution ## Basic Information - **Project Name**: dotnetflowsolution - **Description**: .NET 9 + WPF 搭建工业视觉框架 VisionMaster 技术栈全拆解 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: https://mp.weixin.qq.com/s/8K4nOai90Wg0kOAkexx5RQ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-02-02 - **Last Updated**: 2026-02-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README >声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢! [《.NET 9 + WPF 搭建工业视觉框架 VisionMaster 技术栈全拆解》](https://mp.weixin.qq.com/s/8K4nOai90Wg0kOAkexx5RQ) ![输入图片说明](DotNet%E6%8A%80%E6%9C%AF%E5%8C%A0.jpg) ## 前言 工业自动化和智能制造快速发展,机器视觉系统已成为产线质检、定位引导、缺陷检测等场景的核心组件。然而,一套稳定、可扩展且易于二次开发的视觉平台并不容易构建。 本文推荐一个基于 .NET 9 和 WPF 开发的开源项目——VisionMaster,它不仅结构清晰、模块解耦良好,还集成了 OpenCV 与 ONNX 模型推理能力,为工业视觉应用提供了扎实的基础框架。 ## 项目介绍 项目是一个以 WPF 为前端、.NET 9 为运行时的桌面级机器视觉软件原型。 项目源码组织规范,采用现代.NET 工程管理方式,通过 `Directory.Build.Props` 和 `Directory.Build.targets` 实现全局配置统一管理,包括产品名称、版权信息、图标资源等。 ## 目录结构 核心分为Source(业务/控件)、Solution(解决方案)、Tools(工具)、Setups(安装包)、Document(素材)五大顶层目录。 ## 项目功能 1、加载本地图像或视频作为视觉输入源; 2、集成 YOLOv5s 的 ONNX 模型,实现目标检测; 3、通过节点化设计(如 `OpenCVSrcImageFilesNodeData`)支持视觉流程的灵活编排; 4、具备标准的启动闪屏(SplashScreen)、 主窗口界面及 MVVM 架构支撑; 5、支持主题切换、多语言文案配置(通过程序集属性集中管理)。 ## 项目特点 所有产品元信息(如标题、版权)集中配置,避免散落在多个文件中; 启动画面与主窗口标题均通过 `ApplicationProvider` 统一读取,修改一处即可全局生效; 控件库(WPF-Control)独立封装,包含 Form 表单、TagBox、PDF 预览等通用组件,复用性强; Splash 屏幕采用接口 `ISplashScreenViewPresenter` + XAML 模板实现,解耦良好,易于定制。 这些设计让开发能快速聚焦业务逻辑,而不被重复的样板代码拖累。 ## 项目技术 运行平台:.NET 9.0-windows,兼顾性能与跨平台潜力; UI 框架:WPF + MVVM 模式,数据绑定流畅,界面响应迅速; 视觉后端:OpenCV for .NET(EmguCV 或 OpenCvSharp),支持图像采集、处理与分析; 模型推理:通过 ONNX Runtime 加载 yolov5s.onnx,实现轻量级目标检测; 工程管理:使用 Directory.Build.Props 统一版本号、公司名、版权等元数据; 启动体验:自定义 SplashScreen,支持动态文案配置,提升专业感。 另外,项目还内置了 IconBuilder 工具,可一键生成符合 Windows 应用规范的多尺寸图标,细节考虑周到。 ## 项目说明 ### 启动流程 1、初始化:App.xaml加载统一配置,App.xaml.cs注册服务、配置SplashScreen(标题/副标题/版权); 2、启动界面:渲染SplashScreenViewPresenter.xaml模板,文本来源为SplashScreenOptions与ApplicationProvider; 3、主窗口:创建MainWindow,标题绑定ApplicationProvider.Product,完成界面初始化。 ### 关键配置/修改入口 1、启动界面文案:修改App.xaml.cs中SplashScreenOptions的Product/Sub属性; 2、主窗口标题:配置程序集AssemblyProduct属性(集中在Directory.Build.Props或主应用csproj); 3、版权信息:Directory.Build.Props中配置Copyright字段,通过ApplicationProvider.Copyright读取; 4、主题/样式:在App.xaml.cs的Configure方法中切换,样式资源集中在H.Style目录。 ### 操作建议 1、编译运行:用VS 2022+打开解决方案,编译运行H.App.VisionMaster.OpenCV项目; 2、文案调整:聚焦App.xaml.cs(启动界面)、Directory.Build.Props(版权/产品名); 3、业务扩展:参考VisionMaster/NodeDatas下现有视觉节点(如OpenCVSrcImageFilesNodeData); 4、打包分发:直接使用Setups目录的setup.exe,或基于现有配置扩展安装包。 ## 项目代码 ```cs public override void LoadDefault() { base.LoadDefault(); this.ModelPath = "yolov5s.onnx".ToOnnxPath(); this.LabelPath = "lable.txt".ToOnnxPath(); this.InputSize = new System.Windows.Size(640, 640); this.OutputRowIndex = 1; this.OutputColumnIndex = 2; this.OutputConfidenceIndex = 3; } protected override async Task BeforeInvokeAsync(IFlowableLinkData previors, IFlowableDiagramData diagram) { if (!File.Exists(this.ModelPath) || !File.Exists(this.LabelPath)) { bool? r = await System.Windows.Application.Current.Dispatcher.Invoke(async () => { return await IocMessage.Form?.ShowEdit(this, x => x.Title = $"{this.Name}:请先选择文件", null, x => { x.UsePropertyNames = $"{nameof(ModelPath)},{nameof(LabelPath)}"; }); }); if (r != true) return this.Error("训练模型不存在"); } return await base.BeforeInvokeAsync(previors, diagram); } ``` ## 项目效果 加载测试图片后,YOLOv5 模型能准确框出目标物体,延迟在可接受范围内。整个流程稳定,无明显卡顿或内存泄漏,体现出良好的工程素养。 ### 启动页 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/85df764df68644d19c80a55459b921e5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=dWq0%2ByCwzD0OghPuCPQrfRE8rsw%3D) ## 系统主页 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/747a95cab7374539872ad951e646eee4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=VnBfbKxRGdXd8nH4mmHFfrnXGZ4%3D) ### 系统数据源 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/5425ac7dee3c4395ade5d81b046052be~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=eQRpNJAahBDIGpEYelsO34HK5lA%3D) ### 对象识别 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/797030abd128485ab2e9e31f6f752afe~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=%2B3YW8QPqBOjt%2BKarvU5ewf3WpO8%3D) ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/326373fe62f64d10a64ef03fd1922bcf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=T4GXDuKCjZXG3A9tdtmHGOggXy8%3D) ## 功能列表 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/e20dca571d204064ad6ca14121c9c91c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=igQ%2FWt%2B7uWRqCwEQyb90XBm%2FBSE%3D) ## 系统主题 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/ce6d2adfa07a47c4931639d3a129401c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=DMa%2B%2FDEeCAfQiDE3U4r%2BXVNplAo%3D) ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/9fa9c225984a442397a67eef73a5f8f3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=AvdQMie%2Bj4FJUaGH1H0LRlDfZwY%3D) ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/4a9e747ba59348cdb55deda3b64b0816~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=GANkrlJ1esTXayzhKolACW49oL4%3D) ## 系统设置 ![](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/f6756ad8354c407e841ba4aaf206cf1c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5bCP56CB57yW5Yyg:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTMwODg3NjE1NTM5NTczOSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1770610727&x-orig-sign=DDlK50BWyEiuyQiY%2FrJNsmf%2BiBU%3D) ## 总结 项目不只是一个视觉演示程序,更是一个值得借鉴的工业软件工程模板。它展示了如何在 WPF 中构建一个结构清晰、配置统一、易于扩展的桌面应用,尤其适合需要长期维护和团队协作的工业场景。 对于希望入门机器视觉开发的 .NET 工程师,或是正在搭建自有视觉平台的企业团队,该项目提供不错的起点。未来若能进一步完善节点编辑器、增加实时相机支持、优化模型部署流程,其应用价值将更加显著。 ## 关键词 WPF、VisionMaster、.NET 9、OpenCV、ONNX、机器视觉、MVVM、Git子模块、工业软件、桌面应用