用sdk开发相机需要驱动吗(一文带你了解工业相机SDK中的一些知识)
市面上的工业相机,basler、海康、大华、映美精、灰点、dalsa等工业相机品牌,每一家的相机SDK都不一样,但也有共同点,都使用标准协议开发,今天以海康的工业相机SDK为例,说明里面到底是什么。
目前机器视觉工业相机都是符合 自动化影像协会AIA(Automated Imaging Association) 图像传输的标准,比如常用的GigE Vision 、USB3.0 Vision、CameraLink等常见的图像传输标准都是AIA制定的,工业相机厂商如果不准守这些协议,那都不好意思拿出来了,肯定会被淘汰的。这些协议标准,规定了相机的图像数据是怎么样传输到到应用程序端的,在这里每个厂商就会开发相应的SDK进行图像取流。
标准协议的图标,来源于AIA官网
工业相机
我们先来认识相机,相机就是一块集成了CCD/CMOS芯片的电路板子FPGA,我们把相机看成是一个设备Device,FPGA里面运行了程序,FPGA工程师会写一份xml描述文件,在xml文件中描述了比如相机的硬件信息、设备控制、采集控制、数字信号控制、传输数据控制等。
xml文件是FPGA工程师和SDK工程师的连接桥梁。
SDK端做了什么?SDK端主要工作就是解析设备端xml描述文件,然后再通过AIA制定的标准协议发送数据了,比如在网口中,GigE Vision 是通过UDP发送图像包的,UDP比TCP传输快几倍,但UDP是面向无连接的,是不安全的,所以在协议中规定了重发包机制,当然实际的SDK会考虑更多的问题。
可以看到,每家厂商都是设备 SDK,真正厉害的是一个设备厂商的硬件能力,也就是FPGA的设计能力,同样好的SDK也很重要,稳定、高效是一块工业相机最基本的条件。
相机设备端
SDK端做的事
接下来我们看看相机的SDK方面的具体知识。
GenICamGenICam为工业相机提供统一编程接口,GenICam具有多个模块
GenICam
在开发中,我们不需要理解这一层,这层是SDK做掉了,主要是解析设备端的XML,读写寄存器操作FPGA。
比如,我使用海康机器人的MVS看图软件,下图右侧中的各种节点是一个相机XML描述文件,这个XML描述文件是通过GenICam解析过来的,比如在界面操作设置曝光,可以通过万能接口SetFloatValue(“Exposure”,100)来实现,SDK接收到这个值后通过XML中的寄存器操作FPGA,FPGA操作Sensor的这个过程。这界面的所有参数,是通过xml生成的界面
MVS
我们的设置参数,比如曝光、增益、心跳时间都是走的控制通道,然后把数据传输给设备端。
数据传输在这里主要是指图像数据的传输,比如GigE Vsion中走的是GVSP协议,SDK实现GVSP协议
比如我们软触发取流的这个流程是,SDK给FPGA命令,一旦有流了SDK接收到流数据,如果是回调方式,直接通过回调,如果是主动获取,需要在线程中一直GetOneFrame来进行取流。
我们去看GenICam和GigE Vision、USB3.0 Vision等协议标准,这些协议光文档就有几千页,不就是发个数据吗,为嘛要搞那一堆交互,还要去理解几千页文档,我可以告诉你,只要符合标准的,只要相机SDK厂商比较开放,那么他的SDK都是可以进行取流的,就比如,海康工业相机SDK是可以进行市面上任何一家符合标准协议的相机的取流。
basler相机通过海康SDK取流
可以看到,设备端符合标准,SDK端协议开发,那我就可以用你了,是不是方便了很多,但basler的SDK就没有那么开发了,只要自家的相机设备才能取流。
工业相机SDK取流流程
取流流程图
所有的工业相机取流的流程都可以归纳为上面的流程,枚举相机、连接相机、设置取流方式、设置参数、开始取流、停止取流、关闭设备。理解了这个流程,任何一家的SDK都不是问题。
SDK接口
正常情况下,工业相机都会提供C 、C、C#等接口,在这里,我倾向于使用C接口SDK,C接口的封装C#可以使用,所有,不需要去理解C 里面的一些其他的内容,比如你如果使用C ,有些相机为了做到兼容各种接口的,还有相机工厂类概念,所以,我个人更喜欢C接口方式。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com