全网许多参赛作品往往只是在开发平台上搭建了几个简单的检测流程,或者做了一个干瘪的算法外壳。但我们“幸运字节”团队在立项之初就达成了一个共识:既然要做,就要做一套拥有“全生命周期完整性”的独立软件产品(Standalone Application)。
我们拒绝拼凑,而是从零构建了一个端到端的业务闭环:
功能完整性: 软件不仅具备高精度的缺陷检测能力,还独立完整地实现了从前端友好交互的基准图建模、多锚点动态对齐,到运行阶段的柔性化多类别 ROI 动态分配、高并发比对,再到最终的缺陷双图精细裁切与可视化落地。它不需要依赖任何第三方调试环境,自身就是一个真正能投入工业现场、自给自足的独立系统。
无感交互与非托管释放: 针对几十 MB 的工业高清原图,我们底层采用 FileStream 配合高质量双三次插值算法,在图像加载瞬间将其压缩为 50KB 以下的微缩略图缓存并立即释放原图内存,从根本上杜绝了工业现场海量图片导致的 OOM(内存溢出)。当清空或删除时,显式调用 Dispose() 强行释放 C++ 底层非托管图像句柄,保障系统 7×24 小时连续运行零泄漏。
在实际工业流水线上,工件在相机视野中发生平移或旋转是不可避免的。为了让检测区域绝不错位,我们没有采用常规的单一对齐,而是设计了蓝框裁剪与黄框定位的双层体系:
状态机拦截机制: 引入自定义状态机枚举 DrawMode(涵盖无、裁剪区、定位区、检测区等模式),接管底层视觉控件的图形绘制事件(MVD_ShapeChangeEvent),确保用户在同屏进行复杂交互时逻辑绝对独立、互不干扰。
单一裁剪区(蓝框): 拦截矩形绘制,在内存中动态裁切出真实的有效工作区,瞬间屏蔽背景杂讯干扰。
多特征点定位(黄框): 支持在工作区内绘制多个特征基准框并压入缓存队列,调用视觉定位算子(CContourPattern.Train())提取边缘特征进行预训练,确立标准样张的空间基准姿态。无论线上物料怎么倾斜,后续的检测 ROI 都能“死死咬住”目标物体。
传统的视觉软件多采用静态硬编码,无法应对柔性生产线。我们将架构完全解耦,引入了算法对象池预分配机制:
系统底层预先构建了多组独立运行的缺陷检测算子(CDefectInspectTool)及配套的数据模型。当用户在画面中动态新建一维码、二维码或字符等不同的检测类别时,系统自动寻址空闲槽位并赋予专属高亮标识色。同时,利用动态流式布局(AddPanelToFlow),在前端自动实例化生成该类别专属的参数调节面板(如容差阈值、连通域大小等)。所有控件直接与底层实例进行内存绑定,调参即刻生效,实现了彻底的视觉隔离与解耦。
这是我们作品最引以为傲的底层算法优化,我们彻底解决了工业传统减法极易产生的边缘伪影误报痛点:
在主控程序调用 RunAll() 将图像分发给内部的“各个检测集装箱”后,我们首创了分支预判拦截逻辑:
分支 A(重大缺陷拦截): 执行深度学习扫码算子时,如果扫码失败或码数为 0,系统会立即触发拦截机制。判定该区域存在重大缺陷,直接返回整体大红框,并瞬间跳过该区域后续的所有底层运算! 这一策略在实际产线上极大地节省了 CPU 算力,避免了在坏件上浪费计算资源。
分支 B(正常流转): 扫码成功,精准输出解码文本数据,并流畅流转到下一步。
一维码检测: 通过形态学“闭”运算过滤缺陷提取增强图;接着执行图像“减”运算(原图 - 增强图),让污点、划痕、噪点瞬间显现;随后通过形态学膨胀凸显并连接断裂缺陷。最精妙的是,我们对当前 ROI 进行“内缩水计算”,完美切除由图像差分带来的相框效应(边缘白边)。最后进行 Blob 连通域分析,精准抓取独立缺陷框。
二维码检测: 自研自适应阈值逻辑。若二维码上存在缺陷并连接了黑色区域,其产生的 Blob 面积会瞬间超过预设阈值,从而精准触发缺陷框抓取。
字符缺陷检测: 载入专用的字符特征模型,比对印刷残缺、断划或多墨现象,实时输出缺陷列表。
获取对比图像后,算法直接抓取底层图像内存指针 arrDataBytes,在 -4 至 +4 的微小像素滑动窗口内寻找 SSD(误差平方和)最小的最佳对齐点,并引入 5×5 邻域边缘漂移判断,智能消化印刷公差。
所有 Task 运行结束后,系统启动数据打包机制,将解码字符串、OK绿框、NG红框、以及各种微小的脏污红框全量打包。
在前端,UI 渲染引擎将这些打包数据实时渲染在界面上。同时,系统采用纯粹的文件流追加模式(File.AppendAllText),将剔除 UI 渲染耗时后的纯算法检出时间及判定结果实时写入 CSV 报表。既保证了前端界面交互的绝对流畅,又实现了工业级的数据全量可追溯性。
我们团队带来的这套方案,核心价值在于将高内聚的视觉算法完美融入了一套高健壮性的独立 App 软件工程中。我们用技术细节死磕误报,用架构优化压榨算力。欢迎各位视觉开发者在评论区交流碰撞!