使用VisionMaster4.2SDK联合C#进行二次开发入门
VMSDK联合C#二次开发

使用Vision Master SDK联合C#进行二次开发

Vision Master(后简称VM)作为一款功能强大的工业图形图像处理软件,可对工业中遇到的各种图像进行处理,同时还有功能强大的算子以及很全面的例程,作为图像处理的主程序是非常不错的。但是,Vision Master软件依旧有缺陷,就是无法做到复杂图形化界面的建立,故需要和其他软件联合编程才行。因此,VM同步推出了进行二次开发的SDK(Software Development Kit),VM SDK开发理念是以极少的代码实现图像算法的二次开发集成,从而降低视觉开发人员对视觉处理逻辑代码的维护成本。本文即介绍如何用VM SDK和C#进行联合开发。

1. Vision Master SDK4.2版本)介绍

VM算法平台和VM SDK的区别

VM算法平台是海康机器人自主开发的机器视觉软件,致力于为客户提供快速搭建视觉应用、解决视觉检测难题的算法工具,能满足视觉定位、尺寸测量、缺陷检测以及信息识别等机器视觉应用。

VM SDK是基于VM算法平台中的方案、流程和模块工具等进行对象级封装的二次开发工具包,用户可通过VM SDK提供的方案、流程和模块工具中各个对象的功能接口进行相应的数据交互与运行控制。同时提供相应的流程配置控件、参数配置控件、渲染控件、全局工具控件以及前端运行界面控件等,方便进行方案编辑、参数配置以及渲染展示,便于灵活进行开发,并扩展机器视觉应用。VM SDK在安装VM软件后会同步安装在安装路径下的Development文件夹下,并提供了开发文档及丰富的二次开发示例。

2. 环境配置

2.1新建工程:

2.1.1推荐VS2017新建工程(要求VS2013及以上)。

2.1.2生成框架选择.NET Framework 4.6.1及以上

2.1.3项目属性->生成页面【首选32位】去掉勾选。一般情况下新建工程默认是勾选的,需要把勾选取消掉,因为VM里部分算子模块只支持64位的。

2.2添加算子工具引用

VM SDK的算子工具没有封装成一个整体的库,而是单独分开封装的,这样虽然引用较为繁琐,但是能更加灵活地控制工具的引用,不失为一种优雅的解决方案。同时VM SDK4.2引入了全局程序集缓存(global assembly cache, GAC机制),作用是存放一些有很多程序要用到的公共程序集,如System.Data、System.Windows.Forms等,这样,很多程序就可以从GAC里获得程序集,而不需要再把所有要用到的程序集都拷贝到应用程序的执行目录下,减少了冗余,方便了开发使用。可以通过两种方式添加算子工具的引用。

2.2.1方式1:使用VM SDK提供的引用批导入工具,工具路径为VisionMaster4.2.0\Development\V4.x\ComControls\Tool\ImportRef.exe。首先需要选择新建工程的二级目录(工程配置文件的路径),然后选择需要导入的工具进行批量导入,具体操作步骤参考下图。

2.2.2方式2:直接右键项目引用去搜索VM对应的程序集进行引用,需要注意的是有两个必要的引用需要引用(VM.Core.dll和VM.PlatformSDKCS.dll),其它算子工具可以按需引用具体名称可以查看VM提供的开发文档。

2.3添加控件

VM SDK提供了丰富的控件供二次开发者使用,开发者可以使用这些控件实现更加灵活的界面布局设计,控件添加方法如下:

Ø 打开VS工具箱,【所有Windows窗体】鼠标右击,再点击【选择项】,弹出.NET Framework组件窗口

Ø 浏览VM4.2的安装路径文件夹:VisionMaster4.2.0\Development\V4.x\ComControls\Assembly,选择VMControls.Winform.Release.dll,添加后工具箱出现VM相关控件

工具箱中的控件如下所示:

•       VmFrontendControl 前端运行界面控件

•       VmGlobalToolControl 全局模块控件

•       VmMainViewConfigControl 主界面控件

•       VmParams 参数配置控件

•       VmParamsConfigWithRender 参数配置带渲染控件

•       VmProcedureConfigControl 流程配置控件

•       VmRealTimeAcqControl 实时取流控件(V4.2新增)

•       VmRenderControl 渲染控件

•       VmSingleModuleSet ConfigControl 独立Group控件(V4.2新增)

--------------------------------分割线--------------------------------------------

以下为正式开发过程

3.开发过程

VM SDK开发的载体是方案(VmSolution),且同一台电脑同一时刻只支持一个二次开发进程运行,因此其二次开发是都是围绕VmSolution这个单例开发的,大概开发思路如下图(参考VM二次开发文档)所示:

3.1方案加载

VM二次开发方案加载:方案后缀为sol(一般建议在VM软件中创建好算法方案,在二次开发中调用),路径为绝对路径。

VmSolution.Load(“方案路径”);

加载完成后就可以对方案就行操作了,当然VM SDK也提供了用来显示方案的控件(VmProcedureConfigControl 流程配置控件和VmMainViewCongfigControl 主界面控件),无需绑定,只要界面中有这两个中任意控件,加载完方案后会自动绑定显示。

3.2算法调参

VM二次开发为修改算法参数提供了两种方式:

3.2.1方式1:用自带的参数配置控件( VmParamsConfigControl 参数配置控件、VmParamsConfigWithRenderControl 参数配置带渲染控件)调参。

控件绑定模块代码示例

IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];

vmParamsConfigWithRenderControl1.ModuleSource = circleFindTool;

绑定完成控件就会自动填充当前模块的参数配置信息,进行修改即可(注意这里修改的参数并不会实时保存到方案文件里,需要调用方案保存接口才会保存)

3.2.2方式2:调用工具类的模块参数对象(ModuParams)提供的接口或Public属性(可以在开发文档中查阅、也可以在VS中进入相关参数类的定义进行查阅)来修改。示例代码如下:

IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];

circleFindTool.ModuParams.RadNum = 10;

3.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();

3.4结果获取

3.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 = "欢迎使用VM二次开发!";

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);

3.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();

4总结

多参考官方提供的开发文档及资源,基本上能实现大部分的开发需求。

附开发资源路径:

Ø 开发手册:VisionMaster4.2.0\Development\V4.x\Documentations

Ø 开发案例:VisionMaster4.2.0\Development\V4.x\Samples(..\C#\ApplicationDemo为新增的应用案例,包含定位引导、OCR识别和深度学习分类案例)

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

使用VM深度学习功能实现模型训练与图像检索功能

下一篇

【VM集成开源AI】深度学习算子模块封装

评论请先登录 登录
全部评论 0
Lv.0
2
关注
60
粉丝
6
创作
116
获赞
所属专题
  • VM4.2二次开发环境配置方法(入门必看)
  • Visionmaster4.2 + QT5.14.2 + VS2017二次开发保姆级避坑课程
  • 使用VisionMaster4.2SDK联合C#进行二次开发入门
  • VM二次开发视觉框架(C#)
  • 二次开发过程注意的点
  • 开发一个自己的VM模块(三)
  • 开发一个自己的VM模块(二)
  • 开发一个自己的VM模块系列一:模块详解
  • 【VM集成开源AI】深度学习算子模块封装
  • Vm算子CMvdImage图片生成方法,即IntPtr转byte[]和byte[]
  • Sauvola二值化处理在图像处理应用的优势介绍分析
  • “启智杯”设计大赛-一种模板匹配建模与识别控件
  • “启智杯”模板匹配控件的扇形掩膜实现方式交流
  • “启智杯”:IMvdImage类型转换为MFC的CBitmap类型
  • "启智杯":确定扇环外切矩形的方法
  • VM二次开发小技巧-增加十字辅助线
  • VM二次开发小技巧—快速匹配模板切换
相关阅读
  • 光伏
    十佳案例-光伏行业-光伏接线盒焊接定位引导及焊后缺陷检测案例
    浏览 3842
  • 光伏
    光伏前道AOI检测项目
    浏览 2676
  • 光伏
    应用案例|光伏行业-花篮硅片检测
    浏览 1543
  • 光伏
    光伏行业-丝网印刷定位案例
    浏览 701
  • 光伏
    光伏行业应用案例-镀膜AOI外观检测
    浏览 623

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器