前言
VisionMaster(后简称VM)作为一款功能强大的工业图像算法平台,可对工业中遇到的各种图像进行处理,同时拥有性能强大的算子以及丰富的教学例程,作为图像处理的通用平台是非常不错的选择。但Vision Master软件依旧有不足,就是难以配置复杂或定制化的图形界面,故需要结合其他软件联合编程开发。因此,VM同步推出面向对象编程的平台SDK(Software Development Kit)开发。VM SDK开发理念是以极少的代码实现视觉软件的集成开发,从而降低视觉开发人员对视觉处理逻辑代码的维护成本。本文将详细介绍如何使用VM SDK联合C#二次开发。
一、VM SDK(4.2版本)介绍
VM算法平台和VM SDK的区别
VM算法平台是海康机器人自主开发的机器视觉软件,致力于为客户提供快速搭建视觉应用、解决视觉检测难题的算法工具,能满足视觉定位、尺寸测量、缺陷检测以及信息识别等机器视觉应用。
VM SDK是基于VM算法平台中的方案、流程和模块工具等进行对象级封装的二次开发工具包,用户可通过VM SDK提供的方案、流程和模块工具中各个对象的功能接口进行相应的数据交互与运行控制。同时提供相应的流程配置控件、参数配置控件、渲染控件、全局工具控件以及前端运行界面控件等,方便进行方案编辑、参数配置以及渲染展示,便于灵活进行开发,并扩展机器视觉应用。VM SDK在安装VM软件后会同步安装在安装路径下的Development文件夹下,并提供了开发文档及丰富的二次开发示例。
二、开发步骤
VM SDK开发的载体是方案(VmSolution),且同一台电脑同一时刻只支持一个二次开发进程运行,因此其二次开发是都是围绕VmSolution这个单例开发的,大概开发思路如下图(参考VM二次开发文档)所示:
2.1 方案加载
VM二次开发方案加载: 方案后缀为sol(一般建议在VM软件中创建好算法方案,在二次开发中调用),路径为绝对路径。
VmSolution.Load(“方案路径”);
加载完成后就可以对方案进行操作了,当然VM SDK也提供了用来显示方案的控件(VmProcedureConfigControl 流程配置控件和VmMainViewCongfigControl 主界面控件),无需绑定,只要界面中有这两个中任意控件,加载完方案后会自动绑定显示,如图所示为实际加载效果。
2.2 参数修改
VM二次开发为修改算法参数提供了两种方式:
2.2.1 方式1: 用自带的参数配置控件( VmParamsConfigControl 参数配置控件、VmParamsConfigWithRenderControl 参数配置带渲染控件)调参。
控件绑定模块代码示例:
IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
vmParamsConfigWithRenderControl1.ModuleSource = circleFindTool;
绑定完成后,控件就会自动填充当前模块的参数配置信息,然后进行修改即可(注意这里修改的参数并不会实时保存到方案文件里,需要调用方案保存接口才会保存)。
2.2.2 方式2: 调用工具类的模块参数对象(ModuParams)提供的接口或Public属性(可以在开发文档中查阅、也可以在VS中进入相关参数类的定义中进行查阅)来修改。示例代码如下:
IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
circleFindTool.ModuParams.RadNum = 10;
2.3 流程执行
VM算法执行方式有多种:二次开发仍然支持VM中配置的硬触发和通讯触发,同时提供了Run接口来支持软触发。软触发示例代码如下:
VmSolution.Instance.Run();
上述的方案Run接口会触发所有流程同时执行一次,当然也提供了单个控制流程/模块执行的方式,需要先实例化需要Run的流程/模块对象,然后调用该对象的Run接口即可触发流程/模块执行,示例代码如下:
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
vmProcess1.Run();
var circleFind = (IMVSCirrleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
circleFind.Run();
2.4 结果获取
2.4.1 渲染结果获取:
方式1: VM SDK提供了渲染控件(vmRemderControl),可以通过给该控件直接绑定流程/模块对象资源来实现相应对象显示设置配置的渲染。示例代码如下:
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
vmRenderControl1.ModuleSource = vmProcess1;
//绑定模块渲染结果
Var circleFind = (IMVSCircleFindModuTool) VmSolution.Instance["流程1.圆查找1"];
vmRenderControl1.ModuleSource = circleFind;
需要注意的是:这里的渲染绑定是动态绑定,只需在流程/方案执行前绑定一次即可,后续流程/方案运行时渲染界面会实时更新对应绑定对象的渲染结果(对应的是模块/流程的显示设置信息:图像、形状信息和文字信息)。
方式2: 自己获取图形或文字数据在VM SDK提供的渲染控件上绘制。示例代码如下:
//设置图像
var imageSource = (ImageSourceModuleCs.ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
vmRenderControl1.ModuleSource = imageSource;
//自定义图形
VMControls.WPF.LineEx line = new VMControls.WPF.LineEx();
line.StartPointX = 100;
line.StartPointY = 100;
line.EndPointX = 300;
line.EndPointY = 300;
line.StrokeThickness = 10;
vmRenderControl1.DrawShape(line);
//自定义文本
VMControls.WPF.TextEx text = new VMControls.WPF.TextEx();
text.Content = "欢迎使用VM4.2二次开发!";
text.FontSize = 30;
text.Position = new System.Windows.Point(100, 100);
text.Height = 100;
text.Width = 100;
text.Stroke = "#FF0000";//设置颜色
text.StrokeThickness = 10;
vmRenderControl1.DrawShape(text);
2.4.2 数据结果获取: 需要通过对应工具类的结果对象类获取。
方式1: 可以在搭建流程时将流程内的模块结果都绑定到流程的输出设置里,然后统一使用流程对象提供的结果获取接口进行获取。部分接口示例如下:
//通过流程获取结果
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
string ocrResult = vmProcess1.ModuResult.GetOutputString("out").astStringVal[0].strValue;
string ocrNum = vmProcess1.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
方式2: 通过每个工具类的模块结果对象(ModuResult)获取,示例代码如下:
//通过模块获取结果
IMVSOcrModuCs.IMVSOcrModuTool ocrTool = (IMVSOcrModuCs.IMVSOcrModuTool)VmSolution.Instance["流程1.字符识别1"];
string ocrScore1 = ocrTool.ModuResult.CharNum.ToString();
总结
本文递进式地介绍VM SDK的使用,同时VM SDK安装包里提供了大量能使我们快速上手的开发文档及示例Demo,用户也可以参考官方提供的开发资源,利用好这些资源基本能实现大部分的开发需求。
附开发资源路径:文章来源:https://www.toymoban.com/news/detail-453269.html
- 开发手册:VisionMaster4.2.0\Development\V4.x\Documentations
- 开发案例:VisionMaster4.2.0\Development\V4.x\Samples(…\C#\ApplicationDemo为新增的应用案例,包含定位引导、OCR识别和深度学习分类案例)
- V社区(VM开发者技术园地)链接:https://www.v-club.com/home
- 资料荟萃链接:https://one.hikvision.com/#/link/XcwZ3QdfwYzO8f6TqlI3 提取密码:kGHn(包含开发教程、软件Demo、讲解视频和问答集FAQ,无需注册,直接下载)
最后附上一张VM二次开发的案例效果图:
文章来源地址https://www.toymoban.com/news/detail-453269.html
到了这里,关于【VisionMaster SDK开发】第三讲 C#二次开发介绍及应用案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!