勇哥注:
halcon是不支持远程算子访问的。更别提分布式访问。
它只能弄个监听tcp的死循环,然后跟据送进来的字符串进行case。
所以这里说的分布式halcon服务,指的是勇哥正在开发的一套开源软件:SkHalconService。
系列文章:
分布式halcon服务:SkHalconService(一)项目介绍
分布式halcon服务:SkHalconService(二)两种服务调用的方式:RPC和BAT模式
(一)分布式halcon服务的特点:
1。多段式设备,一般配置多台电脑处理不同工位的视觉,这样每台电脑都得装一份halcon视觉程序。
采用分布式halcon服务后,只在服务端运行halcon,其它客户端不需要安装halcon,只是调用服务端的halcon算子。
2。服务端负责内存管理,客户端不再有内存泄露的烦恼
3。客户端不需要安装halcon环境,只需要调用分布式halcon服务的api,极大简化了客户端的代码复杂度。
4。客户端可以有多个,并且运行在不同的设备、不同的操作系统下(即客户端可以跨网络、跨电脑、跨设备),客户端可以并发调用分布式halcon服务。
5。分布式halcon服务可以支持两种工作模式:
一是RPC模式,它是请求应答方式进行api调用。
二是BAT模式,即脚本批处理方式,客户调把脚本发往服务端,脚本执行过程完全是在服务端,执行完成后回复处理结果给客户端。
6。分布式halcon服务可以支持集群,通过添加新的IPC来增强处理能力。
(二)分布式halcon服务的应用场景
适合使用halcon平台,低速、传统算法视觉处理应用的设备开发。
适合教学与实验的需求。
调用示例:
下面是客户端调用halcon服务端的代码。
客户端程序使用代理类halcon调用服务端的api,api设计成跟halcon的算子基本一致。
hdev.SetDraw(HDevelop.SetDarwEnum.margin); hdev.SetPart(1200, 1600); HImageObj img = halcon.Readimage("d:\\printer_chip_01.png"); hdev.DispImg(img); HRegionObj region= halcon.threshold(img, 128, 255); HRegionObj connectRegion= halcon.Connect(region); HRegionObj selectRegion=halcon.SelectShape(connectRegion, "area", "and", 19000, 40000); hdev.SetColor(HDevelop.DispColorEnum.red); hdev.DispRegion(selectRegion);
上面的代码等于下面的halcon代码。
那么,跟你直接使用halcondonet.dll的 HOperatorSet方式有什么不一样呢?
区别就是现在软件的模式是SOA(面向服务)方式,所有的halcon算子都放在了服务端运行。
而客户端可以跨编程语言(可以是C#,C++,java, Python等)、跨网络(包括互联网)、跨系统(可以是windows, linux, macos)、跨设备(可以是电脑、平板、手机等)。
项目地址:
https://gitee.com/netMarketing/skhalconservice

