项目用到图像识别,下个VisionPro先熟悉一下。
VisionPro可以快速构建功能强大且可随时部署的视觉应用程序。VisionPro还提供了功能齐全的工具包,可以使用微软的VS进行编程。
VisionPro提供了一个交互式的开发环境,你可以用它来组装工具、配置采集图像和离散的I/O,以及部署带有全功能操作界面的健壮且高性能的应用程序。
开发环境的关键组件如下:
QuickBuild(快速构建工具),它是一个交互式的应用程序构建器,该构建器允许你定义一个job(作业),该作业包含图像源、分析采集图像所需的图像处理和视觉工具,以及决定每个检查结果的结果分析逻辑。
一个QuickBuild应用程序可以由多个生产环境的作业组成,在这些环境中可以多个摄像机同步或异步地拍摄要检查的对象图像。你可以以手动、按条件触发或自动操作的方式运行这些作业。
Communications Explorer(通讯管理器),提供了对康耐视离散I/O硬件的点击式浏览器访问。你可以将作业的特定数据项和结果集与单个输出行连接。你也可以配置系统级输出,例如作业就绪信号和系统心跳。
Application Wizard(应用程序向导),使用该组件,你可以快速生成一个完整的应用程序,包括操作界面,它封装了使用快速构建工具和通讯管理器创建的作业、采集和离散I/O配置。向导生成的应用程序包含一个可执行的Windows程序,完全注释的VB.NET或C#源代码以及作业和离散I/O配置数据。
所以VisionPro开发,先用快速构建工具将组件&图像串联起来,然后用应用程序向导打包。
除了使用应用程序向导来打包VisionPro应用程序进行部署外,还可以围绕配置的作业编写自定义程序,或者你可以使用C#或VB .NET直接使用底层VisionPro组件创建整个应用程序:
VisionPro支持四种独立的开发方式,供你创建部署的VisionPro机器视觉应用程序:
开发可部署VisionPro应用程序的最简单的方法是使用QuickBuild来交互式配置图像采集、图像处理和分析以及I/O,然后使用应用程序向导生成嵌入QuickBuild应用程序并可提供可配置操作接口的可部署VB.NET或C#程序。
优势:
局限性:
因为应用程序向导生成了VB.NET或C#应用程序,且包含源码,所以你可以轻松地使用VS查看和修改生成的应用程序。这使得你可以轻松地定制应用程序外观,并添加其他系统组件的控件和显示值。
优势:
局限性:
VisionPro .NET编程接口包含了一些函数,这些函数可用于加载和操作保存的QuickBuild应用程序(实际上,向导生成的应用程序使用了这些函数)。你可以轻松编写自己的VS应用程序来加载和控制保存的QuickBuild应用程序,来代替使用向导生成的代码。
优势:
局限性:
VisionPro .NET编程接口使你可以直接控制图像采集、处理以及分析。
优势:
局限性:
QuickBuild应用程序是VisionPro软件包的一部分,提供了一个交互式环境,可以快速创建一个视觉应用程序。本节介绍视觉工具的第一步,构建一个可执行的视觉应用程序。
用VisionPro构建一个视觉应用有三步:
VisionPro安装工具会在你Windows桌面上安装一个QuickBuild图标。
双击图标即可启动QuickBuild。QuickBuild的初始窗口如下:
开发视觉应用程序的第一步通常都是建立一个图像源,它可以是连接到康耐视帧捕获器的相机(一般是一些拍照、摄像的设备)。对于许多应用,可以从图像数据库开始(数据库中包含在生产环境中采集到的图像),然后修改应用程序以适应来自连接相机的图像,这非常方便。
前期不必直接连摄像机,可以从一些预先准备好的的图片开始,测试视觉程序。熟悉之后,可以把图片源改为相机。
本例中,你将使用一个默认安装在 \Program Files\Cognex\VisionPro\Images\coins.idb中的硬币图像数据库(正确安装VisionPro后,安装目录下自带的)。
此时,作业仅包含配置图像源,但你可以运行作业以查看图像在QuickBuild作业编辑器中的显示方式。
点击工具栏中的运行按钮。
❗注意
可能会出现下图所示无法运行的情况,这是因为你的VisionPro未激活(这边给个临时激活的教程链接,临时激活教程链接)。
图像数据库文件中获取的图像会显示在显示区中。
当运行工具时,工具旁边的小绿点表示它成功运行。
当所有工具都成功运行时,作业编辑器左下角会出现一个绿点。
一直单击运行按钮,直到图像区域看到一个黑色圆圈。
下一步中,将添加一个PMAlign工具并配置它以查找每个图像中的硬币。
本例使用 CogPMAlign(看起来像是Cognex Pattern Match Align的缩写) 工具在图像中查找圆形(硬币)。PMAlign工具使用康耐视PatMax软件来定位图像中的图案(本文不谈理论细节,只介绍工具使用,详细的理论知识请参阅PatMax软件理论相关资料)。
Pattern Match,[计]模式匹配。
当然Pattern也有图案的意思,所以在下文中理解成图像匹配也没有问题,即在模板图像中寻找匹配的目标物体。
第一步就是添加一个CogPMAlign工具到QuickBuild项目中。
工具箱出现时,选中 CogPMAlignTool 并将其拖入作业编辑器中。
在 图像源 的 OutputImage(输出图像) 上单击,并将其拖入 CogPMAlign 工具的 (InputImage)输入图像,以链接由图像源生成的图像至需要 CogPMAlign 工具分析的输入图像上。
PMAlign工具会在其要分析的每个图像中搜索/寻找经过训练的模式(trained pattern,即目标图案)。在配置PMAlign工具时,必须首先创建训练的模式,然后指定参数,例如要查找的模式数量(图像中存在的目标物体数量),每个潜在模式可能显示的预期维度范围(图像中可能存在的目标物体)以及其他搜索参数。该应用程序会使用一个硬币大小的圆点作为图案。如果你使用一枚硬币的真实图像,该工具也会尝试匹配这些特征。本例使用PatQuick算法,这是一个PMAlign工具选项,它用以提高工具的搜索速度,但会牺牲一定的准确性。在该应用场景中,搜索硬币并不需要很高的精度。
双击CogPMAlignTool1打开工具。
单击 抓取训练图像 ,使得工具以当前输入图像作为训练图像。
单击 训练区域&原点 选项卡来配置训练参数。
选项卡改变后,从显示菜单中选中 Current.TrainImage(当前训练图像) 以显示抓取的训练图像。
点击并拖动小的训练区域矩形以包围大的圆点,告诉工具使用图像的哪一部分作为模式。
点击中心原点按钮,将原点图标移动到矩形的中心。当工具在图像中找到特征时,它使用原点图标的相对位置来报告其位置。大多数情况下,寻找物体的中心就是你想要报道的位置。
勾选 忽略极性 选项。极性 会告诉工具,它应该考虑或忽略图案在亮背景上是暗的还是在暗背景上是亮的。由于该图案在浅色背景下是深色的,根据光线不同,硬币在背景下可能是深色或浅色。该情况下,忽略极性是正确的做法。
你可能注意到了消息 模式包含的信息可能不足以测量 角度 可靠地 。因为你使用的图案是圆形的,因此PatMax软件无法确定它是否旋转。
现在了解该模式工作的方式。
创建和训练模式是告诉PMAlign工具要寻找什么东西。而运行参数是告诉工具如何去发现它。
设置 Approx.number to find(查找概数) 至10。这个数字是工具的向导,而不是阈值。工具可能会找到超过该数量的实例。
查找概数,字面意思也能体会出,就是图像中大概有几个目标模式。
点击 Scale(缩放) 箭头,将下限设为0.7,上限设为1.1。
该设置允许你选择要查找的目标的相对大小。在本例中,使用的是期望的最大硬币来训练出来的模式。这套硬币中最小的是美国的一角硬币;它的直径大约是最大硬币的70%。
比例因子也用于考虑尺寸和距离相机的微小差异。
现在用于找硬币的一切都已设置好:
现在可以运行整个作业了。关闭 CogPMAlign 工具窗口,或者把它拖到一边,这样就可以看到 QuickBuild作业编辑器了。
此时,应用程序已经完成了之前的任务:在图像中找到硬币。
现在,让它变得更有趣一点。
大多数视觉应用程序都需要检查图像,看它是否满足某些标准。在该程序中,你将检查图像中是否包含一定数量的硬币。
每个 VisionPro 工具都有一个结果状态(result status),该状态显示在工具编辑控件的左下角。在 QuickBuild作业编辑器 中,你可以在工具名称右侧的小图标中看到每个工具的状态。整个作业的结果状态取决于它用到的所有工具的结果状态。
理想情况下,PMAlign工具在找到所需的硬币数量时将判断通过,若数量未达标则认为失败。但PMAlign工具的实际用途远不止硬币计数。所以在使用前,最好先确定工具要生成哪些有用的信息。
为此,你需要暴露PMAlign工具生成的一些额外结果,并且使用一个新的工具,即叫作 结果分析器(Results Analysis tool) 工具来计算分析整个作业的检查状态。
这步就像代码中调用函数,取得函数的返回值那样。
判断函数的返回值是否符合要求。若符合要求,则通过;否则,失败。
这边的终端可以理解为新的工具节点,将PMAlign的处理结果连接到新节点上,供它处理分析。
如果将工具看成一个函数,你也可以认为终端就是一个新的函数,将上一个工具的处理结果(函数返回值),当成下一个终端(函数)的输入参数传入。
默认情况下,PMAlign工具会暴露找到的第一个项的分数和姿势信息(pose information,姿势信息指的是找到的图案的大小和位置信息)。本例中你要暴露的数据是期望找到的硬币数量和实际发现的硬币数量。为此,你需要向PMAlign工具添加终端。
右键单击 QuickBuild作业编辑器窗口 中的 CogPMAlign 工具。
此时成员浏览 对话框会被打开。
成员浏览器会暴露该工具的底层结构(类似代码的结构体或者类对象),这可能看起来有点复杂。于是为了降低复杂性,浏览器提供了三个层次结构; 典型(Typical) 、 已展开(Expanded) 和 所有(All) ,你可以从下拉菜单中进行选择。默认情况下, 典型 只显示最常用的元素。 已展开 会显示较长的列表, 所有 显示整个结构。
自动展开 下拉框提供了自动展开常用属性集合的选项。当选择 公共成员 时,默认公共成员在显示时自动展开。若选择 无,则不会自动展开任何属性集合。本例中,使用 无 来尽可能的简洁显示。
下表展示了浏览器显示的最常用的属性集合。这些属性集合在 .NET中作为类实现(就是这些属性分放在几个类中),大多数情况下它们对应于工具编辑控件中的选项卡。
表1. VisionPro工具的部分
属性集合(Class) | 描述 |
---|---|
Results | 该属性集合存储了工具生成的结果 |
RunParams | 此属性集合包含了控制工具如何运行的参数 |
接下来的一组步骤将带你完成暴露两个数据:期望找到的硬币数量和工具实际找到的硬币数。
点击以展开 Results 项。
选择 Count 项。
点击 Add Output(添加输出) 按钮。这会使 Results 属性成为 PMAlign 工具的输出终端。此时对话框不会关闭,所以你可以继续添加更多的终端。
点击 RunParams 项以展开。滚轮滚到下面找到 ApproximateNumberToFind 项并点击。
点击 添加输出 按钮使 ApproximateNumberToFind 属性成为一个输出终端。你会发现此时的 添加输入 按钮是可点击的。这意味着你能使用该终端作为输入终端。
新终端出现在了 QuickBuild作业编辑器 中。
接下来的任务是配置 结果分析工具 ,以接收刚刚添加的两个新输出终端的值。
双击 CogResultsAnalysisTool1 项,以打开 结果分析工具。
工具的编辑控件对话框打开后,点击 添加输入 按钮两次。
两个分别叫做 InputA 和 InputB 的新的项出现在列表中。
点击列表中新项的名称,进行重命名。将它们的名字改的更符合实际的意义:NumberFound 和 Minimum。
现在你需要一个表达式来比较这两个值。
点击 添加表达式 按钮。
一个新的表达式行出现在了列表中。
将要构建的表达式是这样的:“拒绝任何NumberFound小于Minimum的结果”。
要创建该表达式,先选择关系。单击表达式中的运算符单元格并选择 小于。
选好后,参数 列会变红,并且 值 列会显示 ERROR。这是正常的,因为你还没有完善整个表达式。
最后一步是设置拒绝(reject)的条件。当创建的表达式为True时,表示拒绝图像。在 Output(输出) 行中 设 参数1 为 ExprC。
这就是说,当 Expr 为True时, 结果分析工具 会返回一个拒绝状态值;换句话说,此时发现的硬币数量小于最小值。
现在你需要为PMAlign工具创建的终端连接到 结果分析工具的输入。
现在,可以看一下刚刚配置的这一切是如何工作的。将 QuickBuild作业编辑器窗口 和 CogResultsAnalysisTool1 窗口分别拖开来,以便你可以同时看到这两个窗口。工具窗口总是在作业编辑器窗口的前面。
尝试改变PMAlign中的 Approx. no. to find(查找概数) 这项设置,看看它会如何影响作业运行。
下一节将展示如何跟踪应用程序的结果。保留历史结果有助于查看程序的运行情况,并且它还能使你的视觉应用程序更容易变成可部署的软件。
使用视觉软件时,经常会去看之前的运行结果。 QuickBuild 使用 Posted Item(已发送项/已发布项) 列表来保存每个作业已完成运行的结果。另一个列表 Failure Results Queue(失败结果队列) 用来保存失败的请求结果。
迄今为止,你一直在使用 QuickBuild作业编辑器 ,它允许你处理作业相关的事。本节中,你将使用包含整个应用程序的 QuickBuild主窗口(类似程序中的main函数)。本例中,应用程序只有一个作业,但在稍复杂的情况下,同一个程序中可能有多个作业。
默认情况下,QuickBuild被设置为记住最近32次作业执行和最近32作业失败(这个不一定,可能跟版本有关,教程中说是32,我的是8)。对于本程序,要求失败结果队列还包括那些作业正常运行但结果是拒绝的执行(即硬币数量不够)。
点击 QuickBuild 窗口中的 配置已发送项 按钮。
若你的程序有超过一个作业,你将选择作业名称。
确保选中 包括LastRunRecord图像和图形 选项,以将图像和结果图形一起保存在结果中。
点击 Add Item/Add New Link(添加项) 按钮向 已发布列表 中添加项。此时, 配置已发送项 浏览窗口会被打开。
配置已发送项浏览器 会暴露以下复杂结构。为了降低复杂性,和结果分析器中的操作一样,对它进行分级:典型、展开和所有。你可以从下拉框中选择层次结构。
点击 + 图标,展开 Tools(工具) 项。
你将看到作业中列出的三个工具: 图像源工具、 PMAlign工具和结果分析工具。
继续展开下面的项以找到结果分析器中 NumberFound 项的值:
CogResultsAnalysisTool/RunParams/Item[“NumberFound”]/CogResultsAnalysisExpression/Value/Int32
点击 添加到已发送项 以将 NumberFound 值添加到已发送项列表。浏览窗口会保持打开状态,因此你可以添加更多其他项。
展开项以找到结果分析器中 Minimum 项的值:
Item[“Minimum”] / CogResultsAnalysisExpression / Value / Int32
点击 添加至已发送项 来将 Minimum 值添加到已发送项列表。
点击 关闭 关掉配置已发送项浏览器窗口。你可以选中列表中的项并点击它们的名称来对项进行重命名。
现在已经设置好已发送列表和失败结果队列了,你可以查看它们是如何工作的了。
在QuickBuild窗口中,点击 连续运行QuickBuild应用程序 按钮。
这会开始程序运行。你将可以观察到作业名右侧的图标发生变化,会从绿点(成功状态)改变为绿点带红线(拒绝状态)。
几秒以后,点击 显示悬浮结果 按钮。
再次点击 连续运行QuickBuild应用程序 按钮以停止程序。
滚动到数据字段的末尾,查看添加到已发布列表中的结果以及其值。
显示区域会显示图像结果。
然而,通常情况,你只对失败的图像感兴趣。你之前已启用将拒绝级别的结果添加到失败结果队列中的选项。单击失败结果队列,查看被拒绝的图像。
至此,你已具备了使用VisionPro和QuickBuild开发和完善视觉应用程序所需的基本技能。在开发阶段,你可能会测试不同图像集,改进模式,调整结果等等。
当你对QuickBuild程序进行更改时,需要保存它。
QuickBuild将应用程序保存为扩展名为.VPP的QuickBuild项目文件。
一旦准备好部署应用程序,就可以使用保存好的QuickBuild应用程序和 VisionPro应用程序向导 来创建可执行的Windows应用程序。
QuickBuild提供了一个非常灵活的环境来开发视觉应用程序,但是对于该程序的用户来说,它并不是一个方便的环境。VisionPro应用程序向导 会使用你在QuickBuild中创建的视觉程序,并创建带有更容易使用的定制界面的Windows应用程序。
使用 应用程序向导 可以对应用程序进行修改。你可以用它来对程序的底层进行修改,或者你可以暴露视觉工具的一些设置项。
本例中,你将向 结果分析工具 添加一个新的输入终端,以便用户可以在运行程序时设置拒绝条件。
双击QuickBuild窗口中的 CogJob1 作业,以打开 作业编辑器 窗口。
双击 CogResultsAnalysisTool1 项以打开 结果分析工具。
将新输入命名为 InputMinimum。
将 参数1 改成 InputMinimum 。
在 QuickBuild 窗口中保存程序。点击 QuickBuild应用程序另存为 项,将保存的程序命名为 coinsApp.vpp 。
现在可以准备使用 应用程序向导 了。
保存了使用QuickBuild构建的程序后,退出QuickBuild并打开VisionPro应用程序向导。应用程序向导的图标:
VisionPro应用程序向导会指导你完成每一步,通常需要你填写一个字段,然后单击 下一步 按钮。下面是打开后的界面。
接下来,准备设计应用程序的UI了。
应用程序向导使用基于选项卡的界面生成应用程序。你可以根据需要添加任意数量的选项卡,每个选项卡都可以保存你希望用户查看或更改的数据。这是使用 应用程序向导 最困难的部分,但它非常类似于公开工具的终端或向已发布项列表添加项。
首先,你将提供一种方式来显示放置在已发布项列表中的两个项:找到的硬币数量和要从PMAlign工具中找的硬币的大致数量。
应用程序向导为你的作业设置一个选项卡。你也可以为选项卡修改名字。
新项以 已发布项 0 的形式出现在列表中。一会儿将更改它的名称。
点击 添加项 按钮,再次选中 从已发布项添加输出 。
点击 添加项 按钮,这次选中 添加输入字段 。
打开 选择输入属性 浏览窗口。浏览窗口会暴露复杂的底层结构。同样,为了降低复杂性,浏览器提供了三个结构层次:典型、扩展(已展开)和所有。默认情况下,典型只显示最常用的属性;扩展(已展开)显示较长列表;所有显示整个结构。选中下拉菜单中的 已展开 以公开本例所需的属性。打开 InputMinimum 项路径下面的项:
Tools / Item[“CogResultsAnalysisTool1”] / CogResultsAnalysisTool / RunParams / Item[“InputMinimum”] / CogResultsAnalysisInputExpression / Value
点击 确定 。
点击 下一步 ,直到到达 输出目录 界面。
现在,你已经完成了应用程序向导中最困难的部分了。
应用程序向导 的剩余步骤是让你选择生成的应用程序在硬盘上的位置,以及是否希望向导为您生成代码。