描述

环境:VM4.0.0 + VS2015及以上

问题:有的用户在使用VisionMaster软件在开发视觉项目时,可能同时也使用HALCON,OpenCV等视觉算法库做一些图像的处理,并且希望能将HALCON等第三方算子集成到VM工具箱,能够在VM工具箱中拖拽出来,就像VisionMaster中的其他算法模块工具一样,可以通过弹出窗口配置运行参数,通过连线订阅其他模块传递的参数,设置ROI,通过图像窗口查看算法直接结果的渲染效果。实际上是可行的,VisionMaster是一个开放平台,可以接入第三方生态,这也是VisionMaster的一大亮点。这里以封装HALCON的动态阈值算子Dyn_Threshold来举例说明如何集成第三方算法库中的算子到VM工具箱中。

解答

1 开始之前的准备工作

在编写自定义算子之前,首先必须了解以下几个概念:

1.1 VM软件中所有的算法模块工具的参数调试界面都是依赖XML文件,VM软件在启动时会在加载工具的XML配置文件,根据XML配置文件配置的输入输出参数来呈现用户界面。每个算法模块的XML配置文件存放在VM安装目录下的Module(sp)文件夹内,例如,以高精度匹配为例,XML配置文件存放在下面的目录:(打开XML文件夹的快捷键方式:在VM中选中模块后,点击Ctrl+m) C:\Program Files\VisionMaster4.0.0\Applications\Module(sp)\x64\Location\IMVSHPFeatureMatchModu,其中Location是表示在工具箱的定位工具组。

1.2 算法模块的输入输出是由基础的数据类型组成,例如Int,Float,string, bool, enum类型等。

对应的在该模块的XML文件中,是由XML的树形节点来描述的。

在XXXAlgorithmTab.xml(XXX指代模块的名称)文件中的Tab_Run_Params(模块运行参数)中可以找到对这些运行的参数的描述。如下图所示:

事实上,我们并不需要非常清楚XML配置文件中的每一项对应界面上哪些元素,才能开发出自定义算法模块,我们只需要了解一个事实:XML配置决定界面上显示的内容。所以VM开发组给我们提供了一个便捷的工具来配置工具模块的输入输出配置。这个工具在VM软件工具菜单下可以找到。

1.4 集成自定义算法模块需要完成3个工作

  1. 通过自定义模块生成工具生成界面

  2. 生成自定义算法模块的界面需要用到C# DLL

  3. 生成自定义算法模块的算法流程需要用到的C++ DLL

    定义好输入输出之后,执行生成XML,生成C++工程,生成C# 工程这3步,就初步完成了准备工作,执行了上面3个步骤,应该会生成以模块名字命名开头的3个文件夹,例如:

    2 举例说明

我们集成一个Halcon中的算子DynThreshold到VM的图像处理工具箱中,DynThreshold算子的定义如下:

DynThreshold(

HObject inputImage,

HTuple darkLight,

HTuple maskWidth,

HTuple maskHeight,

HTuple offset,

HTuple minArea,

HTuple maxArea,

HTuple *area)

由于输入图像可以订阅VM流程中的图像源模块,用户输入的ROI可以从界面交互获得,所以它的输入对应在VM中的输入如下:


对应在VM中的输出:

第一步:根据上面的定义得输入输出,使用AlgorithmXMLGenerator工具生成XML文件夹,如上图1-6所示。接着生成模块参数界面的C#工程和模块算法流程的C++工程。生成工程之后会有以模块名称为前缀的3个文件夹 ,如上面图1-7所示。这3个文件夹,其中,DynThreshold文件夹是需要用户最终拷贝到VM的Applications\Module(sp)\x64目录下的模块类别下。

以Cs开头的文件夹,是生成界面相关资源的C#工程,我们只需要打开其中的工程,编译其中的以模块名称命名的工程即可(注意:选择Release模式,只需要编译以模块名称命名的工程,不需要编译工程名+Control的那个工程)。如图2-1所示:

编译完成后,将生成的模块名称+cs.dll和模块名称.pdb文件拷贝到DynThreshold文件夹中。

第二步:编写C++工程,工程是上一步自动生成的C++工程,工程名是Proj_+模块名称命名,就本例来说,就是Proj_DynThreshold工程。建议使用VS2013来编写这个工程。因为VM中使用的算子基本都是msvc2013编译器。(注意:选择Release、x64,禁用优化。)针对本例是VM联合Halcon开发算子模块,所以需要在项目中配置halcon环境,如附加包含目录,附加库目录,附加依赖项。
这一步是重头戏,算子封装的绝大部分工作量就在这一步:

不过幸运的是,开发者并不需要从头到尾了解一遍工程的源代码结构,源码的各个部分的作用,集成算子的开发者只需要关注一个Process函数即可,封装算子的代码其实就是将Process具体的实现一遍。

开发者需要获取的输入就在modu_input 中,比如我们要获取定制模块的订阅的图像源的图像,将此图像原始字节数据转成Halcon可以处理的HImage 格式,实现的代码如下所示:


我们从modu_input 拿到了Halcon可以处理的图像HObject类型的HImage, 那接着用Halcon算子处理算法流就可以了。比如使用Halcon的动态阈值,典型的代码如下所示:

第三步:如何获取模块的输入。自动生成的C++工程已经帮我们生成好了类库的成员变量,例如,以本例来说,定义的输入就是成员变量:


我们在Process中可以直接使用,当用户界面设置了某个参数,比如说最小过滤面积,通过参数配置界面设置成了1000,那么当模块执行的时候,m_nMinArea的值就会是1000。无需开发者写代码从界面去拿,这一切都是自动的。

当然这其中并没有什么高深复杂的内部机制,实际上,获取输入参数和设置输出参数,都是靠VM代理模块在后台去执行GetParam和SetParam做到的。GetParam和SetParam的代码清楚的显示了,它是如何做到这一点的。

这里摘取其中的代码片段,如下:

获取输入参数

设置运行参数

示例代码中“MaxArea”等,就是模块的XML文件中描述的算法模块的输出名称,也是这个模块的结果输出Tab页中显示的结果名称。

如果要一次性设置多个输出,可以使用VM_M_BatchSetXXX(XXX代指数据类型)

让我们举例说明,例如我有一个结果输出,输出的是Blob得到的最小外接矩形结果,显然这个结果是包含多种结果的,我们就需要用到VM_M_BatchSetFloat这个接口函数,示例代码如下


示例代码中“BlobResultRectX”等,就是模块的XML文件中描述的算法模块的输出名称,也是这个模块的结果输出Tab页中显示的结果名称。

3 调试方法

将生成好的算法模块DLL拷贝到DynThreshold文件夹中,再将DynThreshold文件夹拷贝到VM的Applications\Module(sp)\x64目录下的模块类别下。我们运行VisionMaster软件,在VM软件中加载用户自定义的模块之后,可以在VS中附加进程,这个进程是“VmModuleProxy”,附加了进程后就可以设置断点调试了。

如下图所示:

接着选择VmModuleProxy进程

海康visionmaster开发笔记10-集成HALCON第三方算子到VM工具箱的方法相关推荐

  1. 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全:开发技术集合( ...

  2. 海康接口开发之访客登记(一) 获取人员信息

    前言 以下基于海康ISC平台: 先说思路:通过接口获取人员信息(主要是获取访客接口需要的信息),填入到访时间.来访组织等来访信息后,通过接口抛到ISC平台. 海康接口开发之访客登记(一) 获取人员信息 ...

  3. 海康VisionMaster与西门子PLC1200进行S7通信

    通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机 ...

  4. 海康接口开发之访客登记(二) 推送访客信息

    前言 海康接口开发之访客登记(一) 获取人员信息 海康接口开发之访客登记(二) 推送访客信息 一.步骤 感觉这里没什么好说的,就是获取些控件值,序列化一下到json然后往接口地址推送,直接贴代码吧=. ...

  5. 海康威视摄像机的实时读取篇二(海康SDK开发环境配置)

    利用海康SDK+OpenCV,实现海康摄像机图像实时读取.篇二介绍海康SDK开发环境配置及相关注意事项. 海康SDK开发环境配置 海康SDK开发环境配置具体步骤类似篇一(http://blog.csd ...

  6. 嵌入式linux 海康 sdk,海康相机开发(1) SDK安装和开发

    1.1 安装包获取 从官网下载最新版本的MVS安装包,支持Windows xp.Windows 7.Windows 8.Windows 10的32和64位系统.安装过程默认即可. 官网下载链接:htt ...

  7. 海康SDK开发实时读取摄像头图像

    1.概述 最近项目需要实时读取网络摄像头,并对图像做处理,参考网络资料和海康SDK开发文档,文档中给了两种方式(1)SDK直接解码显示(2)实时流数据回调,用户自行处理码流数据(开发文档上以软解显示为 ...

  8. 学习海康VisionMaster之模板匹配

    一:必须下定决心,学习一个新的图像处理算法 学习了7,8年的HALCON了,很好用,就是贵,用不起,遇到成本瓶颈了. 现在做个项目不容易啊,有机会学习海康的VisionMaster,还不错,哈哈~~ ...

  9. vue+js+海康web开发包接入海康威视摄像头

    一.登录海康开放平台下载web开发包,下载需要先登录海康账号,没有的需先注册一个. 海康开放平台web开发包下载地址:https://open.hikvision.com/download/5cda5 ...

最新文章

  1. SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
  2. 经典C语言程序100例之六五
  3. C++学习_第1章_从C到C++
  4. vue 循环遍历 搜寻资料
  5. mysql 查询语句_MySQL查询语句之复杂查询
  6. 华为Mate 30系列发布日期、地点再曝光:9月19日 慕尼黑见?
  7. 计算机视觉︱图像取证技术
  8. Illustrator 教程,如何在 Illustrator 中更改角色的姿势?
  9. 【keras/Tensorflow/pytorch】Conv2D和Conv2DTranspose详解
  10. ContextCapture(smart3D)10.20.下载安装教程
  11. java ssh 连接mysql数据库_Java通过ssh连接访问数据库
  12. 编译原理 实验2《预测分析法设计与实现》
  13. java将Word或Excel转换成PDF
  14. Android手机怎么找回微信好友,五种实用方法 安卓微信怎么恢复好友
  15. win7计算机共享用户名和密码,Win7共享提示用户名密码错误怎么办
  16. 汇编学习软件推荐 - 汇编金手指
  17. 抓不到作弊学生就集体扣分!澳洲国立大学计算机系300多人被降分停课
  18. 计算机信息技术与幼儿教育论文,信息技术应用于幼儿教育论文
  19. 通过随机森林的例子解释特征重要性
  20. 求Ackerman函数的值

热门文章

  1. 如何生成一个二维码?
  2. x265线程池机制和并行编码机制分析
  3. 第4章 点云的滤波与分类 4.1点云数据的过滤
  4. 健身行业的微信公众号图文应该怎样排版?
  5. DB2 SQL消息查询
  6. 《Electron 开发》 环境配置和Helloworld
  7. MATLAB画NCEP风场
  8. 鲁兴海:英国皇室裁缝合作伙伴--地方--人民网
  9. 揭晓计算机的神秘面纱——计算机是如何工作的(一)
  10. python已知两条直角边求斜边,Python实现“已知三角形两个直角边,求斜边”