机器视觉大师脚本编程
机器视觉大师(MVS),一体式可编程机器视觉操控器(FVS), 可组态机器视觉操控器(EVS)都支撑脚本编程。尽管机器视觉大师脚本编程最简略,可是许多用户遍及感觉好像很难入门,笔者将具体介绍一下这些机器视觉大师的脚本编程原理和进程。
机器视觉大师在主动检测形式下,能够支撑用户脚本编程。为什么要这样的功用呢?这需求简略介绍一下机器视觉大师供给主动检测功用的意图说起。
机器视觉大师主动检测功用首要用于开发全主动机器视觉主动化体系的前期试验剖析(图形预处理,特征算法等)或桌面式半主动机器视觉运用。机器视觉在主动化范畴的运用从软件开发方面来讲首要触及图画预处理,特征剖析,形式辨认算法等,完结工业范畴常用的如定位,色彩区别,缺点检测,生产日期检测或辨认,条码辨认等。如果一个新的需求悉数从头开端开发的话,工作量非常巨大,而且需求开发人员既具有图画处理方面的常识,也需求具备比较强的编程才能,一般来说,是非常困难的。
机器视觉大师将图画剖析和常用的形式辨认等算法彻底封装成检测算子,选用可视化修改的方法,用户只需求动动鼠标扒拉几下, 不到几分钟,一个机器视觉运用体系原型将很快树立起来。可是,因为运用的复杂化,机器视觉大师供给的算子可能不能彻底适用用户的实践需求。这就需求用户进行终究的处理即脚本编程,来完结终究的方针。打个比方来说,机器视觉大师就好比一个城市树立的地铁体系,尽管方便快捷,可是终究一公里还需求一种交通工具如同享单车,才能使乘客很舒畅地抵达意图地。脚本编程好像是同享单车,尽管不是全主动的,需求用点力,可是操作实在是很简略,只需把握好方向盘,用力蹬就行了。
机器视觉大师里边设计一个简略的机器视觉或印象主动检测运用,根本进程如下:
言归正传,在机器视觉大师里边进行脚本编程其实也是很简略的一件事。不像一些高档编程言语如c/c++,java, 网页脚本php,这些言语功用较强,支撑类,函数,事情等,需求把握的常识点较多,学习起来比较复杂,绵长。机器视觉大师的脚本编程只需求把握两点:1. 了解和把握方针和特点的概念; 2. 了解和运用逻辑判别和循环或次序履行。彻底不需求自界说什么类,函数什么的。这些概念是全部编程言语里边最根本的内容。所以,别忧虑,全部会是那么的简略。
方针模型
在机器视觉大师里边,编程的时分必定是以方针为主。 顶层方针只需两种,即视场方针和整个运用程序方针。 视场方针下面有算子方针,算子方针有读数特点(复合型读数如点(x,y)也能够了解成方针)。不同的算子方针具有不同的读数,有数据类,有文本类,或数组类。机器视觉大师里边的根本方针模型如下图:
运用程序方针依据当时的检测使命的不同,具有不同的特点(也称变量)。视场方针即相机所能成像的规模,表现为一个图画,但实践编程时可能与图画彻底不搭边,所以只需记住,当时PC体系有几个相机,就能够了解有几个视场方针。视场下面的算子的数量依据用户自己实践增加的数量决议。
在编程中,全部的方针均运用称号标识,这些标识均体系现已主动命名, 运用程序方针的姓名为mvs, 有且只需一个。视场方针的姓名为sight, 后边紧接一个数字,表明不同的视场方针等等,如sight1。视场里边不同的算子分别有自己的姓名,同类型的算子后边增加序号加以区别,与视场姓名的命名规矩差不多。
运用的时分,方针必定是从最顶层方针开端,然后往下一层,再往下一层,直到特点,不同的方针之间运用圆点”.”符号进行连接。例如,如果要取得视场一(sight1)里边的双态辨认算子(dual1)的“检测成果”读数, 如:
n = sight1.dual1.res
算子方针的读数在运转一次检测今后,体系会主动给出成果,可是,运用程序方针的特点许多情况下,需求用户在脚本里边进行编程核算,如
mvs.good = 1,
这条句子将运用程序方针的good特点设置为1.
不同检测算子可用读数如下表(因为版别不断变化,请运用实践称号)
检测算子 |
读数称号 |
数据类型 |
阐明 |
双态检测 |
res-成果 |
整数 |
模板索引。如果为0表明第一个模板,如果为1表明第2个模板。 |
定位 |
count – 实例个数 position –方位 abspos –肯定方位 offset – 偏移 |
整数 点 点 2D实数 |
如果找到实例,回来1,不然回来0 |
多态检测 |
result – 成果(最大分数的模板索引) count –现已学习的模板数 pattname – 模板称号或阐明 score – 当时辨认的每个模板分数值 |
整数 整数 文本 实数 |
多态检测的辨认成果为分数最高的模板索引。除非进行了实践的模板增或减操作,现已学习的模板数每次辨认今后都不会改换。 |
模板辨认 |
count – 实例个数 position –方位 angle – 视点 |
整数 点 实数 |
|
一维码 |
count – 条码个数 content –条码内容 |
整数 文本 |
|
二维码 |
count – 条码个数 content –条码内容 |
整数 文本 |
|
BLOB剖析 |
count – blob个数 offset – 偏移 width – 宽度 length – 长度 centroid – 质心 dens – 密度 pixsum – 像素和 pixavg – 像素平均 pixvar—像素方差 strength – 强度 perim – 周长 area – 面积 circu -- 圆度 slant – 斜率 rect – 外接矩形 |
整数 2D实数 整数 整数 点 实数 实数 实数 实数 实数 整数 整数 实数 实数 矩形 |
|
文字辨认 |
content –字符内容 |
文本 |
|
色彩辨认 |
result – 成果 |
整数 |
回来色彩索引 |
边距丈量 |
result – 成果 |
整数 |
回来实践的长度,以像素为单位 |
如果成果有多组相同特点,那么该特点即为特点数组,需求运用数组的方法进行引证,如
blob1.offset[1].x
数组序号从1开端。 记住: 但凡有多组相同特点的的算子,一般都会供给一个称号相似“count”的读数表明当时有多少组特点。如:
n = blob1.count
m = pmat1.count
如果忘掉某个算子的读数,也能够在对应算子的参数设置窗口里边的读数页中得到,如下图:
逻辑判别和条件履行
机器视觉脚本编程机大部分上是对视场中算子的成果进行逻辑运转今后,然后对运用程序方针的相关特点进行赋值的一个进程。这样的简略的方法,极大地增强软件的功用,达到彻底满意用户需求的意图。下面为脚本修改的一般进程:
出于简略易用的考虑,机器视觉大师支撑最根本的逻辑判别表达式和条件履行句子。当然,最根本的赋值句子和算术表达式是必须支撑的。句子不需求完毕符如c言语中的”;”,可是需求运用空格隔开,出于可读性考虑,主张一个句子运用一行,最好选用缩进结构。
下表是逻辑运算表达式:
逻辑运算符或联系运算符,算术运算符,括号等构成逻辑表达式,其成果只能为true(真)或false(假)。
支撑的逻辑或联系运算符如下:
算符或关键词 |
阐明 |
类型 |
and |
与,左右两头的表达式为true,成果才为true,不然为false |
逻辑运算符 |
or |
或,左右两头的恣意一个表达式为true,成果为true,不然为false |
逻辑运算符 |
not |
非,如果右边的表达式为true,成果为false。反之如果右边的表达式为false,成果为true。 |
逻辑运算符 |
< |
小于,左面的表达式值如果小于右边的表达式值,成果为true,不然为false. |
联系运算符 |
> |
大于,左面的表达式值如果大于右边的表达式值,成果为true,不然为false. |
联系运算符 |
<= |
小于等于,左面的表达式值如果小于等于右边的表达式值,成果为true,不然为false. |
联系运算符 |
>= |
大于等于,左面的表达式值如果大于等于右边的表达式值,成果为true,不然为false. |
联系运算符 |
== |
等于,左面的表达式值如果等于右边的表达式值,成果为true,不然为false. |
联系运算符 |
~= |
不等于,左面的表达式值如果不等于右边的表达式值,成果为true,不然为false. |
联系运算符 |
算术表达式的算符如下:
一个表达式可能由不同的类型的的表达式组成。这些表达式在核算的时分恪守必定的优先次序。运算符能够经过括号括起,括号里边的运算符号具有最高的优先级。当无括号的情况下,这些运算符的从高到低的优先次序如下:
^ |
not,- |
*, /, % |
+, - |
<, > , <=, >=, ==, ~= |
and |
or |
在机器视觉大师脚本里边能够随意界说变量,这些变量不需求声明数据类型,直接将算术表达式或逻辑表达式赋值即可。变量的类型依据表达式的成果决议,能够是逻辑类,数值类或文本类。
逻辑类的变量只能为true或 false, 文本类的内容需求用双引号括起。如
label = “hello, world”
result = sight1.dual1.res == 0
if result == true then
//do something
end
机器视觉大师能够运转不同品种的主动检测使命。许多情况下,需求进行操控履行,对不同的特点进行赋值,以取得终究成果。机器视觉大师供给根本的操控关键词如if, while, for等
if then else
if句子先测试其条件,然后依据测试成果履行then部分或许else部分,else部分是可选的。如果要编写嵌套的if,能够运用elseif。如:
示例一
if a < 0 then
a = 0
end
示例二
if a < b then
a =b
else
a = a+1
end
示例三
if op == "+" then
r = a + b
elseif op == "-" then
r = a – b
end
while
while句子评价逻辑表达式的值,当成果为true的时分,履行程序块。如:
local a = 10
while a > 0 do
a = a - 1
end
for
for句子将指定的变量进行递加核算,循环必定次数。如:
for i= 1, 100, 1 do
# Do something
end
该段句子将重复履行程序段100次。在for句子里边,第一个数字为初始值,第二个数字为终止值,第三个数字为步长,通常情况下为1,如果为1的话,第三个数字能够省掉。
如果需求回来不再往下履行,能够运用return关键词进行回来。跳出一些循环块,能够运用break关键词。如:
for i= 1, 100, 1 do
if i==50 then
break
end
end
n = 100
上面的句子段根本算法为当i等于50的时分,跳出循环,然后运转n=100句子。
机器视觉大师支撑不同的检测使命类型,不同的检测类型下,可用的运用程序特点数量和意义是不一样的。这些特点如合格数,在检测运转进程中将在成果显示面板中被显示出来。下表为支撑的全部特点(全局变量):
称号 |
阐明 |
适用的检测类型 |
数据类型 |
rd1 |
读数1 |
惯例检测(默许) |
实数 |
rd2 |
读数2 |
惯例检测(默许) |
实数 |
rd3 |
读数3 |
惯例检测(默许) |
实数 |
rd4 |
读数4 |
惯例检测(默许) |
实数 |
rd5 |
读数5 |
惯例检测(默许) |
实数 |
rd6 |
读数6 |
惯例检测(默许) |
实数 |
rd7 |
读数7 |
惯例检测(默许) |
实数 |
rd8 |
读数8 |
惯例检测(默许) |
实数 |
good |
合格品 |
质量检测 |
布尔类整数,仅为1或0 |
ng |
缺点品 |
质量检测 |
布尔类整数,仅为1或0 |
count |
当时数 |
产品计数 |
整数(无小数部分) |
diff |
差数 |
产品计数 |
整数(无小数部分 |
want |
方针数 |
产品计数 |
整数(无小数部分 |
ms1 |
丈量到的实践值1 |
尺度丈量 |
实数 |
ws1 |
方针尺度的规范值1 |
尺度丈量 |
实数 |
dif1 |
差错1 |
尺度丈量 |
实数 |
ms2 |
丈量到的实践值2 |
尺度丈量 |
实数 |
ws2 |
方针尺度的规范值2 |
尺度丈量 |
实数 |
dif2 |
差错2 |
尺度丈量 |
实数 |
ms3 |
丈量到的实践值3 |
尺度丈量 |
实数 |
ws3 |
方针尺度的规范值3 |
尺度丈量 |
实数 |
dif3 |
差错3 |
尺度丈量 |
实数 |
ms4 |
丈量到的实践值4 |
尺度丈量 |
实数 |
ws4 |
方针尺度的规范值4 |
尺度丈量 |
实数 |
dif4 |
差错4 |
尺度丈量 |
实数 |
终究,以一个实践检测的一个脚本完毕本文。如下:
cnt = sight2.blob1.cnt
if cnt ~= 5 then
mvs.good = 0
mvs.ng =1
return
end
for i=1,5 do
if sight2.blob1.w[i] <25 then
mvs.good = 0
mvs.ng =1
return
end
if sight2.blob1.h[i] <12 then
mvs.good = 0
mvs.ng =1
return
end
end
mvs.good =1
mvs.ng =0
这个脚本算法解说如下:如果sight2中的blob1的个数不是5个,那么将good设置为0,ng特点设置为1后,直接回来。不然,逐一判别其高度或宽度,如果不合格则进行相应处理,然后回来。当全部的blob宽度和高度彻底合格今后,将good设为1,ng设为0,然后回来。