【VM服务管家】VM4.2平台SDK_6.2 模块操作类

news2024/11/17 13:52:39

目录

  • 2.2.1 流程操作:通过流程或Group设置输入输出图像的方法
  • 2.2.2 模块操作:设置输入图像、参数和ROI
  • 2.2.3 N点标定:清空标定点、生成标定文件
  • 2.2.4 分支字符:控制调试模式开关的方法
  • 2.2.5 条件检测:条件检测模块设置范围的方法
  • 2.2.6 图像源:图像源模块输入图像的方法
  • 2.2.7 所有流程:获取所有流程对象的方法
  • 2.2.8 几何创建:绘制形状的方法
  • 2.2.9 模板匹配:模板匹配模块导入算子模型文件的方法
  • 2.2.10 图像源:通过SDK传入图像数据的方法
  • 2.2.11 流程触发:在相机回调函数里短时间多次触发同一流程报错的解决方法
  • 2.2.12 检测加密狗:检测加密狗有无的方法

2.2.1 流程操作:通过流程或Group设置输入输出图像的方法

描述
环境:VM4.2 + VS2013及以上
现象:如何在二次开发中设置流程输入输出图像
解答
在这里插入图片描述

打开流程的配置窗口,获取流程1的输出图像,将其设置为流程2的输入图像,虽然在VM中可以通过连线的方式实现,但也可以通过代码的方式实现,C#代码如下 。另外,通过Group设置输入输出图像也是调用同样的接口函数SetInputImage_V2()和GetOutputImageV2(),其中要注意的是,当用代码给流程输入图像时,流程中的其它模块的图像输入源需要订阅流程的图像参数。注意:Mat和Bitmap彩色图转流程输入时,Mat和Bitmap是BGR,流程输入图像是RGB,通道需要交换

C# 
VmProcedure process = (VmProcedure)VmSolution.Instance["流程1"];
InputImageData vmImageData = new InputImageData();
//获取流程1输出图像
ImageBaseData_V2 image =process.ModuResult.GetOutputImageV2("out2");
//设置流程2输入图像
VmProcedure vmProcedure = VmSolution.Instance["流程2"] asVmProcedure;
vmProcedure.ModuParams.SetInputImage_V2("ImageData", image);

问题根因
不熟悉二次开发设置流程输入图像的方法。

2.2.2 模块操作:设置输入图像、参数和ROI

描述
环境:VM4.2+ VS2013及以上
现象:在VM SDK二次开发中,如何设置指定模块的输入图像、模块参数及ROI区域?
解答
首先,我们需要知道,一个VM模块的输入包含几个部分:基本参数(图像输入、ROI区域)、运行参数,以圆查找为例,如下图所示:
在这里插入图片描述在这里插入图片描述

通过VM SDK二次开发,我们可以通过代码去修改指定模块的输入参数。注意:设置输入参数(基本参数),参数配置窗口界面不会显示所设置的参数,此时模块运行,参数永久有效,流程运行,参数一次有效;设置运行参数,参数配置窗口界面会显示所设置的参数,此时模块和流程运行,参数都永久有效
1、设置模块输入图像,以“圆查找模块”为例,首先,添加相应的命名空间IMVSCircleFindModuCs,实现代码如下:

C# 
Mat mat = Cv2.ImRead(path, ImreadModes.Grayscale); //调用OpenCv方法读取图像数据,这里的path为图片路径
InputImageData inputImageData = new InputImageData();//实例化一个输入图像对象
inputImageData.Names.DataName = "InImage";//只能使用默认名称InImage
inputImageData.Names.HeightName = "InImageHeight";//默认InImageHeight
inputImageData.Names.WidthName = "InImageWidth";//默认InImageWidth
inputImageData.Names.PixelFormatName = "InImagePixelFormat";//默认InImagePixelFormat
inputImageData.Data = mat.Data;
inputImageData.DataLen = (uint)(mat.Width * mat.Height);
inputImageData.Height = mat.Height;
inputImageData.Width = mat.Width;
inputImageData.Pixelformat = ImagePixelFormat.IMAGE_PIXEL_FORMAT
_MONO8;

IMVSCircleFindModuTool circleFindModuTool = VmSolution.Instance["流程1.圆查找1"] as IMVSCircleFindModuTool;//实例化指定的模块工具
circleFindModuTool.ModuParams.SetInputImage(inputImageData);//设置输入图像

2、设置指定模块运行参数,以“圆查找模块”为例,设置对象中ModuParams的属性,代码如下:

C# 
IMVSCircleFindModuTool circleFindModuTool = VmSolution.Instance["流程1.圆查找1"] as IMVSCircleFindModuTool;//实例化指定的模块工具
circleFindModuTool.ModuParams.EdgeThresh = 30;//设置边缘阈值为30

3、设置指定模块的ROI区域,代码如下。

C# 
IMVSCircleFindModuTool tool = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
RectBox rectBox = new RectBox(new VM.PlatformSDKCS.PointF(1000, 1000), 500, 500, 0);
tool.ModuParams.ModuRoiManager.RoiRectangle = rectBox;//代码设置ROI

问题根因
不了解VM SDK二次开发中模块结构,以及如何对其参数进行相应的修改。

2.2.3 N点标定:清空标定点、生成标定文件

描述
环境:VM4.2 + VS2013及以上
现象:VM二次开发如何设置对应的N点标定模块的清空标定点与生成标定文件的功能
解答

C#
//获取对应的模块实例
IMVSNPointCalibModuTool tool=(IMVSNPointCalibModuTool)VmSolution.Instance["流程1.N点标定1"];
tool.ModuParams.DoClearPoint();//清空标定点
tool.ModuParams.DoSaveFile(path);//根据路径保存标定文件
int i = tool.ModuResult.ModuStatus;//获取标定状态,1为成功,0为失败

问题根因
不熟悉模块的函数

2.2.4 分支字符:控制调试模式开关的方法

描述
环境:VM4.2 + VS2013及以上
现象:VM二次开发如何设置分支字符模块的调试模式
解答

C#
//获取对应的模块实例
BranchStringCpmLTool tool = (BranchStringCpmLTool)VmSolution.Instance["流程1.分支字符1"];
List<BranchStringItemParam> itemList = tool.ModuParams.GetBranchStrItemParamList();//获取所有分支
foreach( var item in itemList)
{
    item.IsDebugMode = false; //可根据需求将某一个分支关闭调试模式
}

问题根因
不熟悉分支字符工具及其接口。

2.2.5 条件检测:条件检测模块设置范围的方法

描述
环境:VM4.2 + VS2013及以上
现象:VM二次开发如何设置条件检测模块的范围值
解答
修改前:
在这里插入图片描述

执行代码:

//C#
//获取对应的模块实例
IfModuleTool tool = (IfModuleTool)VmSolution.Instance["流程1.条件检测1"];
//获取对应的检测项名称
IfItemParam item1 = tool.ModuParams.GetIfItemParam("int0");
IfItemParam item2 = tool.ModuParams.GetIfItemParam("float0");
//对检测范围进行修改
item1.MinValue = 0;
item1.MaxValue = 888;
item2.MinValue = 0;
item2.MaxValue = 999;

修改后:
在这里插入图片描述

问题根因
不熟悉条件检测工具及其接口。

2.2.6 图像源:图像源模块输入图像的方法

描述
环境:VM4.2 + VS2013及以上
现象:如何通过代码给图像源模块输入图像?
解答
图像源模块输入图像,除了在界面上操作来添加图像或图像文件夹,还可以通过代码的方式使得图像源模块可以通过本地输入图像,也可以通过SDK输入图像。

C#
ImageSourceModuleTool imageSourcTool = (ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
//通过本地输入图像,图像源类型为本地
imageSourcTool.ModuParams.ImageSourceType = ImageSourceParam.ImageSourceTypeEnum.LocalImage;
imageSourcTool.AddInputImageByPath("D:\\3.ProjectCode\\VM4.2\\VMTestB\\1.bmp");//添加图片
imageSourcTool.DeleteInputImageByPath("D:\\1.bmp");//删除图片
imageSourcTool.ClearAllInputImage();//清空图片
//通过SDK输入图像,图像源类型为SDK,通过SetImagePath接口或者SetImageData接口
imageSourcTool.ModuParams.ImageSourceType = ImageSourceParam.ImageSourceTypeEnum.SDK;
imageSourcTool.SetImagePath("D:\\3.ProjectCode\\VM4.2\\VMTestB3-2\\1.bmp");
imageSourcTool.SetImageData(imageBaseData);//参数类型为ImageBaseData

问题根因
不熟悉图像源模块输入图像

2.2.7 所有流程:获取所有流程对象的方法

描述
环境:VM4.2 + VS2013及以上
现象:如何获取一个方案中的所有流程对象,进而可以直接运行所获取的流程,或者获取流程名、流程ID等等。
解答
在VM4.0通过VmSolution.Instance.GetAllProcedureList()仅仅能或流程列表,下面是获取流程对象的接口:

c#
List<VmProcedure> procedures = new List<VmProcedure>();
VmSolution.Instance.GetAllProcedureObjects(ref procedures);
string name = procedures[0].FullName;
string id = procedures[0].ID;
procedures[0].Run();

问题根因
不熟悉如何获取流程对象

2.2.8 几何创建:绘制形状的方法

描述
环境:VM4.2 + VS2013及以上
现象:在几何创建模块中,VM二次开发如何通过代码绘制形状?
解答
VM4.2中几何创建通过代码的方式可以输入图像、点、直线、圆、矩形,注意仅当次执行有效。下面示例代码绘制直线。

C#
GeometryCreateCs.GeometryCreateTool geoTool = (GeometryCreateCs.GeometryCreateTool)VmSolution.Instance["流程1.几何创建1"];
Line line1 = new Line(new VM.PlatformSDKCS.PointF(500, 500), new VM.PlatformSDKCS.PointF(3000, 3000), 0);
List<Line> line = new List<Line>();
line.Add(line1);
geoTool.ModuParams.InputLine = line;

问题根因
不熟悉几何创建模块的接口。

2.2.9 模板匹配:模板匹配模块导入算子模型文件的方法

描述
环境:VM4.2.0 + VS2013及以上
现象:VM二次开发,高精度模板匹配模块如何导入算子导出的模型?
解答
安装20220902及后续补丁包,注册GAC后,在二次开发软件中可调用模板匹配模块的ImportSDKModelData(string[] strPaths)接口导入模型文件。示例代码如下:

C#
using IMVSHPFeatureMatchModuCs;
using VisionDesigner;
using VisionDesigner.HPFeaturePatMatch;

private string modelExportPathDefault = "HPPattern.hpmxml"; // 模型导出默认路径
private string[] modelExportPathList = new string[1]; // 本示例只有一个模型文件,所以数组长度设为1

// 高精度匹配算子建模,导出模型
CHPFeaturePattern cHPFeaturePatternObj = new CHPFeaturePattern();
cHPFeaturePatternObj.InputImage = cInputImg;
CMvdRectangleF cMvdRectangleF = new CMvdRectangleF((float)rect.CenterPoint.X, (float)rect.CenterPoint.Y, (float)rect.Width, (float)rect.Height);
var region = new CPatMatchRegion(cMvdRectangleF, true);   //true表示为ROI,false表示屏蔽区  region.Shape = cShapeObj as CMvdRectangleF;
cHPFeaturePatternObj.RegionList.Add(region);
cHPFeaturePatternObj.Train();
cHPFeaturePatternObj.ExportPattern(modelExportPathDefault);
modelExportPathList[0] = modelExportPathDefault;

// 模板匹配导入算子导出的模型
IMVSHPFeatureMatchModuTool iMVSHPFeatureMatchModuTool = (IMVSHPFeatureMatchModuTool)VmSolution.Instance[FeatureModuleName];
iMVSHPFeatureMatchModuTool.ClearModelData();  // 导入模型前,清空已有模型
iMVSHPFeatureMatchModuTool.ImportSDKModelData(modelExportPathList);  // 模板匹配模块导入算子导出的模型(定制接口,0902加入基线)

目前只有高精度模板匹配支持导入算子导出的模型,快速模板匹配、灰度模板匹配等模块暂不支持导入算子导出的模型文件。
问题根因
不熟悉模板匹配的相关接口。

2.2.10 图像源:通过SDK传入图像数据的方法

描述
环境:VM4.2 + VS2013及以上
现象:当图像源类型为SDK时, 可以使用SetImagePath接口或者SetImageData接口给图像源模块输入图像,那么如何使用SetImageData传入相机图像呢?
解答
1.确保图像源类型为SDK
2.使用SetImageData的参数类型可以为ImageBaseData,其中图像格式使用VMPixelFormat或ImvsSdkDefine的枚举(灰度图是17301505,彩色图是35127316),在VM4.0中使用的是ImagePixelFormat类型的枚举(灰度图是1,彩色图是2)。

C#
ImageBaseData imageBaseData = new ImageBaseData(imagedata, StImg.DataLen, StImg.Width, StImg.Height, VMPixelFormat.VM_PIXEL_MONO_08)
ImageSourceModuleTool imageSourcTool = (ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
imageSourcTool.SetImageData(imageBaseData);

3.当图像数据为彩色图像时,开启图像源模的输出MONO8使能,其他模块的图像输入则是图像源.灰度数据。
在这里插入图片描述

问题根因
不熟悉图像源通过SDK传图

2.2.11 流程触发:在相机回调函数里短时间多次触发同一流程报错的解决方法

描述
环境:VM4.0及以上+ VS2013及以上
现象:在二次开发中,如果在流程未执行完之前再次触发该流程会导致程序报错,该如何解决这一问题?
解答
由于在VM中同一流程的运行是同步的,因此当某一流程未执行完毕时再次执行该流程会出现报错现象,可以使用标志位在流程运行完成之后,再去调用下一次流程的运行。
如在相机回调函数中调用流程的Run接口,如果相机每两次回调间隔过短就会导致调用Run接口报错。回调中在调用流程执行接口之前使用标志位,使单个流程执行完之后,才触发流程的下一次执行。

C# 
bool flag=true;

//回调或者其他会导致流程未执行再次触发的函数
{
    if (flag)
	{
		flag = false;
		VmProcess1.Run();
		flag = true;
	}
}

问题根因
不熟悉流程自身同步运行的机制。

2.2.12 检测加密狗:检测加密狗有无的方法

描述
环境:VM4.2 + VS2013及以上
现象:如何在VM二次开发程序启动时,检测加密狗的有无?
解答
程序启动时,在Program.cs的Main()函数中通过捕获异常码来检测加密狗的有无。

C#
try
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
catch (Exception ex)
{
    VM.PlatformSDKCS.VmException vmEx = VM.Core.VmSolution.GetVmException(ex);
    if (null != vmEx)
    {
        string strMsg = "InitControl failed. Error Code: " + Convert.ToString(vmEx.errorCode, 16);
        MessageBox.Show(strMsg);
    }
    else
    {
        return;
 	  }
}  

问题根因
不熟悉如何检测加密狗的有无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GAMES101】02 Review Of Linear Algebra

1.点乘&#xff1a; 向量点乘 → 一个数值 点乘在图形学中的应用&#xff1a; 找到两个方向之间的夹角。找到一个向量投影到另一个向量上是什么样的。计算两个向量的方向&#xff08;是接近还是远离&#xff09;判定高光范围&#xff0c;从1&#xff08;重合&#xff…

【VM服务管家】VM4.2平台SDK_6.5 全局类

目录 2.5.1 全局相机&#xff1a;获取全局相机列表和设置相机参数的方法 2.5.1 全局相机&#xff1a;获取全局相机列表和设置相机参数的方法 描述 环境&#xff1a;VM4.2 VS2013及以上 问题&#xff1a;问题1&#xff1a;如何获取方案中所有的全局相机的连接状态&#xff0c;…

c++基础-分支语句

目录 if语句 if-else switch语句 if语句 在C中&#xff0c;if语句是一种分支结构&#xff0c;它允许程序根据条件执行不同的操作。可以使用if语句来检查一个条件是否为真&#xff0c;如果为真就执行一个语句块&#xff0c;否则执行另一个语句块。 if语句的语法如下&#xff…

自媒体平台图文创作建议和技巧

自媒体博主在自媒体平台进行图文创作时&#xff0c;需要注意哪些方面才能创造出更好的内容获得更多的关注呢&#xff1f;今天跟大家分享自媒体创作中的一些图文创作建议和技巧。 一、确定目标受众 首先需要明确自己要传达的信息和目标受众。要考虑读者的兴趣、需求和阅读习惯&…

2001-2021年全国30省就业人数数据

2001-2021年全国30省就业人数数据/各省就业人数数据 1、时间&#xff1a;2001-2021年 2、范围&#xff1a;包括30个省市不含西藏 3、指标&#xff1a;就业人数 4、来源&#xff1a;各省NJ、社会统计NJ 5、缺失情况说明&#xff1a;无缺失 6、指标说明&#xff1a; 就业人…

【Python入门】人生苦短,我用Python

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

10万字城市大脑一网统管分析平台及大数据平台建设方案(WORD)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 一.1.1.督查监管子系统 督察监管子系统是指通过独立的督察队伍&#xff0c;以日常督察、专项督察的方式&#xff0c;来检查运行效果。根据工作进度&#xff0c;工作中存在的…

【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ChatGPT常见问题及其解决方法汇总

好久没有更新过技术类的文章了&#xff0c;希望本篇文章能够对你有所帮助&#xff0c;今天这篇博客将会把ChatGPT注册中可能遇到的问题彻头彻尾的讲一下&#xff0c;创作不易&#xff0c;如果感觉有帮助的话就动动你发财的小手点个收藏点个赞吧。如有需要转载请附上原文链接&am…

mysql5.7以上的启动、停止、赋权命令

文章目录 1、启动mysql server2、查看初始密码3、本地登陆mysql4、修改本地root用户密码5、防火墙设置6、开启mysql的远程登录 1、启动mysql server systemctl start mysqld #启动程序 systemctl enable mysqld #开机自运行 systemctl status mysqld #查看状态…

浅谈WebGIS未来应用与技术发展趋势

前言 WebGIS&#xff08;Web GIS&#xff09;是一种基于Web的地理信息系统&#xff0c;它可以实现地理空间数据的查询、分析、管理和可视化。与传统的 GIS 相比&#xff0c;WebGIS 是通过浏览器实现客户端与服务器间的信息交流&#xff0c;成本降低&#xff0c;且界面友好&…

No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(上)》

《&#xff08;高项&#xff09;备考大全》【专项2】《案例分析 - 计算题》 1 题型全部概况2 时间管理2.1 关键路径法 CMP2.1.1 原理2.1.2 关键路径的基本问题2.1.3 题目7、题目6 - 正推、反推8、题目7 2.2 PERT&#xff08;计划评审技术&#xff09;2.3 活动排序网络图 3 成本…

CesiumForUnreal、UE5实现限高分析效果

文章目录 1.实现目标2.实现过程2.1 材质2.2 Widget2.3 运行测试3.参考资料1.实现目标 在UE5中基于CesiumForUnreal插件实现简单GIS分析功能中的限高分析效果,GIF动图如下: 2.实现过程 实现限高分析功能的方法可以大致分为两种,一种是修改3DTileset的材质;另一种是基于贴花…

gitee同一台电脑使用多个账号的问题

官方文档&#xff1a;https://gitee.com/help/articles/4238#article-header0 目录 一、通过 https / ssh 协议推拉代码二、通过 https 推拉代码但是存在多个账号的问题三、通过 ssh 推拉代码四、Git配置多个SSH-Key五、TortoiseGit客户端 一、通过 https / ssh 协议推拉代码 …

Eplan 部件库导入部件的方法

1. 部件宏文件如何下载 1.1 西门子部件宏文件下载 EPLAN 的部件库是可以更新的,一般元器件厂商会提供其部件文件,以 SIEMENS 为例 进入网站,点击EPLAN 的图标 https://www.automation.siemens.com/bilddb/index.aspx?lang=en 在订货号中输入所需部件订货号,点击搜索。点…

超快速搭建Vue3 + Vite + Cesium 开发环境

发现一个大神写的插件&#xff0c;使用非常方便 GitHub - nshen/create-cesium: &#x1f30f; Create blazing fast Cesium apps with no configuration.&#x1f30f; Create blazing fast Cesium apps with no configuration. - GitHub - nshen/create-cesium: &#x1f30…

leetcode刷题之有关树的算法

144.二叉树的前序遍历 方法一:递归 var preorderTraversal function(root) {let arr []const preorder root >{//递归的出口if(rootnull){return}arr.push(root.val)preorder(root.left)preorder(root.right)}preorder(root)return arr };方法二&#xff1a;迭代 使用栈…

Cell:癌症研究的下一个问题是什么?

人类对自身肿瘤发生和癌症进展的理解以及不同癌症类型的临床治疗在近年来发生了巨大的变化。然而&#xff0c;即使有这些进展&#xff0c;科学家和肿瘤学家仍然面临着许多挑战&#xff0c;从揭示其中的分子和细胞机制到治疗和生物标志物的开发&#xff0c;再到治疗后的生活质量…

【游戏逆向】《某某明月刀》BUFF及技能预判

为了提高游戏的可玩性&#xff0c;也为了提高外挂制作的难度&#xff0c;很多游戏对BOSS的技能伤害都设计的特别高&#xff0c;为了达到及时躲避的效果&#xff0c;我们需要对技能做预判。预判的方式有很多&#xff0c;比如通过收包的方式&#xff0c;这种方式判断的速度最快&a…

( 数组和矩阵) 667. 优美的排列 II ——【Leetcode每日一题】

❓667. 优美的排列 II 难度&#xff1a;中等 给你两个整数 n 和 k &#xff0c;请你构造一个答案列表 answer &#xff0c;该列表应当包含从 1 到 n 的 n 个不同正整数&#xff0c;并同时满足下述条件&#xff1a; 假设该列表是 answer [a1, a2, a3, ... , an] &#xff0…