VisionMaster是海康威视近两年来一直主推的机器视觉算法平台,也许在性能和算法丰富程度上跟市面上的美国康耐视公司的VisionPro以及德国MvTec公司的Halcon还有不小差距,但整体使用体验也算是国产视觉软件佼佼者之一。
在ApolloStudio V3版本中,VM4.2作为插件进行了嵌入,我们先来看下ApolloStudio提供了哪些接口:
整个使用流程是:
事先在VisionMaster算法平台中将项目案例进行编辑,生成后缀名为.sol的项目文件,在ApolloStudio中调用时,只需要先初始化平台(这里需要指定VisionMaster平台主程序的绝对路径),加载sol项目文件,执行,获取格式化数据即可(这里需要注意的是在项目编辑的末端,需要将最后需要的数据进行一个格式化操作,以便获取结果数据)。
前期准备
在VM4.0中,需要先将库文件复制到ApolloStudio的根目录下方可进行加载,这里我们先找到VisionMaster的默认安装路径(C:\Program Files\VisionMaster4.2.0\Applications),分别找到如下几个文件或文件夹:
为方便后面的项目操作,我们可以将这些文件单独复制出来备用,就是下面这个样子:
*注:不同版本的VisionMaster可能略有差异,以下是V4.2.0_20220628版本号的所需文件
务必将以上这些文件复制到ApolloStudio安装根目录即可。
应用示例
在这里我们举一个快速匹配操作的流程来举例说明:
我们以快速特征匹配来解析流程用法,打开项目文件后,我们在定位的末端添加一个格式化功能,然后指定匹配点的XY输出,设计VM方案如下图所示(图像源加载的是本地的一个图像文件夹,快速匹配设定的是芯片中心区域的规格参数,格式化显示匹配中心结果):
保存项目文件后,我们回到ApolloStudio中,在ApolloStudio里面我们先编辑组态界面,我们选择添加3个按钮:一个用来触发单次执行操作,另外就是进行连续执行):
在控件的“控件自定义事件”中,单次执行按钮需设置“绑定按钮标志位(需设置数值序号)|Buttnotallow=0”,连续执行的按钮则将序号设置为Buttnotallow=1,图像显示框则设置控件名为"image1",下方再添加一个列表框来显示每次执行的信息。
在主界面的任务列表里面直接添加组态界面单元和脚本逻辑单元即可(VisionMaster组件是作为插件调用的,无需配置即可使用),我们编辑脚本如下:
#-*- coding: UTF-8 -*-
#本DMEO适配VisionMaster 4.0.0版本
#加载内嵌模块(引入mvvm库)
import clr,sys,time,datetime,mvvm
#测试模板路径
testfile = "D:\\Download\\TestDemo\\TestSol.sol"
#创建vm调用对象
vm = mvvm.AS_MV_VM_Obj(AS)
#加载方案
vm.LoadSolution(testfile)
#绑定渲染框到指定的图像框控件
vm.ModuleRender("picturebox1","流程1.快速匹配1")
#循环
while True:
if AS.Func_UI_Button_GetValue(0):#检测0号索引按钮标志位
AS.Func_UI_Button_SetValue(0, False)#先复位信号
vm.ExecuteOnce("流程1")#单次执行流程1
res = vm.GetFormatResult("流程1.格式化1")#获取格式化1结果,结果为list<string>类型,默认取第1位(索引为0)的数据结果
AS.Func_UI_ListBox_ItemAdd("listbox1", str(res[0]))#显示结果
if AS.Func_UI_Button_GetValue(1):#检测1号索引按钮标志位
AS.Func_UI_Button_SetValue(1, False)#先复位信号
AS.Func_UI_Button_SetText("button2", "停止执行")#修改按钮显示来标识状态
while not AS.Func_UI_Button_GetValue(1):#等待按钮再次按下,否则一直执行单次触发流程
vm.ExecuteOnce("流程1")
res = vm.GetFormatResult("流程1.格式化1")
AS.Func_UI_ListBox_ItemAdd("listbox1", str(res[0]))
AS.Func_UI_Button_SetValue(1, False)#复位触发信号
AS.Func_UI_Button_SetText("button2", "连续执行")#恢复连续执行的显示
time.sleep(0.1)#系统延时,避免过高CPU占用率
脚本中我们定义了循环扫描2个按钮的触发标志位,然后执行对应的操作 ,保存并在主界面的任务项中指定脚本路径,运行即可看到下面的结果(执行运行前,务必先保存方案文件并退出VisionMaster软件,否则将启动失败):
***********************************************************************************************************************************************