C#联合halcon开发框架源码。 拖拽式编程,无halcon基础也能上手,匹配,测量,条码识...
C#联合halcon开发框架源码。 拖拽式编程,无halcon基础也能上手匹配测量条码识别ocr,定位引导对位等支持plc通讯集成主流相机sdk,系统集成.最近在工业视觉项目里折腾Halcon的时候发现很多兄弟都被C劝退其实用C#搭个轮子也能玩得很溜。今天聊的这个框架直接把Halcon封装成拖拉拽的积木块连halcon语法都不用背就能搞定位引导、OCR识别这些硬核功能还能和PLC对线。先看这个可视化编程界面丢个伪代码Canvas VisionBlock x:NameGrabImage TypeCameraAcquire Position100,50/ VisionBlock x:NameFindBarcode TypeBarcodeReader Position100,150 Input{Binding GrabImage.Output}/ Connection FromGrabImage.Output ToFindBarcode.Input/ /Canvas背后的代码生成器直接给你吐C#代码省得手写HDevEngine调脚本。比如条码识别模块框架把Halcon的findbarcodeshapemodel封装得跟嚼口香糖一样简单var result BarcodeEngine.Read(image, new BarcodeConfig { Mode DecodeMode.Aggressive, RetryCount 3 //PLC老哥们最爱的重试机制 }); if(result.Score 0.8) SendToPLC(result.Data);尤其喜欢它的异常处理彩蛋——相机掉线自动重连时会在日志里埋个梗相机可能去拯救世界了5秒后重试召唤...说到PLC通讯框架里集成的西门子S7协议处理得贼骚气。不用管字节序那些破事直接当对象操作PlcClient.Write(DB501.Double[20], 3.14); var stationStatus PlcClient.ReadStationState(M100.Byte);底层其实用了个状态机轮询遇到网络闪断会自动切到缓存模式比甲方爸爸的脾气稳定多了。相机SDK集成这块更离谱某国产相机厂家的API文档写得跟天书似的框架里直接内置了参数自动纠错GigECamera cam CameraFactory.CreateGigECamera(ip); cam.Connect(config { config.PacketSize 9000; //玄学优化项 config.Timeout 500; //防止产线大妈拔线 });实测连某品牌工业相机的时候框架自动嗅探到的合理PacketSize比官方demo还准怀疑作者反向工程了驱动...C#联合halcon开发框架源码。 拖拽式编程,无halcon基础也能上手匹配测量条码识别ocr,定位引导对位等支持plc通讯集成主流相机sdk,系统集成.最实用的还是模板匹配模块新手最容易栽跟头的地方。框架里把形状匹配的参数调教得跟美颜相机似的var matcher new IntelligentMatcher(); matcher.Train(templateImage, opt { opt.AngleTolerance 360; //随便你怎么转 opt.ScaleRange 0.5.To(2.0); //放大缩小都能逮 }); var matches matcher.Search(targetImage);其实背后偷偷做了金字塔分层搜索运行时占用的内存比原生的Halcon算子少了30%毕竟C#的GC不是吃素的。项目里需要做对位补偿时直接搬出框架里的坐标转换链var worldPoint VisionCoord.ConvertToWorld( imagePoint, CalibrationData.Load(camera123.calib), RobotBaseCoord.GetCurrent() );这里埋了个坑——自动处理了手眼标定中的四元数转欧拉角问题避免菜鸟在姿态解算时翻车。整套源码里最惊艳的是异常恢复子系统比如遇到图像传输出错时RetryPolicy.Execute(() { GrabFrame(); }, options { options.MaxAttempts 5; options.OnRetry (ex, attempt) { ReloadCameraDriver(); //重启大法好 Thread.Sleep(attempt * 1000); }; });这波操作让现场调试的兄弟少掉了一半头发毕竟产线设备可不会等你单步调试。搞过Halcon联合开发的应该都懂内存泄漏和线程同步才是真正的Boss战。框架里用了个ObjectPool管理HImage对象配合C#的using语法泄漏不存在的using (var hImage HImagePool.Get(image)) { HOperatorSet.FindShapeModel(hImage, ...); } //自动回收到池里线程调度更是骚用SynchronizationContext把Halcon的算子调用打包成任务派发UI再也不会卡成PPT。说实话这个框架最狠的不是技术实现而是那些藏在工具箱里的实用小工具。比如那个自动生成ROI区域的魔法笔刷画个不规则多边形还能自动吸附特征点比Halcon自带的ROI工具顺手不止一个Level。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2503946.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!