抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望

前言

工业自动化领域,机器视觉技术在生产制造、质量控制等领域扮演着越来越重要的角色,已成为提升生产效率的关键环节。随着.NET 9的发布和 WPF 技术的成熟,开发具备高度可扩展性的视觉流程控制系统成为可能。
本文将详细介绍一个基于 .NET 9、WPF、CommunityToolkit 以及 Halcon 等技术的视觉流程框架,该框架通过模块化设计实现图像采集、处理、通信及逻辑控制的全流程管理,为工业视觉检测提供了灵活高效的解决方案。

项目介绍

WPF视觉流程框架是一个专注于图像采集、处理及设备通信的系统。它不仅支持从文件夹或直接通过Halcon接口获取图像,还集成了逻辑控制、阈值分割、几何测量、模板匹配等高级功能。
另外,该系统采用模块化设计,使得每个功能模块都可以独立开发、测试和维护,极大地提高系统的可扩展性和灵活性。
项目提供一套灵活、高效且易于扩展的运动视觉流程控制系统。

项目功能

1、图像采集

包括从文件夹读取图像和通过Halcon接口直接获取图像。

2、图像处理

如图像保存、显示等基础操作,以及更复杂的阈值分割、几何测量等功能。

3、设备通信

实现与外部设备的数据交互,确保信息流畅无阻。

4、逻辑控制

提供加法运算、IF判断等基本逻辑处理能力,为复杂业务逻辑打下坚实基础。

5、标定工具

用于校准相机和其他测量仪器,保证数据准确性。

6、变量工具

帮助用户管理过程中的各种变量,提高编程效率。

项目特点

高度模块化:每个组件都独立封装,便于后期维护和升级。
强大的兼容性:支持多种图像来源和处理方式,适应不同的应用场景。
丰富的UI控件:借助于WPF和CommunityToolkit,提供一个美观且易用的界面。
高效的图像处理能力:利用Halcon库的强大算法,能够快速准确地完成复杂的图像分析任务。

项目技术

项目采用一系列先进技术以确保其性能和可靠性:
.NET 9:最新的.NET版本,带来了更好的性能优化和更多的新特性。
WPF:用于创建用户界面的技术栈,支持现代应用所需的各种图形和动画效果。
CommunityToolkit:增强了WPF的功能,提供了更多实用的UI控件。
Halcon:一款专业的机器视觉软件库,内含大量先进的图像处理算法。

项目代码

项目结构

框架定位为运动视觉流程控制系统,采用 .NET 9 框架开发,以 WPF 作为前端界面引擎,结合 CommunityToolkit 实现 MVVM 模式,集成Halcon工业视觉库完成核心算法处理。
具体框架如下图所示:
1.png

MainViewModel部分代码
public  MainViewModel()

{

       #region  组件列表数据初始化

      CatalogList.Add(new  CatalogModel()

      {

            IsSelected =  true,

            Icon =  "\ue9ed",

            Name =  "图像采集",

            Description =  "获取图像方式",

            Components =  new  List<componentmodel>

            {

                   new  ComponentModel{ Icon="\ue604",

                        Name="文件夹",

                        TargetNode="ImageCapture;ImageCapture.FolderImageNode",

                        TargetModel="ImageCapture;ImageCapture.FolderImageNodeModel",

                        W=150,

                        H=34

                        },

                   new  ComponentModel{ Icon="\ue621",Name="Halcon",

                        TargetNode="ImageCapture;ImageCapture.HalconImageNode",

                        TargetModel="ImageCapture;ImageCapture.HalconImageNodeModel",

                        W=150,

                        H=34},

            }

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue9ee",

            Name =  "图像处理",

            Description =  "获取图像方式获取图像方式获取图像方式",

            Components =  new  List<componentmodel>

            {

                   new  ComponentModel{ Name="图像保存"},

                   new  ComponentModel{ Name="图像显示",Icon="\ue9ee",

                  TargetNode="ImageProcess;ImageProcess.ImageShowNode",

                        TargetModel="ImageProcess;ImageProcess.ImageShowNodeModel",

                        W=150,

                        H=34}

            }

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ueb05",

            Name =  "设备通信",

            Description =  "获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue636",

            Name =  "图像坐标变换",

            Description =  "获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue73f",

            Name =  "逻辑控制",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式",

            Components =  new  List<componentmodel>

            {

                   new  ComponentModel{ Name="加法",Icon="\ue74d",

                        TargetNode="LogicControl;LogicControl.AddNode",

                        TargetModel="LogicControl;LogicControl.AddNodeModel",

                        W=150,

                        H=34

                  },

                   new  ComponentModel{ Name="IF判断",Icon="\ue71d",

                        TargetNode="LogicControl;LogicControl.DecisionNode",

                        TargetModel="LogicControl;LogicControl.DecisionNodeModel",

                        W=120,

                        H=45

                  }

            }

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue8a4",

            Name =  "标定工具",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue86e",

            Name =  "逻辑控制",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue644",

            Name =  "阈值分割",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue66d",

            Name =  "几何测量",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue608",

            Name =  "模板匹配",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue712",

            Name =  "图像内容识别",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

      CatalogList.Add(new  CatalogModel()

      {

            Icon =  "\ue73c",

            Name =  "变量工具",

            Description =  "获取图像方式获取图像方式获取图像方式获取图像方式"

      });

       #endregion

      CurrentCatalog = CatalogList[0];

      CatalogItemCommand =

             new  RelayCommand<catalogmodel>(model =&gt; CurrentCatalog = model);

      ComponentItemCommand =  new  RelayCommand&lt;object&gt;(OnComponentItem);

      NewFlowCommand =  new  RelayCommand(DoNewFlow);

      CloseFlowTabCommand =  new  RelayCommand&lt;object&gt;(DoCloseFlowTab);

      SaveFlowCommand =  new  RelayCommand(DoSaveFlow);

      OpenFlowCommand =  new  RelayCommand(DoOpenFlow);

      MaximizeCommand =  new  RelayCommand(() =&gt;

      {

             var  window = Application.Current.MainWindow;

             if  (window.WindowState==WindowState.Normal)

            {

                  window.WindowState = WindowState.Maximized;

            }

             else

            {

                  window.WindowState = WindowState.Normal;

            }

            

      });

      MinimizeCommand =  new  RelayCommand(() =&gt;

      {

             var  window = Application.Current.MainWindow;

            window.WindowState = WindowState.Minimized;

      });

}

项目效果

通过这个框架,我们可以轻松开发出满足特定需求的运动视觉流程控制系统。不管是生产线上的实时监控还是实验室中的精密测量,系统都能提供强有力的支持。
更重要的是,由于其开放式的架构设计,大家可以根据自己的实际需要对系统进行定制化修改。
系统首页
2.png
新建流程
3.png
添加参数
4.png

项目源码

对于想要深入了解该项目细节的朋友来说,可以访问Gitee来查看完整的源代码。

总结

综上所述,WPF视觉流程框架不仅为开发提供一套全面的解决方案,同时也展示了如何有效结合多种技术和工具解决实际问题。不管你是工业自动化的专业大佬,还是对机器视觉感兴趣的开发,都能从中获得宝贵的灵感,并将其应用于自己的工作中。

关键词

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠]  社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群

推荐阅读

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看
</catalogmodel></componentmodel></componentmodel></componentmodel>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码