示例11:学习使用字符识别工具,进行字符训练与识别

示例11中,我们将演示使用“字符识别”工具,通过字符训练的方式,识别标签上的一行SN字符信息。

 运行效果 

编辑工程文件 

11.1:采集图像 | 添加“U3相机1”工具

点击工具箱“获取图像”,选择“U3相机”工具,双击并设置参数值,调整参数使图像上要检测的字符与背景黑白分明,命名为“U3相机1”,如图所示:

11.2:创建一个ROI检测区域 | 添加“创建ROI1”工具

点击工具栏“图像处理”,选择“创建ROI”工具,双击并设置参数值,“ROI类型”选择矩形,同时在“图像信息显示窗口”上,可以用鼠标拖拽检测矩形区域的边框调整位置或形状,以使需要检测的字符在矩形区域内部,命名为:创建ROI1,如图所示:

>>提示:

*我们一般要识别一行文本之前,需要创建一个ROI区域,这个ROI作为后面“字符识别”工具的检测区域;

*区域的设置可以在添加“创建ROI1”工具时进行调整,也可以后期双击“创建ROI1”工具进入参数设置窗口进行调整。

11.3:字符识别 | 添加“字符识别1”工具

点击工具箱“识别工具”,选择“字符识别”工具,双击并设置参数值,ROI勾选后选择“创建ROI1”工具的区域,语言默认为“eng”,字符排版选择“一行文本”,命名为“字符识别1”如图所示:

>>提示:

*由于采集图像有可能和本示例中的图像不同,您识别的结果并不一定与本示例的结果完全一致;

*在“字符识别”工具的参数设置界面,我们可以通过“运行”按钮进行读取测试,读取的字符结果会出现在“结果”文本框内,同时可以在“图像信息显示窗口”看到用紫色方框标识的每个字符的位置;

*如果我们发现,当“语言”参数选择“eng”默认字体库,识别结果不准确,这时就需要进行字符训练,生成一个针对我们所要识别字体的字体库,这里我们将这个字体库命名为“KSJ”。字符的训练需要训练您所有可能出现的字符,在这个示例中,我们需要训练S,N,:,0~9这13个字符即可。

11.4:训练字符 | 创建一个“KSJ”字体库

对“字符识别”工具参数进行调整,点击“训练”标签,单击“添加”按钮,这时会把当前检测区域的图片添加进进来,作为字符训练的样本图片,再点击“开始训练”按钮,对样本图片进行字符训练,创建“KSJ”字体库,创建成功后,“KSJ”会出现在“主要设置”页面下的“语言”列表里,我们选择并使用它,如图所示:

>>提示:

*在训练窗口,当填写训练字符时,相应字符的外框会变成红色,外框也可以通过左、上、右、下进行编辑。另外对于相同的字符,您可以只训练一次,比如上图示例中有两个3和两个0,您可以只填写其中一个,另一个可以不填写,也可以都填写;

*如果之前有训练过的同名字体,在“警告”界面点击“确定”按钮后,之前训练的字体会被本次训练的字体覆盖。

11.5:显示识别字符 | 添加“显示字符1”和“立即显示1”工具

这个过程我们在前面示例中已经多次操作过,这里只给出简单的操作图示。

>>提示:

*由于编辑工程文件过程中,如果不添加立即显示工具,检测结果的查看会不方便,所以即使检测工具的参数没有完全设置好之前,也可以先添加显示相关的工具,方便查看结果并随时对检测工具的参数进行修改。

11.6:运行工程文件

点击“运行”,然后把其他标签放置在识别区域,这时我们会发现对于我们已经训练过的字符S,N,:,0,1,2,3,6,7是可以正常识别的,但是对于我们没有训练过的其他字符识别不正确,如4,5,8,9,这是由于“KSJ”字体库没有对这些字符进行过训练。如下图所示,字符9识别为0:

>>提示:

*通过11.4的训练,我们已经训练了一个“KSJ”字体库,其中只训练了S,N,:,0,1,2,3,6,7这9个字符,还有4,5,8,9可能出现的字符没有进行训练,这时如果语言选择“KSJ”字体库,“字符识别1”工具的识别结果只会出现已经训练的字符,对没有训练的字符会识别错误。所以我们要对其他字符再进行训练,我们也可以采集一张字符完整的图像,进行一次性训练,也可以在原有已经训练的字体上进行追加字符训练。另外,即使是已经训练过的字符,我们也可以进行多次训练,一旦发现有识别不出来的已经训练过的字符,我们就可以再次训练这个字符,追加到字体库里。

11.7:追加训练字符 | 为“KSJ”字体库追加训练字符

首先双击“U3相机1”,这时“图像信息显示窗口”会显示实时图像,把带有追加字符的标签放置在采集识别区域内,然后退出“U3相机1”的参数设置界面。双击“字符识别1”工具,进入参数设置窗口,对“KSJ”字体库追加训练字符,方法与11.4步骤类似,如图所示:

>>提示:

*在追加训练字符时,对于不需要再次训练的字符可以不用填写字符。您可以重复执行11.7这个步骤完成所有字符的训练,直到可以准确可靠的识别;

*训练过的“KSJ”字体库只能在创建它的“字符识别”工具中进行追加训练,在创建“KSJ”字体库之外的“字符识别”工具中可以使用“KSJ”字体库,但不能追加字符训练。如果在创建“KSJ”字体库之外的“字符识别”工具中训练同名的“KSJ”字体库,将不会进行追加训练,而会覆盖原来的“KSJ”字体库,这点需要大家注意一下。

拓展学习 

1、可以尝试添加一个“创建ROI2”和“字符识别2”工具,使用“KSJ”字体库或新建字体库,训练并识别其他行的字符。

2、可以尝试使用“串口”或“网口”工具,将识别到的字符信息发送给上位机。

-------------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例10:学习使用高级读码工具,以读取不同类型的码

读码的应用是相对容易且独立的应用,示例10将讲解如何使用读码工具读取不同类型、不同数目的码。

运行效果 

 编辑工程文件 

10.1:采集图像 | 添加“U3相机1”工具

点击工具栏“获取图像”,选择“U3相机”,双击并设置参数值,调整工具参数以采集图像信息,命名为:U3相机1,如图所示:

10.2:读码 | 添加“高级读码1”工具

点击工具栏“识别工具”,选择“高级读码”,双击并设置参数值,调整工具参数以获取读码信息,命名为:高级读码1,如图所示:

>>提示:

一般只需要设置“码类型”和“数量”即可;

“高级读码”工具的详情设置请参看《KSJVBAI视觉检测软件使用说明书》。

10.3:显示高级读码结果 | 添加“立即显示1”工具

点击工具箱“其它工具”,选择“立即显示”,双击并设置参数值,调整工具参数以显示读码结果,命名为:立即显示1,如图所示:

10.4:运行工程文件

点击“运行”,查看读码显示结果。

 拓展学习

  1. 添加“显示字符”工具,将“高级读码1”工具输出的某些结果数据显示在图像信息窗口或通过串口将Barcode字符串输出。
  2. 添加一个“图像处理”工具箱中的“创建ROI”工具并设置“高级读码”工具的ROI参数,使“高级读码”工具在一个局部区域进行检测读取。
-----------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q 
提取码:yhqm

示例9:学习网口通讯工具与机器人进行通讯

示例9我们将接着示例8进行,讲解如何将视觉定位得到的实际坐标(x’,y’)通过网口发送给机器人。示例8中,我们已经得到了相对于机器人坐标系XY平面的实际坐标值(x’,y’),只要我们将x’、y’按照一定的格式发送给机器人,机器人通过解析后就可以移动到x’、y’位置进行抓取了。但是要实现一个完整的抓取流程,只发送实际坐标值是不够的,还需要约定工作流程和通讯协议。

 工作流程及通讯协议 

通常机器人都支持与外部的通讯,并可以在机器人控制器系统上编写脚本来实现约定的通讯协议。为了讲解清晰,我们约定一个简单的流程和协议,用户可以在此基础上完善。流程图如下:

在视觉检测软件进行定位检测之前,必须知道机器人末端已经带动相机到达既定的拍照位置,所以需要机器人发送一个到位信息给视觉检测软件,通知开始检测。这个协议格式定义如下:

Start

即机器人发送“Start”字符串,通知视觉检测软件开始定位检测。

视觉检测软件定位检测完成后,需要把实际抓取的位置信息发送给机器人,这个协议格式定义如下:

Move_x’,y’

即视觉检测软件发送的信息中第一个字符串为“Move”,然后用一个“_”来分隔,后面跟着的是实际的坐标值x’,y’,并用“,”分隔,注意这个是英文的“,”不是中文的“,”,分隔符的目的主要是方便机器人脚本进行解析。

另外我们要与机器人工程师约定使用TCP还是UDP协议以及谁来做服务器端和客户端,并约定好IP地址和通讯端口号。在本示例中,我们约定使用TCP协议,视觉检测软件所运行的主机作为服务器端,机器人的IP地址定为:192.168.1.2,视觉系统主机IP地址定为:192.168.1.3,端口号定为:9999。

 网络调试助手 

在学习本示例的时候,如果没有机器人环境,我们也可以通过“网络调试助手”NetAssist.exe进行调试和验证,它也可以作为在现场排查问题的工具。这个工具在“调试工具”文件夹下可以找到。

上图中,我们已经在视觉系统中建立了一个TCP网络服务器,绑定到本地的网卡(IP地址为192.168.1.3,端口号为9999),我们用网络调试助手模拟机器人作为客户端,远程主机地址填写192.168.1.3:9999并连接,这样可以实现在同一台主机上使用同一块网卡与视觉检测软件的网络服务器端进行发送和接收数据的测试。

 运行效果 

准备工作 

1、设置网卡

PC版本Windows系统

在编写工程文件之前,我们还需要做一些准备工作,那就是先设置视觉系统主机及机器人控制器的网卡IP地址、子网掩码和默认网关。对于Windows系统视觉主机,我们需要打开“控制面板/网络和共享中心/更改适配器设置”页面。如图所示:

嵌入式版本智能视觉传感器平台

对于智能视觉传感器嵌入式系统,我们可以通过菜单“设置/系统设置”直接进行网卡的设置,如图所示:

2、验证网络

PC版本Windows系统

当机器人和视觉系统主机的网络配置完成后,连接好网线,我们通过相互ping一下对方的IP地址,以验证网络是否联通。我们在运行视觉检测软件的主机上打开控制台程序,输入:ping 192.168.1.2,如图所示:

>>提示:

*注意防火墙的设置,将KSJVBAI视觉检测软件添加进允许应用软件通过防火墙。

嵌入式版本智能视觉传感器平台

对于智能视觉传感器,当设置好网卡后,可以让对方ping一下192.168.1.3来验证是否联通。

编辑工程文件 

9.1建立TCP服务器 | 添加“网口”工具

在“流程0”的工具列表中添加“网口”工具,并且作为第一个运行的工具。在其参数设置界面,我们选择“TCP服务器”类型,并在网卡列表中选择与机器人通讯的网卡,服务器端口设为:9999,工具名称:网口1,如图所示:

>>提示:

*如果要将一个工具添加到已经有工具列表的流程时,需要先把这个工具加到第一个工具后面,然后剪切第一个工具,将剪切的工具再粘贴到新添加的工具后面,这样就可以实现新添加的工具作为流程列表中第一个工具;

*“网口”工具参数设置界面的“网卡”列表里只会列出已经连接的网卡供用户选择;

*作为服务器的网口,其状态只有当有客户端与其建立连接后才会PASS,本示例新添加的网口状态是FAIL这是正常的。如果不确定的话,可以使用网口调试助手连接此服务器以验证;

*“网口”工具也可以加入到全局区,共享给其他流程使用,由于我们这个工程示例只有一个主流程“流程0”,所以我们可以将网口加入到这个流程中。

9.2 读取“网口1”的数据 | 添加“接收数据”工具

这一步我们主要是通过“接收数据”工具,读取“网口1”工具的数据,为下一步判断数据是否为“Start”启动命令做准备。在对其“通讯工具”参数进行设置时,我们需要选择上一步添加的“网口1”作为通讯工具,这样只要客户端发送给“网口1”的数据,视觉检测软件就可以通过“接收数据”工具接收到。超时的含义是最大等待多长时间来接收数据,如果在指定时间内没有接收到数据,此工具回自动返回,并把状态设置为NG,如图所示:

>>提示:

“超时”参数的设置需要根据实际情况来设置。

9.3 判断是否接收到“Start”字符指令

判断两个字符串是否相同需要通过“字符串对比”工具来完成,“字符串对比”工具需要输入两个字符串来进行比较,这个示例中,其中一个字符串就是“接收数据1”工具所读取的字符串,另一个字符串是常量“Start”,由于“字符串对比”工具的输入不允许是直接的字符串,必须是一个工具所输出的字符串,所以我们第一步添加一个“定义字符串”工具定义一个常量为“Start”的字符串,工具名称:字符串1,第二步添加一个“字符串对比”工具,用于比较“接收数据1”和“字符串1”的字符串是否相等,工具名称:字符串比较1,第三步,添加一个“条件跳转”工具,设定“条件”为“字符串比较1”,工具名称:条件跳转1,这样就实现了字符串比较的条件跳转,如图所示:

>>提示:

如果对“条件跳转”工具的使用还不熟悉,请参考示例7。

9.4 接收到“Start”字符串后的定位检测 

这一步我们只需要将示例8中的流程工具剪切进IF块,ELSE块不做任何处理即可。这样,在收到“Start”字符串后,视觉检测软件会进入IF分支进行定位检测,如图所示:

>>提示:

多个工具需要一同选择时,可以先按住Shift键,然后鼠标点选相应的工具即可。

9.5 将“坐标转换1”的结果发送给机器人 | 添加“发送数据”工具

在“立即显示1”工具后面,我们添加一个“发送数据1”工具,“通讯工具”参数同样选择“网口1”,数据格式为:Move_{坐标转换1.Point.X[0]},{坐标转换1.Point.Y[0]},这样我们就把“坐标转换1”输出的实际坐标值按照之前约定的协议格式通过网卡发送给了机器人,如图所示:

9.6 通过网络调试助手进行验证

第一步,不需要工程文件运行,打开网络调试助手,“协议类型”选择TCP Client,“远程主机地址”填写当前与机器人连接的网卡IP及端口号9999,本示例为:192.168.1.3.9999,“本地主机地址”选择相同网卡IP地址,点击“连接”按钮,如果连接成功,按钮标题会变成“断开”,这时表示网络调试助手已经与视觉检测软件的“网口1”服务器连接成功,然后,我们在网络调试助手的发送编辑框手动输入“Start”字符串,点击“发送”按钮。如图所示:

第二步,我们回到视觉检测软件,点击“运行一次”按钮,您也可以点击“单步运行”按钮,一步一步执行每一个工具,查看运行过程及运行状态,如图所示:

第三步,回到网络调试助手界面,我们会看到在网络数据接收区收到视觉软件发送过来的数据,这样就表示流程走通了,我们就可以关闭网络调试助手,和机器人联机运行了,如图所示:

9.7 联机运行工程文件

点击窗口主菜单的“循环运行”按钮,开始运行工程文件。

 拓展学习 

  1. 对网络通讯中发送数据异常情况,做特殊的处理。
  2. 可以在实际坐标中增加定位的角度信息发送给机器人。
  3. 可以增加通讯协议,对多种不同形状的目标做有选择的抓取。
-------------------------------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例8:学习平面标定工具进行图像坐标到空间平面坐标转换

示例8中,我们将讲解如何通过“平面标定”工具,建立图像平面坐标系到机器人平面坐标系的映射关系,然后通过“坐标转换”工具,利用“平面标定”工具的标定数据,获取图像上任意一个点的像素坐标(x,y)所对应的机器人平面坐标系的物理坐标(x’,y’),这是在机器人定位抓取应用中比较关键的一步。我们这里给定的应用场景是相机安装在机器人末端,每次在定位抓取前相机在固定的位置进行拍照,通过定位工具找到物体在图像上的像素位置,再通过转换关系得到机器人抓取空间XY平面上的实际坐标。

 运行效果 

 编辑工程文件 

8.1:平面标定

8.1.1:准备一个棋盘格标定板

实际项目中,如果精度有很高要求,我们需要购买高精度的标定板。本示例为了学习方便,我们提供了一个棋盘格标定板的图像文件,您可以根据采集视场的实际大小打印一张棋盘格标定板,将打印的标定板放置在视场内,为图像的采集做准备,如图所示是一张11×7的棋盘格标定板:

>>提示:

*棋盘格的行列数我们一般按照黑白格交界的点数来确定,如上图为11×7,而不是12×8;

*确认相机的拍摄高度和采集的视场大小,选择合适的镜头及光源,保证采集视场照明均匀;

*棋盘格标定板需要根据视场的实际大小进行打印,打印的棋盘格标定板四周留白要大于半个棋盘格的大小。

8.1.2:采集棋盘格标定板图像 | 添加“U3相机1”工具

需在“全局区”添加“U3相机1”工具。

点击工具箱“获取图像”,选择“U3相机”工具,双击并设置参数,调整参数以至白色棋盘格图像的RGB值为255即可,命名为:U3相机1,如图所示:

>>提示:

*放置在视场内的棋盘格标定板,要保证黑色01方格置于图像左上角,棋盘格尽量充满相机视场,这样标定的结果精度会更高;

*由于“平面标定”工具只是平面的标定,不考虑Z轴的位置,所以标定板的放置平面与机器人XY平面必须平行,并且标定板的放置平面与被检测物体的特征平面的高度必须一致。例如:定位一个水杯,以水杯口作为定位的特征平面,标定板要放置在与杯口高度一致的平面上,而不是放置于水杯的底部平面;

*相机安装在机器人的末端,务必要记住机器人拍摄标定板图像时的位姿,当标定完成后需要保证每次定位检测前的拍照位姿不发生变化,即每次拍照时机器人的坐标和角度不变;

*“全局区”添加的工具在工程文件运行时,该区域工具不参与运行,但我们可以在编辑“全局区”的工具列表时运行。我们将“U3相机1”添加到全局区的目的是前期在“全局区”产生一个不变的“平面标定”工具输出结果,它是一个3×3的矩阵,这个结果可以共享给其他流程中需要“平面标定”结果数据的工具使用,其他工具可以通过这个矩阵将图像上的一个坐标点(x,y)转换为空间平面上的实际坐标(x’,y’);

*鼠标放置在“图像信息显示窗口”上任意一点,可以通过左下角的状态栏,查看该点图像的RGB值信息;

*直到8.1标定完成之前,标定板的位置不可以移动。

8.1.3:自动提取图像标定点 | 添加“平面标定1”工具

需要在“全局区”添加“平面标定”工具。

点击工具箱“定位工具”,选择“平面标定”工具,双击并设置参数值,调整参数提取坐标点,命名为:“平面标定1”,如图所示:

>>提示:

*“平面标定”工具的参数设置界面棋盘格“尺寸”,必须根据棋盘格的实际行、列数进行手动输入,否则会提取失败;

*点击“自动提取”按钮后,工具会自动检测出棋盘格标定板上黑白格交界的坐标点信息,即本示例中显示77个点在图像上以像素为单位的x,y位置信息,这些点在下一步将作为标定点使用。我们可以在坐标点列表中点击相应的坐标点,在“图像信息窗口”上可以实时查看其在图像上的实际位置。

8.1.4:对图像标定点进行标定 | 输入对应的实际x’、y’信息

在“图像信息显示窗口”上选取5个以上的坐标点作为标定点进行标定,我们选取第1、11、39、67、77共5个点作为标定点,将机器人的抓取末端依次移动到每个标定点,读取并记录机器人在每个点的实际x’、y’坐标值,这个x’、y’就是机器人坐标系下XY平面上的实际坐标,然后将每个实际x’、y’手动输入到每个对应的标定点,如图所示:

以第1这个坐标点为例,我们先将机器人末端移动到棋盘格标定板第一个黑白交界点的位置,(注意移动时尽可能准确,保证末端垂直向下对准标定点,否则会影响精度,并且棋盘格标定板不能有任何移动,一旦移动,就需要重新采集图像和提取坐标点),然后读取机器人当前位置,当前位置x’、y’信息就是图像上1这个点所对应的机器人坐标系下的实际坐标。

>>提示:

*在图像上至少选取4个以上的点进行标定,且选取的所有点不能在同一条直线上,尽量分散开;

*实际x’、y’的单位和机器人运动控制的单位一致即可。

8.2: 坐标转换

我们在8.1过程中完成了平面标定,现在我们可以开始对流程0进行编辑,流程0是我们工作运行的流程,它将实现对一个检测目标进行定位,然后将定位工具输出的定位点图像坐标(x,y)通过“坐标转换”工具转换为机器人坐标系XY平面上的实际坐标(x’,y’)。

>>提示:

每次定位检测前相机的拍照位姿需要与拍摄标定板进行标定时的位姿一致。

8.2.1:采集图像 | 添加“U3相机1”工具

点击工具箱“获取图像”,选择“U3相机”工具,双击并设置参数值,调整参数以获得采集的目标图像,命名为“U3相机1”,如图所示:

8.2.2:定位目标 | 添加“特征模板匹配”工具

点击工具箱“定位工具”,选择“特征模板匹配”工具,双击并设置参数,建立模板,提取模板特征点,命名为:特征模板匹配1,如图所示: 

>>提示:

*关于“特征模板匹配”工具的使用请参考示例6。

8.2.3:将定位点的图像坐标(x,y)转换为实际坐标(x’,y’) | 添加“坐标转换”工具

点击工具箱“测量工具”,选择“坐标转换”工具,双击并设置参数值,调整工具参数设置“标定矩阵”,选择 Global Area (全局区)中的“平面标定1”的输出H [0]:Convert Matrix,“图像X”设置为“特征模板匹配1”的输出Point.X[0],“图像Y”设置为“特征模板匹配1”的输出Point.Y[0],命名为:坐标转换1,如图所示:

8.2.4:输出图像坐标(x,y)和实际坐标(x’,y’)信息 | 添加“显示字符”工具

点击工具箱“其他工具”,选择“显示字符”,双击并设置参数值,调整工具参数以在图像的左上角输出(图像坐标x,图像坐标y),(实际坐标x’,实际坐标y’)样式的字符串信息,命名为:显示字符1,如图所示:

>>提示:

*“显示字符1”完整“格式”内容为:“({特征模版匹配1.Point.X[0]},{特征模版匹配1.Point.Y[0]}),({坐标转换1.Point.X[0]},{坐标转换1.Point.Y[0]})”。

8.2.5:显示结果 | 添加“立即显示”工具

点击工具箱“其他工具”,选择“立即显示”,双击并设置参数值,勾选“显示字符1”的结果输出,命名为:立即显示1,如图所示:

8.3:运行工程文件

点击“运行”查看工程文件运行结果。

>>提示:

*我们需要先在“流程列表”中选择“流程0”,然后在“工具列表”的工具栏点击运行按钮。另外通过“操作”主菜单或主窗口工具栏上的运行按钮,可以自动按照流程列表中的流程运行方式运行。

-------------------------------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址:

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例7:学习使用计算器作为条件跳转工具的判断条件

示例7中,我们将使用“特征模板匹配”和“计算器”工具判断是否有两个螺母,使用“条件跳转”工具,当只有两个螺母时,我们将显示字符“OK”,否则显示字符“NG”。通过本示例,我们将对“条件跳转”和“计算器”这个两个重要工具做详细说明。

在示例6的基础上操作执行。

运行效果 

 编辑工程文件 

7.1:添加“条件跳转1”工具

在“循环1”工具后面添加。点击工具箱“流程控制”,选择“条件跳转”工具,双击并设置参数值,可以先任意选择一个工具的输出状态作为判断条件,命名为:“条件跳转1”,如图所示:

>>提示:

*“条件跳转”工具的详细说明请参考<<KSJVBAI视觉检测软件使用说明书>>;

*我们可以在“条件跳转1”的“条件”列表中看到已添加的所有工具,其中有“特征模板匹配1”这个工具,我们首先想到的是选择“特征模板匹配1”输出的匹配结果数目是否等于2,可是在“条件”列表的选择里,只有工具名称,这个列表里用工具名代表了工具的输出状态,也就是Status[0],每个工具都会有一个输出状态,OK或NG,KSJVBAI只能用工具的输出状态作为“条件跳转”的判断“条件”。那么我们该如何判断“特征模板匹配1”输出的匹配结果数目是否等于2呢?这时我们就需要先用一个“计算器”工具来做比较,计算器做逻辑比较后,如果相等,他的计算结果数据就是1,输出状态会是OK,如果不等,则计算结果数据为0,输出状态为NG。另外,计算器如果用于数值计算,输出状态会根据计算结果数据来确定输出状态,计算结果数据为0,则输出状态为NG,计算结果数据非0,则输出状态为OK。理解了这些,对于在“条件跳转”工具中如何利用“计算器”作为判断“条件”非常重要!由于这里我们还没有添加作为判断条件的计算器,所以可以先随便选择一个,后面再修改过来。

7.2:利用计算器的输出状态作为“条件跳转”的判断条件 | 添加“计算器2”工具

在“条件跳转1”工具前面添加,点击工具箱“其他工具”,选择“计算器”工具,双击并编辑计算公式,命名为:计算器2,然后修改“条件跳转1”的判断条件为“计算器2”,如图所示:

>>提示:

*手动添加“2”,注意用英文字符进行添加,并且要按照cmpe的语法规则进行输入;

*“计算器”工具的详情说明请参考<<KSJVBAI 视觉检测软件使用说明书>> ;

*了解“计算器”的语法规则后,可以直接在计算器的编辑区进行手动填写或修改计算公式。

>>提示:

*“计算器2”的计算公式为cmpe({特征模版匹配1.Num[0]},2),也就是比较“特征模版匹配1”识别的数目是否等于2,如果等于2,“计算器2”的输出状态将为OK,否则为NG,这样我们就可以将“计算器2”的输出状态作为“条件跳转1”的判断“条件”。

7.3:显示“OK”状态信息 | 在“条件跳转1”工具的IF块内部添加“显示字符2”工具

在“条件跳转1”工具的IF块内部添加,点击工具箱“其它工具”,选择“显示字符”工具,双击并设置参数值,新建一个在窗口显示“OK”的字符格式,命名为:显示字符2,如图所示: 

>>提示:

“显示字符”工具的设置里,可以设置字符的颜色、字体大小及位置。

7.4:显示“NG”状态信息|在“条件跳转1”工具的ELSE块内部添加“显示字符3”工具

在“条件跳转1”工具的ELSE块内部添加,点击工具箱“其它工具”,选择“显示字符”工具,双击并设置参数值,新建一个在窗口显示“NG”的字符格式,命名为:显示字符3,如图所示:

7.5:显示“OK”“NG”结果 | 修改“立即显示3”工具参数

选择“立即显示3”工具,双击并设置参数,勾选“显示字符2”、“显示字符3”的结果,显示条件跳转的输出字符信息,如图所示:

>>提示:

到这里我想大家对添加工具、删除工具、修改工具已经很熟悉了吧,如果还不熟悉的话,一定要再从头再学习一遍。

7.6:运行工程文件

运行工程文件,可以在视场内摆放2个或其他个数的螺母,测试运行效果。

拓展学习 

  1. 当检测到两个螺母时,可以通过“图形关系”工具测量一下两个螺母圆心的距离,并将测量结果显示在直线的中点位置。注意直线中点位置的计算需要通过“计算器”工具进行计算。
----------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址:

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例6:学习模板匹配工具代替斑点分析工具进行定位

示例5我们使用“斑点分析”工具进行定位,示例6将讲解用“特征模板匹配”工具代替“斑点分析”工具,实现同样的定位功能。

此示例在示例5的基础上操作执行。

运行效果 

 编辑工程文件 

6.1:删除“斑点分析1”工具,添加“特征模板匹配1”工具

选择“斑点分析1”工具,右键单击,删除即可。

点击工具箱“定位工具”,选择“特征模板匹配”工具,双击添加,命名为:特征模板匹配1,如图所示: 

6.2:设置模板

设置“特征模板匹配1”工具参数时,我们需要先设置一个模板,所谓模板,我们可以理解为一个识别检测目标的样本。

在“特征模板匹配1”工具的参数界面上点击“设置模板”,我们就可以在“图像信息显示窗口”点击鼠标左键,这时会出现模板区域编辑框,移动鼠标再次点击鼠标左键,会完成模板区域的选择,将编辑框拖动和编辑以选择合适的样本区域作为模板,点击“完成”即可,如图所示:

>>提示:

*第二步“图像信息显示窗口”的篮色线框为编辑好的模板区域,将以此区域图像作为模板;

*当鼠标移动到模板区域编辑框附近时为蓝色,这时如果鼠标不在编辑点上,可以通过鼠标拖拽改变模板区域编辑框的位置,如果在编辑点上,可以通过鼠标拖拽改变模板区域编辑框的形状,移开后模板区域编辑框为绿色,这时图形不受鼠标控制;

*第三步点击完成后,“特征模板匹配1”工具会将设置的模板区域用“紫色”框显示,定位的位置用“+”指示并显示匹配的得分。

6.3:编辑模板

“设置模板”完成之后,我们需要根据实际需求对模板进行进一步编辑,点击“编辑模板”,对特征点进行选择,并调整实际检测目标可能旋转的角度范围和定位点位置,如图所示:

>>提示:

*调整参数“最大特征数量”指定自动提取特征点的数量,点击“提取”按钮之后,软件会自动按照设置的特征点数量进行筛选提取,并以绿色的点在图像上显示,作为特征模板匹配时的关键特征点;

*特征点是识别被测目标的重要信息,通过观察提取出的“绿色特征点”,使用“橡皮”擦去不需要的特征点,或通过画笔恢复橡皮擦除的特征点;

*螺母是六角形的,内角为120度,根据螺母形状特征设置”角度范围“为0-65度,这样螺母随意摆放时可以通过旋转进行匹配定位,并输出角度信息;

*“特征模板匹配”工具会自动根据匹配的特征点计算出中心位置,也就是定位点的位置,在左侧图像上以蓝点标记,如果自动计算的中心位置需要调整,可以点击“手动”按钮,然后在图像上点击理想的中心位置,这样特征模板匹配工具会根据此设置,自动调整每次检测的中心位置。

>>提示:

*编辑模板完成后,可以点击“运行”按钮进行测试,“特征模板匹配1”工具会将实际匹配到的目标用紫色的线框包围,得分会显示在定位位置,如果模板匹配不理想,可以再次“设置模板”或“编辑模板”,也可以通过适当降低“得分”来适应现场环境的干扰变化,直至模板匹配理想后,点击“确认”,完成工具添加。

6.4:修改“循环1”工具参数

选择“循环1”工具,双击并设置参数值,调整参数以“{特征模版匹配1.Num[0]}”作为“循环1”工具的“终止值”,确定循环的执行次数,如图所示:

6.5: 修改“定位坐标1”参数

选择“定位坐标1”工具,双击并设置参数,“原点”修改为“{特征模版匹配1.Point[#循环1]}”,也就是在循环中依次以“特征模板匹配1”的每个定位点作为“定位坐标1”的原点,如图所示:

6.6:修改显示计数值 | 修改“显示字符1”工具参数

选择“显示字符1”工具,双击并设置参数,调整参数“格式”以“Number:{特征模板匹配1.Num[0]}”作为显示计数值,如图所示:

>>提示:

*“格式”内容调整为:“Number:{特征模板匹配1.Num[0]}”

6.7显示运行结果 | 修改“立即显示3”工具

双击“立即显示3”,调整并设置参数值,以显示“特征模板匹配1”工具的输出结果。

>>提示:

*“特征模板匹配”工具的默认显示结果是区域框、定位点和得分,如果要显示其他的输出结果需要通过“显示字符”工具完成。

6.8:运行工程文件

点击“运行”,查看运行结果。

 拓展学习 

1、通过添加不同的“特征模板匹配”工具,对不同的目标进行定位和分类。

-------------------------------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址:

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例5:学习循环工具,同时进行多个工件的计数和检测

示例4完成之后,我们会发现如果放置多个相同的螺母,“斑点分析”工具可以检测出每个螺母的中心位置并标注相应的索引号,只是测量结果只有索引号为0的那个螺母。

示例5我们将讲解如何使用“循环”工具测量每个螺母的中心圆孔半径,并将每个螺母的测量结果显示在它的圆心位置上。

在示例4的基础上操作执行。

运行效果

5.1:确定循环次数 | 添加“循环1”工具

在“斑点分析1”工具后面添加工具。点击工具箱“流程控制”,选择“循环”工具,双击并设置参数值,调整参数“起始值”设置为0,“终止值”设置为“斑点分析1”工具的输出斑点个数,以确定循环的执行次数,命名为:循环1,如图所示:

>>提示:

*使用“循环”工具,可以对每个螺母半径进行检测;

*循环工具应该加到流程中的什么位置?

*循环工具内部需要做什么事情?

如果每一次循环,工具所需的值都需要根据“斑点分析1”的每个结果改变而改变,我们就需要放到循环里来进行,那么“定位坐标1”会变吗?“定位坐标1”是根据每个“斑点分析1”输出的中心位置而变化的,所以它肯定是要放在循环内部的,而“找圆1”又依赖于“定位坐标1”,所以“找圆1”也需要放在“循环1”中,同理,“计算器1”也是依赖于“找圆1”和“定位坐标1”,所以也需要放在“循环1”中,“显示字符1”也是一样的。

5.2:根据每个斑点定位位置改变定位坐标 | “定位坐标1”工具移入“循环1”内部并修改参数

选择“定位坐标1”工具,右键单击,剪切并粘贴在“循环1”工具内部,调整设置参数,原点的设置需要将{斑点分析1.Point[0]}手动改变为{斑点分析1.Point[#循环1]},这个语法表示“定位坐标1”的原点每次会根据“斑点分析1”输出的定位点而改变,如图所示:

>>提示:

*这里首次出现了“#循环工具名”这样的语法,“#循环1”可以理解为“循环1”工具内部的第几次循环,是一个根据循环次数而变化的变量,用户需要手动将一个结果数组的固定索引改为以“#循环工具名”为索引值的可变索引;

*“定位坐标1”工具是以每次“斑点分析1”输出的定位点作为原点,所以“定位坐标”工具参数“原点”内容:“{斑点分析1.Point[0]}”改为:“{斑点分析1.Point[#循环1]}”;

5.3:在每个斑点上找圆 | “找圆1”工具移入“循环1”内部

选择“找圆1”工具,右键单击,剪切并粘贴在“定位坐标1”工具后面,工具参数设置不需要改变,以循环执行找圆流程,如图所示:

>>提示:

*在“循环1”中的“找圆1”的定位坐标选择中,不要用“{定位坐标1.Coordination[#循环1]}”而是要选择“{定位坐标1.Coordination[0]}”,这是由于“定位坐标1”的输出结果Coordination[0]不是数组类型的,它会在每次次循环中根据{斑点分析1.Point[#循环1]}而改变,不需要再用“#循环1”来确定;

*在不考虑复杂循环的情况下,我们可以这样简单理解,在循环内部,只有与循环次数相关的工具才需要使用“#循环工具名称”作为索引,比如本例“循环1”内部的工具,其循环次数为“斑点分析1”的输出结果,“定位坐标1”在使用“斑点分析1”的结果时,需要使用“#循环1”作为索引来表示每次结果的改变,而其他工具的输出结果都不需要用“#循环1”,仍然使用[0]作为结果数据。另外要看一下工具输出的结果数据是否为数组类型,不是数组类型的数据绝对不能用“#循环工具名”作为索引。

5.4:计算每个圆的半径 | “计算器1”工具移入“循环1”内部

选择“计算器1”工具,右键单击,剪切并粘贴在“找圆1”工具后面,工具参数设置不需要改变,以循环执行计算器流程,如图所示:

5.5:测量半径信息调整到每个圆心位置显示 | “显示字符1”工具移入“循环1”内部并修改参数

选择“显示字符1”工具,右键单击,剪切并粘贴在“计算器1”工具后面,双击“显示字符1”工具,调整设置参数, 修改“显示字符1”工具的设置,首先删除之前的设置,然后新建两个显示字符格式,一个窗口左上角显示计数值,另一个在每个螺母的圆心位置显示圆半径的测量结果,如图所示:

>>提示:

*“显示字符1”工具的“X、Y”内容,在工具的Data列表下查找添加,分别为:“{找圆1.Circle.Centre.x[0]}”、“{找圆1.Circle.Centre.y[0]}”。

5.6:运行工程文件

点击运行,查看循环执行的结果。

拓展学习 

  1. 修改“显示字符1”工具的半径测量结果显示位置,将X变为 “{斑点分析1.Point.X[#循环1]}”,Y变为“{斑点分析1.Point.Y[#循环1]}”,查看运行效果,并思考“#循环工具名称”的使用。
-------------------------------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址:

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q
提取码:yhqm

示例4:学习斑点分析和定位坐标系工具实现被测目标位置不固定检测

示例3中,被测目标的位置是固定的,所以“找圆”工具的检测区域也相对固定,但是如果被测目标的位置发生了变动,我们就无法用示例3的工程文件进行检测。

示例4中,我们将先对被测目标的位置进行定位,然后基于被测目标的位置来确定找圆工具的检测区域。也就是要使找圆工具的检测区域相对于被测目标的位置而变动,使两者之间的位置关系相对固定的。

在示例3的基础上操作执行。

>>提示:

*“定位工具”大家会经常用到模板匹配类工具,但本示例我们先讲解用“斑点分析”工具进行定位。斑点分析工具是非常快速、有效的定位工具,相比于模板匹配类工具,“斑点分析”工具对于用户设置来说会有些复杂,但一旦熟悉,也是一个非常简单易用的定位工具。

运行效果 

编辑工程文件 

4.1:定位螺母中心点的位置 | 添加“斑点分析1”工具

在“二值化”图像后添加工具。点击工具箱“定位工具”,选择“斑点分析”,双击并设置参数值,调整参数以定位螺母的中心点位置,命名为:斑点分析1,如图所示:

>>提示:

*“斑点分析”工具的输入必须是二值图像,所以前面必须有“二值化”工具对图像进行了二值化处理;

*在不确定筛选条件如何填写最小和最大值之前,可以先用默认的最小和最大值,运行一次,将筛选出所有可能的斑点,根据筛选出来的面积、长轴、短轴的实际值来确定筛选条件的最大、最小值,然后点击运行查看窗口图像结果,直到能正确筛选出所需要的斑点,比如上图中我们先设置面积的最小值为0,最大值为9999999999,通过运行后得到实际面积为10142,那么我们根据此值再设置最小值为8000,最大值为12000。

4.2:建立以定位点为原点的坐标系| 添加“定位坐标1”工具

点击工具箱”定位工具“,选择”定位坐标“,双击并设置参数值,调整参数以“斑点分析1”的定位结果作为“定位坐标”的原点,命名为:定位坐标1。设置好后,我们可以在”图像信息显示窗口”上看到坐标系的原点移动到“斑点分析1”的定位点上,如图所示:

>>提示:

*本示例中,“定位坐标”工具必须在“斑点分析”工具后面添加,因为“定位坐标”工具需要“斑点分析”工具的输出结果数据;

*本示例中,螺母本身是对称的,“找圆”检测区域也是环形的,所以只需要设置“定位坐标1”的原点即可,可以忽略角度。

4.3:找圆检测区域与被测目标物体建立相对关系 | 修改“找圆1”工具

双击“找圆1”工具,设置参数以“定位坐标”工具结果作为“找圆”工具的定位坐标系,这样“找圆1”工具的检测区域与“斑点分析1”定位位置就建立了相对关系,也就是”找圆区域“相对于被测目标物体而变动,如图所示:

>>提示:

*由于在没有设置定位坐标之前,“找圆1”的检测编辑区域的原点是在图像的左上角,当改变定位坐标之后,原来“找圆1”的检测区域会随坐标系原点的移动而移动,我们需要重新在新的坐标系下,把检测区域移动到相对于新坐标系原点的新位置,这样就建立了检测区域与新坐标系的相对关系;

4.4:显示运行结果 | 修改“立即显示3”工具

双击“立即显示3”,调整并设置参数值,以显示“斑点分析“工具的输出结果,也就是显示斑点的中心位置以及已经找到斑点的索引号。

>>提示:

*如果需要显示“斑点分析1”、“找圆1”的默认输出结果,可以在”立即显示3”工具的结果列表中进行勾选。

4.5:运行工程文件

点击“运行”,移动被测目标,这时位置改变了依然可以执行定位并进行测量。

 拓展学习 

1、通过添加不同筛选条件的“斑点分析”工具,对不同的目标进行定位和分类。

----------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址:

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q 
提取码:yhqm

示例3:学习使用标尺和计算器工具以获取物理尺寸

示例3我们将讲解如何把示例2中以像素为单位的半径测量结果转换为以毫米为单位的实际物理尺寸。我们需要先通过“标尺”工具进行标定,得到一个像素点所代表的物理尺寸,再通过“计算器”工具获得螺母圆孔半径的物理尺寸,并将物理尺寸结果显示在“图像信息显示窗口”上。

示例3需要在示例2的基础上操作执行。

 运行效果 

编辑工程文件 

3.1:获取“物理标尺”图像 | 采集“光学标准尺”

手机扫码下载“MV2025”app

打开手机“MV2025”app,点击“工具”,选择“标准尺”得到需要采集的“光学标准尺”图像。将手机屏幕放入相机视场内进行“光学标准尺”采集,此时“图像信息显示窗口”上显示“物理标尺”图像,如图所示:

>>提示:

*手机放入视场的平面位置要与被检物体放入视场的平面位置一致,否则会导致测量误差。

3.2:完成图像像素到物理尺寸的标定 | 添加”标尺1“工具

点击工具箱“定位工具”,选择“标尺”,双击并设置参数值。根据图形直线标尺对应的物理标尺的实际长度,调整工具参数“单位”和“长度”,同时在“图像信息显示窗口”用鼠标点击直线进行拖拽移动或点击两端编辑点调整“直线标尺”长度,以至对应“物理标尺”长度,这样就完成了“图像像素”到“物理尺寸”的标定。命名为:标尺1,操作如图所示:

>>提示:

*必须根据图形直线标尺对应的物理标尺的实际长度,设置工具参数值的“长度”和“单位”;

*当鼠标移动到“图形直线标尺”附近时为蓝色,这时如果鼠标不在编辑点上,可以通过鼠标拖拽改变“图形直线标尺”的位置,如果在编辑点上,可以通过鼠标拖拽改变和调整“图形直线标尺”的长度和角度,移开后“图形直线标尺”为绿色,这时图形不受鼠标控制。

将手机屏幕从视场内移开,完成图像像素到物理尺寸的标定,如图所示:

3.3:像素尺寸转换为物理尺寸 | 添加“计算器1”工具  

点击工具箱“其它工具”,选择“计算器”,双击并设置参数值。通过“计算器1”将圆半径的像素尺寸换算为物理尺寸,“找圆1”工具得到了以像素为单位的圆半径大小,“标尺1”工具得到了一个像素所代表的物理尺寸,我们利用计算器将这两个数相乘,即得到了圆孔半径的物理尺寸,命名为:计算器1,如图所示:

>>提示:

*“找圆1”工具得到半径大小,以像素为单位;

*“标尺1”工具得到一个像素的物理尺寸;

*“计算器1”将“找圆1”与“标尺1”的数值相乘,计算半径的物理尺寸,以毫米为单位;

*如果对语法熟练,计算器的“内容”可以按语法规则进行手动输入。

3.4:显示计算器的输出结果 |修改“显示字符1”工具    

双击“显示字符1”,添加新建并设置参数值,将计算器的结果转换为一个可以显示的字符串信息,以显示输出螺母半径的物理尺寸,以毫米为单位,如图所示:

>>提示:

*“显示字符”工具将输出结果转换成可显示的字符串信息;

*修改工具参数:要在流程“工具列表”中修改一个工具的参数,双击相应的工具即可出现此工具的“参数设置窗口”。

3.5 :运行工程文件

点击“运行”查看测量的物理尺寸结果。

---------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q 
提取码:yhqm

示例2:学习使用简单图像处理工具和显示结果

示例2 我们将讲解如何测量一个固定位置的螺母圆孔半径,测量结果以像素为单位,并将测量结果显示在“图像信息显示窗口”上。

在示例1的基础上操作执行。

运行效果 

 编辑工程文件 

2.1:在图像固定检测区域找圆 | 添加“找圆1”工具

在“立即显示2”工具后面添加“找圆”工具。

点击工具箱“定位工具”,选择“找圆”,双击并设置参数值,调整工具参数的同时在“图像信息显示窗口”的图像上用鼠标拖拽检测区域边框或编辑点调整图形位置和形状,使螺母圆孔的边缘被环形区域所覆盖,并出现紫色边缘轮廓的找圆图形结果,命名为“找圆1”,如图所示:

>>提示:

*工具添加完成后,可以通过双击“工具列表”中相应的工具,重新进入参数设置状态,再次对检测区域进行编辑和参数设置;

*对于具有可编辑检测区域的工具,当鼠标移动到检测区域边框时,边框颜色为蓝色,这时如果鼠标不在编辑点上,可以通过鼠标拖拽改变图形位置,如果在编辑点上,可以通过鼠标拖拽改变和调整图形形状,移开后边框颜色为绿色,这时图形不受鼠标控制;

*“找圆”工具在找到圆的同时,会输出更详细的结果数据,比如圆心位置、半径等信息。

2.2:输出螺母圆孔的半径结果 | 添加“显示字符1”

点击工具箱“其他工具”,选择“显示字符”,双击并设置参数值,调整工具参数以输出螺母中间圆孔的半径结果,其结果以像素为单位,命名为:显示字符1,如图所示:

>>提示:

*“显示字符”工具的“格式”设置,可以手动添加额外的字符串,如果对语法熟练,也可以完全手动输入全部内容;

*“显示字符”工具并不会真正在运行的窗口上将字符显示出来,它只是把要显示的字符作为自己的输出结果。我们必须在下一步的“立即显示”工具中勾选“显示字符”才能在运行的窗口中看到要显示的字符串。在工程运行的过程中,只有执行到“立即显示”工具时,窗口的内容才会刷新,并根据立即显示中定义的图像和结果刷新窗口。

2.3:显示工具的运行结果 | 添加“立即显示3”工具

点击工具箱“其他工具”,选择“立即显示”,双击并设置参数值,调整工具参数以显示工具的输出结果,命名为:立即显示3,如图所示:

>>提示:

*“立即显示3”工具参数 ,需同时勾选“找圆1”和“显示字符1”工具的结果;

*每个Step的默认显示结果通常和编辑这个Step时是一致的。

2.4:提高显示效率 |  删除“立即显示1”工具

工程每次执行到“立即显示”工具时都会对对应的窗口进行刷新,为提高显示效率,选择“立即显示1”,右键菜单上点击删除即可,如图所示:

>>提示:

*删除工具:选择需要删除的相应工具,右键菜单上点击删除即可。

2.5:运行工程文件

点击“运行”,查看螺母圆孔的半径结果。

拓展学习 

1、可以在窗口上显示不同的字符,比如窗口0中显示“原始图像”,窗口1中显示“二值化图像”。

2、可以尝试使用工具箱中的定位工具,如“找边缘点”,“找直线”,“卡尺”进行工具外观轮廓的测量并显示其输出结果数据。

----------------------------------------------------------

文档示例相关工程文件及仿真图片下载链接地址

https://pan.baidu.com/s/1FQF5FaYP6grrJvIjKvYo3Q 
提取码:yhqm