工业相机SDK接口使用总结
相机调用 :
我们利用相机采集图像,先要对相机进行相关参数设置及控制,这需要对相机的SDK包比较了解,一般相机厂家都会提供相机SDK,其中包含用户手册和调用Demo,这些都大大降低了调用门槛,提高了二次开发用户的效率。目前用过Balser、海康、大华等相机,其实都是一个套路,都是按照下面几个步骤进行的。
1)枚举设备
2)创建句柄
3)打开设备
4)开始抓图
5)获取一帧并保存图像
6)停止抓图
7)关闭设备
8)销毁句柄
相机同步:
若是开发过程中用到双目或者多目的话,则需要外接同步触发器或者外部触发信号,通过相机同步触发线来实现同步问题。以实际应用过的Basler acA1300-200uc为例,其相机同步触发线具体类型如下:
1 -—— +12 VDC 红
2 —— I/O Input 1 黄
3 —— VCC(加电阻) 蓝
4 —— I/O Out 1 绿
6 —— DCcam Power GND 黑
0000—— I/O GND 白
1.工业相机编程模型和流程
2.工业相机SDK接口使用总结
3.Basler Pylon工业相机SDK的使用
4.Pylon 以实时图像采集讲解PylonC SDK使用流程
5.关于使用维视工业相机 SDK 采集图像的问题
6.工业相机SDK之opencv二次开发
工业相机中断响应如何操作?
当相机一帧采集完成后,自动跳转进入中断回调函数,这里分了两种中断回调函数。
种为简单的取Buffer->处理->放回。
第二种结合Windows的消息队列,在此处再给一个“处理队列”,给处理一个缓冲时间。
这里的处理包括常见的图像处理、计算和显示及RawData拼装为图像等用到Buffer的地方。
前面也说过,常用的是中断响应处理,除此之外,自己去查询Buffer填充状态并作相关同步操作在某些场合也会用到,这个请查询不同相机SDK给出的同步方案。
差不多所有的工业相机SDK都是这样的编程模型和流程,AVT 1394相机和Basler Camera Link相机和AVT GigE相机相关代码在笔者网站可下载,还有之前讲的Basler Pylon SDK相机编程,他们基本流程都是一样,恕不详述!
一、工业相机编程模型和流程
不同的工业相机提供不同的编程接口(SDK),尽管不同接口不同相机间编程接口各不相同,他们实际的API结构和编程模型很相似,了解了这些再对工业相机编程就很简单了。
DMA技术:
DMA是一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。
对于工业相机来说,当CMOS或CCD芯片曝光然后将数据转到相机缓存后,这时候DMA会负责将缓存中数据保存到硬盘上位置,正好满足相机高速大数据的传输。一般都会使用DMA来完成实时的数据采集和保存。
多数时候,DMA控制器存在各种接口的图像采集卡中,包括1394/GigE/USB/Camera Link等,这些采集卡有自己的时间控制单元完成和相机曝光的同步,并控制DMA的存取行为。
这里使用三个队列完成采集和处理同步。
DMA队列:
当CMOS或CCD芯片曝光然后将数据转到相机缓存后,这时候DMA会负责将缓存中数据写入到“DMA队列”头Buffer中。
准备队列:
一旦“DMA队列”头Buffer被填充完成,会被加到“准备队列”尾后,这时候会发送中断通知用户程序:当前又有一帧数据采集完成,您看着处理吧。
处理队列:
当用户接收到中断会自动跳转到中断函数中,使用GetFrame拿取“准备队列”头Buffer,然后加到当前用户程序“处理队列”尾,用户程序从“处理队列”头拿取Buffer处理完成后使用PutFrame将Buffer再添加到原始的“DMA队列”尾。
可以看到相机编程需要做三方面工作:
1.初始化操作
先初始化相机驱动Com环境,然后遍历得到当前的相机列表,根据相机ID或List 编号选择对应相机。
之后连接相机,先设置本次采集的相机参数(帧速、图像大小、缩放比等),然后是分配和注册当前DMA队列,这里有的是用户完成,有的是SDK完成。
之后先开启DMA逻辑等待相机采图,然后使相机开始工作采图,整个系统就按照之前工作流程运作起来了,许多SDK将“开启DMA”和“相机开始工作”合并为“开始采集”。
2.结束操作
先停止相机工作再关闭DMA逻辑,许多SDK将“开启DMA”和“相机开始工作”合并为“结束采集”。
然后清理DMA队列,和分配时对应,这里有的是用户完成,有的是SDK完成。
后断开相机并清理工作环境。
工业相机是机器视觉系统中的一个关键组件,其本质的功能就是将光信号转变成高清工业相机为有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的不仅是直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。工业相机又俗称摄像机,相比于传统的民用相机(摄像机)而言,它具有高的图像稳定性、高传输能力和高抗干扰能力等,目前市面上工业相机大多是基于CCD或CMOS芯片的相机。
随着科技的日渐成熟,工业相机得到了飞速发展。近几年国外的工业相机厂商快速崛起,成为机器视觉领域的,比较有代表性的有:basler相机、灰点相机等。下面我们来看一下工业相机的主要参数:
1.分辨率:是指该像元传感器对不同光波的敏感特性,一般响应范围是350nm-1000nm,一些相机在靶面前加了一个滤镜,滤除红外光线,如果系统需要对红外感光时可去掉该滤镜。
2.像素深度:这个参数也在一定程度上影响着图像质量的好坏。
3.帧率:这个参数是相机采取传输图像速率的一个重要的衡量标准,对于一般的面阵相机一般为每秒采集的帧数,对于大多数线阵相机为每秒采集的行数,这是选择工业相机时得考虑的的一个参数
4.曝光方式:不同的工业相机有着不同的曝光方式。线阵相机一般采用的是逐行曝光方式,面阵相机一般采用帧曝光和滚动行曝光,还有一些面阵相机才用的是场曝光。
5.像元尺寸:像元大小和分辨率共同决定了相机的靶面的大小。而相机靶面有对图像的成像质量有着很大的影响。一般情况下,像元的尺寸越小,越难制造,但是越小的像元成像的质量也就越高。
6.接口类型:不同的工业相机有着不同的接口类型。主要有GIGE千兆网、USB2.0、USB3.0、Camera Link1394A、1394B、等多种类型的接口
德国工业相机Basler被广泛应用于各种自动化设备上,依据相机CCD,CMOS和接口的差异有不同的系列,随着技术的,很多老的自动化设备上的相机开始出现各种故障,例如相机花屏,相机白屏,相机显示模糊,相机上电无反应,相机黑屏,找不到相机,相机没有图像,相机图像颠倒,相机显示安装错误,相机无法触发拍照等等故障,苏州优米佳维修是的工业相机维修公司,维修过的Basler工业相机客户来自汽车装配,机器人,半导体,医疗,食品饮料,交通和运输等等各个行业,很多可以是因为相机新品购买周期太长或者已经提产,或者即使购买了新品但是因为匹配性问题不得不选择维修Basler工业相机。而Basler售后服务部门在产品停产一定时间后不会提供售后维修服务。Basler工业相机维修是一门技术活,不能只图便宜,如果操作不当很可能导致相机故障扩大而无法修复,从而导致整台设备的故障,所以建议客户选择的相机维修公司进行维修。