视觉检测完整项目

📅 2026/7/14 19:09:21
视觉检测完整项目
视觉检测完整项目OK/NG 流程、模板匹配、统计与 MES萨达大 · 06-03 · 从单算法到整站交付前两篇分别解决读码与测圆真实产线却是多工位、多算法、统一判定、可追溯统计。本文给出一套 WinForms 上位机常见的InspectionPipeline结构触发 → 采图 → 并行/串行算法 → 汇总 OK/NG → 写 PLC/数据库/MES 钩子。穿插模板匹配简介、结果统计看板、NG 图存盘以及和 07 工程化章节的衔接。一、业务架构总览典型流程PLC 上升沿触发 → 相机软触发或硬触发采图 → 视觉引擎执行IInspectionStep列表 → 得到InspectionResult总 OK/NG、分项、测量值、NG 码→ 回写寄存器 → UI 刷新 → 日志与统计入库。publicsealedclassInspectionResult{publicboolIsOk{get;init;}publicstringProductSn{get;set;}string.Empty;publicintNgCode{get;init;}publicstringNgMessage{get;init;}string.Empty;publicDictionarystring,doubleMeasures{get;}new();publicDateTimeTime{get;init;}DateTime.Now;}publicinterfaceIInspectionStep{stringName{get;}voidExecute(Matimage,InspectionResultresult);}步骤示例QrReadStep、CircleDiameterStep、TemplateMatchStep。串行简单某步失败可短路不再测后续以省节拍。二、Pipeline 编排publicsealedclassInspectionPipeline{privatereadonlyListIInspectionStep_stepsnew();publicInspectionPipelineAdd(IInspectionStepstep){_steps.Add(step);returnthis;}publicInspectionResultRun(Matimage,stringsn){varresultnewInspectionResult{ProductSnsn,IsOktrue};foreach(varstepin_steps){step.Execute(image,result);if(!result.IsOk)break;}returnresult;}}WinForms 主窗体注入具体 Step配置来自 JSON容差、模板路径、ROI。换型换配置文件而非改代码。三、模板匹配简要定位缺件、错件、标签印刷时MatchTemplate常用。归一化相关系数TemplateMatchModes.CCoeffNormed对光照变化相对稳。publicboolTemplateOk(Matgray,Mattempl,Rectroi,doublethreshold,outPointpeak){usingvarsearchnewMat(gray,roi);usingvarscorenewMat();Cv2.MatchTemplate(search,templ,score,TemplateMatchModes.CCoeffNormed);Cv2.MinMaxLoc(score,out_,outdoublemaxVal,out_,outpeak);peak.Xroi.X;peak.Yroi.Y;returnmaxValthreshold;}多模板循环匹配取最大分数或金字塔粗定位 细匹配。NG 时保存score与peak到日志方便调 threshold。四、OK/NG 判定与 NG 码设计NG 码建议分段10xx 采图失败、20xx 读码、30xx 尺寸、40xx 模板。PLC 与 MES 可据此分流停线策略。NgMessage给人看NgCode给机器看。publicstaticvoidFail(InspectionResultr,intcode,stringmsg){r.GetType().GetProperty(nameof(InspectionResult.IsOk))!.SetValue(r,false);// 实际项目用 init 或 builder 模式此处示意}生产代码用不可变 Result 或result.MarkNg(code, msg)方法更清晰。五、结果统计内存计数 定时落库publicclassYieldCounter{publicintTotal{get;privateset;}publicintOk{get;privateset;}publicintNg{get;privateset;}publicdoubleYieldRateTotal0?0:(double)Ok/Total;publicvoidAdd(boolok){Total;if(ok)Ok;elseNg;}}UILabel显示总数、良率、当班 NG TOP3 原因。对接 05 章 Excel 导出班报一键生成。Shift 切换时归档计数器到 SQLite 或 CSV。六、MES 钩子对接思路不绑死某厂 MES用接口 配置 URLpublicinterfaceIMesBridge{TaskUploadAsync(InspectionResultresult,CancellationTokenct);}publicclassHttpMesBridge:IMesBridge{publicasyncTaskUploadAsync(InspectionResultresult,CancellationTokenct){// POST JSONSN、OK、NgCode、Measures、StationId、SoftwareVersion}}失败重试、本地队列、幂等键SN工位时间窗口见 07 章 7x24。MES 超时不应阻塞视觉判定回 PLC先 OK/NG 出站上传异步补。七、NG 图像存档路径D:\VisionNg\yyyyMMdd\{Sn}_{NgCode}.png。磁盘满策略删最旧或只存 NG 不存 OK。Mat 写入用Cv2.ImWrite注意中文路径在 OpenCV 旧版有问题推荐 ASCII 根目录。八、WinForms 主界面模块实时预览可降帧当前 SN、总 OK/NG、良率分项结果表格步骤名、值、OK按钮手动触发、重测、标定、参数权限参数页需登录九、FAQQ1节拍不够短路 NG、ROI、降分辨率、硬触发单帧、算法放独立进程。Q2换型慢配置文件 per 产品条码选配方。Q3与读码/测圆章节关系封装为 Step 插入 Pipeline。Q4模板匹配位置漂移机械限位 允许小范围搜索窗定期更换模板图。Q5MES 与 PLC 冲突PLC 以视觉 Result 为准MES 仅追溯。十、小结完整视觉站 Pipeline 配置 统计 对外接口 NG 追溯。下一目录07 工程化讲日志、配置热更新、自愈与打包把 demo 变成 7x24 产品。导航上一篇02-OpenCV圆形检测下一篇07-工程化索引