1.背景
之前以为既然工业相机(usb3_vison,gige)使用了同样的通讯标准,那应该可以使用同样的sdk。但是事实上,并不行,不同厂家的同样通讯标准的相机,并不通用,比如,我想用Basler的Pylon打开海康威视的相机,打不开。
2.别人是如何实现通用库
在github看到了一个库:【Harvesters】
根据它的资料介绍,貌似可以支持好多相机
【GenTL Producers】
但是,为啥会涉及各个相机的SDK?然后再翻一下它的资料
【I pointed out a CTI file but Harvester says the image doesn’t exist (Part 2)】
也就是说,本质上,这个GenTL producer (.cti)文件,是个提供了GenICam Transport Layer(GenTL)接口的动态库文件,但是,这个动态库文件是依赖厂家自身的sdk的。因此,还是得在对应的系统中安装对应厂家的sdk。而且,既然是动态库,那么,在不同的平台(Windows、Linux)的cti文件,哪怕是同一个厂家的文件也必定是不通用的了。
3.*.cti文件本质上是个动态库的证明
我这里有个海康的cti文件,然后用vs自带的动态库函数查看器dumpbin.exe看看
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x64\dumpbin.exe" /exports MvProducerU3V.cti
可以看到一些GenTL函数:
总结
难道说,这个GenICam协议,是软件层的协议,而不是通讯链路层的协议?
后面继续对比一下【Aravis】 、【Harvesters】这两个库,弄懂了他们的区别,应该就知道GenICam真正是个什么东西。
就目前来说,还是Aravis比较适合我。