ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VisionPro 药物胶囊瑕疵检测试题讲解

VisionPro 药物胶囊瑕疵检测试题讲解 VisionPro 药物胶囊瑕疵检测试题讲解一、任务需求题目描述基于 Cognex VisionPro 平台完成泡罩包装药物胶囊瑕疵检测。使用**双模板匹配PMAlign**识别两类缺陷胶囊外观不合格、胶囊缺失通过 C# 高级脚本在缺陷位置绘制红色文字标注最终输出带有缺陷标记的检测图像。缺陷 1胶囊外观异常 → 标注文字不合格缺陷 2胶囊空位缺料 → 标注文字缺失二、整体检测流程框图三、VisionPro 工具链连接关系输入链路原始图像 →CogImageConvertTool1图像格式转换转换后图像并行送入两个 PMAlign 模板匹配工具不合格CogPMAlignTool匹配外观异常胶囊缺失CogPMAlignTool识别胶囊空位数据读取脚本读取两个工具的匹配结果集合Results提取每个缺陷的中心点坐标TranslationX / TranslationY绘图输出使用CogGraphicCollection图形集合保存所有文字标签在ModifyLastRunRecord中将绘图叠加到图像上显示四、完整脚本代码#region namespace imports using System; using System.Collections; using System.Drawing; using System.IO; using System.Windows.Forms; using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; using Cognex.VisionPro3D; using Cognex.VisionPro.ImageProcessing; using Cognex.VisionPro.PMAlign; //引入集合 第一步 using System.Collections.Generic; #endregion //定义全局图形集合存放所有绘图标签 第二步 CogGraphicCollection gc new CogGraphicCollection(); public override bool GroupRun(ref string message, ref CogToolResultConstants result) { //自动执行ToolBlock内部全部视觉工具 foreach(ICogTool tool in mToolBlock.Tools) mToolBlock.RunTool(tool, ref message, ref result); //获取两个模板匹配工具对象 CogPMAlignTool pma1 mToolBlock.Tools[不合格] as CogPMAlignTool; //外部CogPMAlignTool1 工具名字 “不合格” CogPMAlignTool pma2 mToolBlock.Tools[缺失] as CogPMAlignTool; //外部CogPMAlignTool2 工具名字 “缺失” //清空上一次运行残留的绘图 gc.Clear(); //遍历【不合格】全部匹配结果 if(pma1.Results ! null pma1.Results.Count 0){ foreach(CogPMAlignResult item in pma1.Results) { //每次循环新建独立绘图对象 CogGraphicLabel label new CogGraphicLabel(); label.SetXYText(item.GetPose().TranslationX, item.GetPose().TranslationY, 不合格); label.Color CogColorConstants.Red; gc.Add(label); } } //遍历【缺失】全部匹配结果 if(pma2.Results ! null pma2.Results.Count 0){ foreach(CogPMAlignResult item in pma2.Results) { CogGraphicLabel label new CogGraphicLabel(); label.SetXYText(item.GetPose().TranslationX, item.GetPose().TranslationY, 缺失); gc.Add(label); } } return false; } #region ModifyLastRunRecord绑定绘图到图像 public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord) { //遍历图形集合将每一个文字标签绘制到转换后的图像上 foreach ( CogGraphicLabel label in gc) { mToolBlock.AddGraphicToRunRecord(label, lastRecord, CogImageConvertTool1.OutputImage, ); } } #endregion #region Initialize初始化 public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host) { base.Initialize(host); this.mToolBlock ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host)); } #endregion } //如果两个工具的结果都使用同一个CogPMAlignLabel对象label在添加到图形集合gc之前 //这个对象的属性和文字被重复设置会导致最终显示的是最后一次设置的内容 //解决办法 //在每次循环中创建新的CogPMAlignLabel对象而不是重复使用同一个对象五、核心知识点讲解1.GroupRun方法作用GroupRun是 ToolBlock 高级脚本的运行入口。foreach循环自动批量运行工具块内所有视觉工具返回值return false自定义执行逻辑接管工具运行流程不使用默认自动执行模式。2. 图形对象引用 BUG 分析高频考点错误写法只实例化1 个CogGraphicLabel循环反复修改同一个对象的文字和坐标集合中全部保存同一个引用最终画面仅显示最后一条标注。CogGraphicLabel label new CogGraphicLabel(); foreach(...) { label.SetXYText(x,y,不合格); gc.Add(label); }原理C# 属于引用类型gc.Add()只是保存对象地址不会复制新图形。修改原对象集合内全部元素同步变化。正确方案每一次循环都 new 创建全新独立的CogGraphicLabel绘图对象多个图形互不覆盖全部保存到CogGraphicCollection集合。3. 两个关键回调函数区别表格函数执行时机功能GroupRun视觉算法运行阶段执行工具、读取匹配坐标、生成绘图对象存入集合ModifyLastRunRecord生成运行记录阶段将集合中的图形叠加绘制到图像上界面可视化显示文字4. PMAlign 结果字段含义item.GetPose().TranslationX //缺陷中心X像素坐标 item.GetPose().TranslationY //缺陷中心Y像素坐标 item.GetPose().Rotation //模板匹配旋转角度 item.Score //模板匹配置信分数(0~1)六、运行效果说明程序扫描整张胶囊泡罩图像匹配到外观异常胶囊 → 在胶囊中心绘制红色文字不合格匹配到空位缺失胶囊 → 在空位中心绘制红色文字缺失一张图存在多个缺陷时所有缺陷位置全部独立显示文字标记不会互相覆盖。
返回列表