分布式halcon服务:SkHalconService(二)两种服务调用的方式:RPC和BAT模式

勇哥注:

halcon是不支持远程算子访问的。更别提分布式访问。

它只能弄个监听tcp的死循环,然后跟据送进来的字符串进行case。

所以这里说的分布式halcon服务,指的是勇哥正在开发的一套开源软件:SkHalconService。


系列文章:

分布式halcon服务:SkHalconService(一)项目介绍

分布式halcon服务:SkHalconService(二)两种服务调用的方式:RPC和BAT模式


调用SkHalconService服务有两种方式:

(1)RPC模式

这一种是标准的请求响应模式,这类似于远程过程调用--调过程并且等待返回的结果,因此我称它为RPC方式。

当你使用C#的服务引用的时候,代理方法还可以自动生成异步方式,这样你调用服务的时候就可以异步等待,而默认是同步方式。

此方式调用效率最低,因为图标变量和region会转为byte数组在通信通道中传输。

(2)BAT模式

这一种方式是使用Lua脚本的方式,把脚本传给服务器后,所有的计算都放在的服务器端,最后你可以根据需要返回自己想要的图标变量、region、字符串信息。

BAT方式是速度最快的,也是推荐使用的方式。



Lua脚本的定义都在HalconOperator类的RunLuaScript方法里。

通过把C#定义的方法注册到Lua的方式,就可以得到你自己想要的”指令“。

下图是演示程序使用的Lua脚本:

image.png

因为Lua是完整的脚本语言,你可以使用选择、循环、变量。。。运用你的自定义”指令“来构建灵活的脚本程序。

如果你对Lua语法不熟悉,看勇哥下面的贴子:

Lua语法的代码演示

http://47.98.154.65/?id=2259


下面是RPC模式的调用示例:

HImageObj img = halcon.Readimage("d:\\printer_chip_01.png");
HRegionObj region= halcon.threshold(img, 128, 255);
HRegionObj connectRegion= halcon.Connect(region);
HRegionObj selectRegion=halcon.SelectShape(connectRegion, "area", "and", 19000, 40000);

在上面代码中,服务定义了HImageObj,它表示图标变量; HRegionObj,它表示region变量。

这两种数据类型实际上是对hlacon中的HObject类型的转换包装。

服务定义了这两种类型是为了能在网络中序列化为byte数组来传输,而直接使用halcon的HObject是无法序列化的。


RPC模式效率最低,就是因为每条指令,都有HImageObj和HRegionObj这些巨大的对象在网络中传输,极大占用了带宽,也因此限制了并发的数量。

而BAT模式就没有这种问题,它仅在批处理完成后,返回一次图标变量或者region变量,这是调用者想知道的结果信息。



项目地址:

https://gitee.com/netMarketing/skhalconservice  


本文对应的历史版本:4b40763e550524ae8733d49f6cfdd4195b3cd02f


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-07-11 21:44:26 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864