VisionPro二次开发学习笔记10-使用 PMAlign和Fixture固定Blob工具检测孔
使用 PMAlign和Fixture固定Blob工具检测孔
这个示例演示了如何使用 PMAlign 工具和 Fixture 工具来夹持一个 Blob 工具。示例代码将检测支架右上角孔的存在。当点击运行按钮时,将读取新图像。PMAlign 工具运行并生成一个 POSE 作为输出。POSE 是一个六自由度的变换,描述了从运行时坐标空间到训练时坐标空间的转换。一个 POSE 由 TranslationX、TranslationY、旋转、缩放、ScalingX 和 ScalingY 组成。
PMAlign 工具的输出 POSE 随后被传递给 Fixture 工具。Fixture 工具从 PMAlign 工具获取 POSE 信息以及新图像,并创建一个新的输出图像。Fixture 工具的输出图像随后被传递给 Blob 工具。
这三个工具是在此应用程序外部创建的,并在初始化时加载(Form_Load)。PMAlign 工具被训练使用整个支架作为训练图像。在 PMAlign 工具运行后,生成的 POSE 被传递给 Fixture 工具。Fixture 工具从 PMAlign 获取 POSE 信息,并从图像文件工具获取图像,创建一个新图像,然后传递给 Blob 工具。Fixture 工具生成的新图像已经针对支架的新位置进行了校正。Blob 工具的感兴趣区域围绕左侧的孔。当 Blob 工具运行时,结果会被检查以查看是否检测到 blob
1. 创建vpp文件
- 打开VisionPro QuickBuild,新建CogJob1,打开ImageSouce,选择文件C:\Program Files\Cognex\VisionPro\Images\bracket_std.idb作为输入图像源
- 依次添加CogPMAlignTool,CogFixtureTool,CogBlobTool工具,并连线
-
PMAlign 工具被训练使用整个支架作为训练图像
- 抓取训练图像
- 框选整个支架
- 点击训练区域与原点Tab下的中心原点
- 点击运行参数Tab 角度从标称值转为设置上下限45度
- 点击训练参数Tab 训练按钮训练图像
- 运行工具
- 在 PMAlign 工具运行后,生成的 POSE 被传递给 Fixture 工具。Fixture 工具从 PMAlign 获取 POSE 信息,并从图像文件工具获取图像,创建一个新图像,Fixture 工具生成的新图像已经针对支架的新位置进行了校正
- 运行整个工具后,结果会被检查以查看是否检测到 blob
- 确认无误后,分别保存CogPMAlign,CogFixture,CogBlob工具的vpp到本地供后续程序开发使用
2. 添加引用
using Cognex.VisionPro;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.CalibFix;
using Cognex.VisionPro.Exceptions;
using Cognex.VisionPro.ImageFile;
using Cognex.VisionPro.PMAlign;
3. 界面设计
添加CogDisplay控件和Button按钮.
4. 声明变量
private CogImageFileTool imageFileTool;private CogPMAlignTool pMAlignTool;private CogFixtureTool fixtureTool;private CogBlobTool blobTool;
5. 加载工具
private void InitializeCogTool(){string ImageFileName = @"Images\bracket_std.idb";string strBaseDir = Environment.GetEnvironmentVariable("VPRO_ROOT");if (string.IsNullOrEmpty(strBaseDir)){throw new Exception("环境变量VPRO_ROOT未设置.");}imageFileTool = new CogImageFileTool();//调用 CogImageFileTool 的 Operator 属性来打开指定路径的图像文件。CogImageFileModeConstants.Read 参数指定以读取模式打开文件imageFileTool.Operator.Open(Path.Combine(strBaseDir,ImageFileName),CogImageFileModeConstants.Read);string VPPFiles = "G:/VisonProStudy/UsingQB/vpp/";//将文件内容反序列化为相应的工具对象pMAlignTool = (CogPMAlignTool)CogSerializer.LoadObjectFromFile(VPPFiles + "pmalign_tool.vpp");fixtureTool = (CogFixtureTool)CogSerializer.LoadObjectFromFile(VPPFiles+"fixture_tool.vpp");blobTool = (CogBlobTool)CogSerializer.LoadObjectFromFile(VPPFiles+"blob_tool.vpp");}private void DisplayErrorAndExit(string ErrorMsg){MessageBox.Show(ErrorMsg+"\nPress OK to exit.");Application.Exit();}private void Form11_Load(object sender, EventArgs e){try{InitializeCogTool();}catch (CogException ex){DisplayErrorAndExit("Tool Load Error:" + ex.Message);}catch (Exception ex) {DisplayErrorAndExit("Tool Load Error:"+ex.Message);}}
6. 处理按钮点击事件
private void BtnRun_Click(object sender, EventArgs e){try{//清空 cogDisplay1 控件中的静态图形,以便在后续处理中显示新的结果cogDisplay1.StaticGraphics.Clear();imageFileTool.Run();pMAlignTool.InputImage = (CogImage8Grey)imageFileTool.OutputImage;pMAlignTool.Run();if (pMAlignTool.RunStatus.Result != CogToolResultConstants.Accept){throw pMAlignTool.RunStatus.Exception;}if (pMAlignTool.Results.Count == 0){throw new Exception("PMAlgin工具没找到结果.");}fixtureTool.InputImage = imageFileTool.OutputImage;fixtureTool.RunParams.UnfixturedFromFixturedTransform = pMAlignTool.Results[0].GetPose();fixtureTool.Run();if (fixtureTool.RunStatus.Result != CogToolResultConstants.Accept){throw fixtureTool.RunStatus.Exception;}blobTool.InputImage = (CogImage8Grey)fixtureTool.OutputImage;blobTool.Run();if (blobTool.RunStatus.Result != CogToolResultConstants.Accept){throw blobTool.RunStatus.Exception;}if (blobTool.Results.GetBlobs().Count == 0){throw new Exception("Blob工具没找到结果.");}cogDisplay1.Image = imageFileTool.OutputImage;//使用 Blob 工具的第一个结果创建图形(边界和质心)并添加到显示区域。//使用 PMAlign 工具的第一个结果创建坐标轴图形并添加到显示区域。cogDisplay1.StaticGraphics.Add(blobTool.Results.GetBlobs()[0].CreateResultGraphics(CogBlobResultGraphicConstants.Boundary | CogBlobResultGraphicConstants.CenterOfMass), "");cogDisplay1.StaticGraphics.Add(pMAlignTool.Results[0].CreateResultGraphics(CogPMAlignResultGraphicConstants.CoordinateAxes), "");}catch (CogException ex){DisplayErrorAndExit("Tool Load Error:" + ex.Message);}catch (Exception ex) {DisplayErrorAndExit("Tool Load Error:" + ex.Message);}}
7. 界面效果
8. 项目示例
整理了包含本文章的11个使用C#进行Cognex VisionPro二次开发学习笔记的示例源码,涵盖了从创建基于QuickBuild的应用程序到使用PMAlign和Caliper工具进行图像处理的多种实践案例,欢迎学习和指正
视觉领域 + 计算机视觉 + Cognex VisionPro + C#二次开发示例
相关文章:

VisionPro二次开发学习笔记10-使用 PMAlign和Fixture固定Blob工具检测孔
使用 PMAlign和Fixture固定Blob工具检测孔 这个示例演示了如何使用 PMAlign 工具和 Fixture 工具来夹持一个 Blob 工具。示例代码将检测支架右上角孔的存在。当点击运行按钮时,将读取新图像。PMAlign 工具运行并生成一个 POSE 作为输出。POSE 是一个六自由度的变换…...

学单片机怎么在3-5个月内找到工作?
每个初学者,都如履薄冰,10几年前,我自学单片机时,也一样。 想通过学习,找一份体面点的工作,又害怕辛辛苦苦学出来,找不到工作。 好在,当初执行力,还算可以,自…...

探索设计模式:观察者模式
探索设计模式:观察者模式 🧐观察者模式简介:gem:核心概念:rainbow:观察者模式的优点:truck:实现步骤1. 定义主题接口2. 实现观察者接口3. 具体主题实现4. 具体观察者实现5. 调用 :triangular_flag_on_post:总结 在实际开发过程中,设计模式的作…...

gradio之持续输入,持续输出(流式)
流式输出yield,比如一个输出控件,想要实时显示内容,用return for循环一次就返回去了。而用yield会持续更新往下执行 for i in range(length):time.sleep(8)yield 总共str(length)条语料,已运行str(i1)条 在Gradio中,某些组件&am…...

Git 常用命令指南:从入门到精通
文章目录 前言1. 初始化一个Git仓库2. 克隆远程仓库3. 查看仓库状态4. 添加文件到暂存区5. 提交代码6. 推送到远程仓库7. 拉取远程仓库的更改8. 分支管理9. 查看提交历史10. 回退到某个版本结语 前言 如果你是一位开发者或者对代码感兴趣,那么你一定听说过Git。Git…...

Camera驱动 汇总表【小驰行动派】
在做Camera BringUp的时候,如果有已经点亮过的驱动源码,对我们的帮助将会非常的大,可以大大加快我们点亮进度。 所以我决定整理汇总接触过得Camera驱动信息。如果你刚好有需要,可以加我薇咨询(该资料整理比较花时间&a…...

SSRS rdlc报表 九 在.net core中使用RDLC报表
开发环境 vs 2022企业版 SqlServer数据库 Win11 前言 rdlc报表在aspx中集成的很好,很容易实现,并且功能强大,但随着技术的发展,aspx慢慢的被淘汰,现在已经发展到.net8了,aspx基本上很少用,出的新框架基本上也都是前后端分离,没了aspx的控件加持,rdlc这么厉害的报…...

力扣(2024.08.10)
1. 222:完全二叉树的节点个数 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(…...

Django-文件上传
## Django文件上传需要考虑的重要事项 > 文件或图片一般通过表单进行。用户在前端点击文件上传,然后以POST方式将数据和文件提交到服务器。服务器在接收到POST请求后需要将其存储在服务器上的某个地方。Django默认的存储地址是相对于根目录的/media/文件夹&…...

[Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升
信息收集 IP AddressOpening Ports10.10.10.79TCP:22,80,443 $ nmap 10.10.10.79 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 96:4c:51:42:…...

利用单张/多张图内参数标定 OpenCV Python
E:\OpenCV_py_ws\opencv相机标定\图片\calib-JT.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2023/11/21 16:05 # @File : calib.py # @Software: import cv2 import numpy as np import glob from datetime import datetimenp.set_printoptions(supp…...

The Llama 3 Herd of Models 第7部分视觉实验部分全文
第1,2,3部分,介绍、概览和预训练 第4部分,后训练 第5部分,结果 第6部分,推理 7 Vision Experiments 我们进行了一系列的实验,在这些实验中,我们通过一种由两个主要阶段组成的合成方法将视觉识别能力整合到Llama 3中。首先,我们通过在大量图像-文本对上引入和训练两种…...

亚信安慧AntDB-T:使用Brin索引提升OLAP查询性能以及节省磁盘空间
前 言 在这个信息量爆炸的时代,数据库面临着海量数据的挑战,如何提升OLAP业务的查询性能、如何节省磁盘空间等问题已经成为了数据库的痛点之所在。本篇着重介绍亚信安慧AntDB-T中Brin索引的实现过程以及应用在OLAP业务中带来的性能提升和存储降低。 亚…...

web渗透测试常用命令
Web Application TTPs HPING3 DoS hping3 targetiP --flood --frag --spoof ip --destport # --synHydra Online Brute Force hydra -1 ftp -P words -v targetiP ftpDownload HTTP File and Execute...

Kylin系列(二)使用
接上一章《Kylin系列(一)入门》 1. Kylin使用 1.1. 数据准备 1.1.1. 数据导入 在使用Apache Kylin时,数据导入是一个非常重要的环节,因为它直接影响到Kylin的性能、稳定性和易用性。以下是关于Apache Kylin数据导入的一些详细介绍: 导入数据的准备 在开始导入数据之前…...

CI/CD——CI持续集成实验
目录 一. 安装Docker 二. 部署Jenkins 三. 配置邮箱 四. Harbor部署 五. Nexus Repository部署 五. sonarqube安装 六. 配置Docker 七. jenkins系统配置sonarqube 八. 配置pipeline 九. 构建并集成 一. 安装Docker docker-ce镜像_docker-ce下载地址_docker-ce安装教程…...

2.4 大模型数据基础:预训练阶段数据详解 ——《带你自学大语言模型》系列
本系列目录 《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型 1.1 从图灵机到GPT,人工智能经历了什么…...

Kali Linux——网络安全的瑞士军刀
一、引言 在网络安全的领域中,Kali Linux 宛如一把强大而全能的瑞士军刀,为安全研究人员和专业人士提供了丰富的工具和资源。本文将深入探讨 Kali Linux 的特点、优势、常用工具以及实际应用场景,带您领略这一强大操作系统的魅力。 二、Kal…...

UML建模-测试用例
用例可用于测试系统的正确性和有效性。 正确性表明系统的实现符合规格说明。有效性保证开发的系统是用户真正需要的系统。有效性检查一般在 系统开发之前进行。当用例模型构造完成后,开发者将模型交给用户讨论,由用户检查模型能否满足他们对系统的需求。…...

Python知识点:如何使用Socket模块进行网络编程
Python 的 socket 模块提供了一个底层网络接口,允许你通过编程进行网络通信。使用 socket 模块可以编写客户端和服务器端程序,从而实现数据在网络上的传输。以下是如何使用 socket 模块进行网络编程的详细说明。 1. 创建一个 Socket 首先,你…...

培训第二十一天(mysql用户创建与授权、角色创建)
上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…...

makefile基本语法
在编写复杂的程序项目时,Makefile 是一个非常有用的工具,它能自动化构建过程。以下是一些基本的 Makefile 语法介绍: 基本结构: target: dependenciescommandtarget:构建目标,通常是一个文件,如…...

白骑士的PyCharm教学实战项目篇 4.4 大数据处理与分析
系列目录 上一篇:白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成 随着数据量的爆炸性增长,大数据处理与分析成为现代数据科学的重要课题。PyCharm提供了强大的功能,可以帮助开发者高效地进行大数据环境的配置与连接…...

无人机之民用无人机用途分类篇
一、航拍无人机 用于航拍摄影和电影制作,提供空中视角的拍摄服务。可用于电影制作、广告拍摄、房地产销售等。 二、物流无人机 用于快递和货物运输,提高物流效率,可以到达传统配送方式难以覆盖的地区,在突发事件如自然灾害、疫…...

Android10 修改设备名称
A10和A12的设备名称修改是不同的,A10设备名称修改分好几个位置 修改wifi默认名称 在framework/base模块下 diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 9041a7c3a14..7a1e63688c4 100644 --- a/core/res/res/values/…...

go testing 包
Go语言的testing包提供了一套丰富的测试工具,用于编写和运行测试用例。以下是testing包中一些常用的函数和类型: func TestMain(m *testing.M): 这是一个特殊的函数,用于执行测试的主函数。如果定义了TestMain,那么在运行go test时…...

基于phpstudy的靶场搭建和github加速
微软商店下载 watt toolkit,然后在侧边栏选择网络加速,勾选 github,就可以快速访问 github 1、下载搭建 sqlilabs github 找到 sqlilabs 靶场,点击 code,下载 zip解压之后,整体移动到 phpstudy_pro 文件夹…...

【数据结构】Map与Set
前言 前两篇文章我们研究了二叉搜索树与哈希表的结构与特点,他们二者是Map与Set这两个接口实现的底层结构,他们利用了搜索树与哈希表查找效率高这一特点,是一种专门用来进行搜索操作的容器或数据结构。本篇文章就让我们一起来梳理这两个接口的…...

Flamingo: a Visual Language Model for Few-Shot Learning
发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…...

flume性能调优
作者:南墨 1.Source性能调优 1.1 Spooldir Source 使用Spooldir Source采集日志数据时,若每行日志数据<100bp,可以通过将多行合并传输来提升传输性能 建议合并时根据数据长度来确定多少行合并为一个单位进行传输,合并后的长…...