深度解析:机器视觉工业相机丢帧现象原因

机器视觉顾名思义,核心在于视觉,工业相机的采集数据全程的无接触模式,不会对产品造成二次伤害,保证了产品的质量的同时,又实现了安全要素。

 

当挑选工业相机,选择接口时我们应该问下,该款工业相机的数据接口“USB”或“网口”的传输速率是否能满足相机图像采集的数据传输速度?会不会因为该传输接口的传输速率不足而导致相机频繁丢帧?接下来我们依次从数据传输过程所涉及的环节来分析可能丢帧的原因,这其中涉及到计算和匹配相机采集图像的数据传输速率。

 

一套完整的视觉检测系统主要包含图像采集部分和图像分析处理部分,而图像采集部分主要由工业相机、工业镜头以及机器视觉光源、数据传输通道。

 

在相机中,电子设备对性能的影响要小于传感器本身。

有些摄像机可能具有良好的图像分辨率且灵敏度较弱,由于传感器的灵敏度较弱而几乎没有热噪音。

 

另一方面,其他相机则需要高灵敏度,才能在弱光条件下产生可见光图像,而没有异常的分辨率,但由于传感器灵敏度高,因此存在有热噪音的风险。

 

影响摄像机性能的因素
  • 感光度(ISO)
  • 分辨率(以像素为单位)
  • 速度(以每秒帧数为单位)
  • 热噪音(来自传感器)
  • 空间要求

 

工业相机丢帧与工业相机所采用的传输接口所能承载的数据通量密切相关,不管是USB,还是1394、GigE、或者是cameralink,与数据传输,数据处理相关的环节都可能是丢帧的原因,比如设计不良的驱动程序或工业相机硬件,线路,带宽,这将对视觉检测造成不稳定,难以预知的结果。

 

通信接口

 

在通信接口方面,它们传输数据的速度越来越快。使得可以长时间共享高分辨率图像而又不损失质量,同时又保留在工业环境中。未来几年的趋势是无线传输数据,即使用Wifi。每种接口都有优点和缺点:

 

–USB 2.0 :这种较便宜的系统需要通过电缆连接到摄像机(最长可以达到5米)。在理论传输量高达480mbps的情况下,该系统对于数据传输来说可能是不可靠的。现在已被USB 3.0取代

–USB 3.0:此接口与USB 2.0具有相似的功能,但具有更高和更可靠的传输量。

 

–CameraLink:此通信接口具有非常高的传输量(高达6 Gbits/s),非常适合高分辨率。价格较高。 电缆长度可以达到10米。

 

–GigE(或Giga以太网):这种比较便宜的通信接口的传输量高达1 Gbit/s,如果您需要较长的电缆长度(它可以达到100米),就可以选择这种接口。

 

–PoE(或以太网供电):它的传输量可达1 Gbit/s,其主要优点是可以在进行数据通信时为摄像机供电。

 

–VGA(视频图形阵列):VGA卡考虑到640×480的分辨率。它们可以传送多达256种颜色。这个接口开始消失了。

PCIe插槽带宽

由于大部分的网卡或者USB 3.0扩展卡都是插在PCIe插槽上的,那我们先了解下与PCIe插槽有关的信息及传输速率。

 

PCI-Express(Peripheral Component Interconnect express)是一种高速串行计算机扩展总线标准,属于高速串行点对点双通道高带宽传输。根据PCIe插槽的传输通道数,PCIe插槽的常见规格可分为,PCIex1,PCIex4,PCIex8,PCIex16四种插槽,如下图。

 

 

不版本的各个PCIe插槽的数据传输速率也不一样,如下图。

 

与基于半双工共享并行架构而制定的PCI以及AGP规范不同,PCI-E规范是基于全双工点对点串行架构制定的,而且还支持热拔插,其中全双工代表每个PCI-E通道在同一周期内可以实现数据的双向传输;点对点意味着每个PCI-E设备都是独立连接,不需要向整个总线请求带宽;串行传输则可以让其信号速率轻松达到GT/s(相当于GHz)的级别。

 

目前PCI-E规范已经发展出5个大版本,每一次大版本的进化,都能带来相比上一版本近乎于翻倍的带宽。第一个PCI-E的正式规范也就是PCI-E 1.0诞生于2002年,其信号速率为2.5GT/s,采用8b/10b编码方式,单通道单向带宽达到250MB/s,16通道双向带宽为8GB/s。该规范随后还发展出PCI-E 1.0a和PCI-E 1.1版本,虽然细节上有不少改进但是带宽并没有改变。

 

PCI-E 2.0规范则在2007年正式发布,其相比于PCI-E 1.x规范最大的变化是信号速率翻倍至5GT/s,因此其带宽也跟随着一起翻倍,单通道单向带宽为500MB/s,16通道双向带宽为16GB/s。此外PCI-E 2.0规范还将对应插槽的供电能力翻倍至最高150W的水平,但出于对兼容性以及主板供电压力等多方面的考虑,最终无论主板厂商、显卡厂商又或者其它PCI-E设备的厂商,在产品开发时都是按照PCI-E 1.0规范的供电要求也就是75W执行的,供电需求高于75W者一律配置外接供电,这个行业规则一直沿用至今。

 

PCI-E 3.0规范2010年正式发布,相比PCI-E 2.x规范不仅信号速率提升至8GT/s,而且编码方式也改成了更高效的128b/130b模式,因此单通道单向带宽依然实现了接近翻倍的提升,达到985MB/s的水平,16通道双向带宽高达31.5GB/s。

 

PCI-E 4.0再一次实现了信号速率的翻倍,16通道双向带宽达到63GB/s的水平;而PCI-E 5.0在2019年公布正式版规范,带来的依然是翻倍的信号速率和翻倍的带宽,16通道双向带宽达到126GB/s。

 

比如PCIe 3.0版本的PCIex4的最大数据传输速率是3.938GB/s,也就是若是该PCIe的插槽上插的扩展网卡或者USB 3.0卡总的数据传输速率不能高于3.938GB/s,不然就有可能导致传输数据的丢失。

附:

PCIE相关概念:

传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。

 

GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。

 

Gbps —— Giga Bits Per Second (千兆位/秒)。GT/s 与Gbps 之间不存在成比例的换算关系。

 

PCIE带宽计算

PCIe 吞吐量(可用带宽)计算方法:

吞吐量 = 传输速率 *  编码方案

 

例如:PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;但这并不意味着 PCIe 2.0协议的每一条Lane支持 5Gbps 的速率。

 

为什么这么说呢?因为PCIe 2.0 的物理层协议中使用的是  8b/10b 的编码方案。 即每传输8个Bit,需要发送10个Bit;这多出的2个Bit并不是对上层有意义的信息。

那么, PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4 Gbps = 500 MB/s 的速率。

以一个PCIe 2.0 x8的通道为例,x8的可用带宽为 4 * 8 = 32 Gbps = 4 GB/s。

 

同理,

 

PCI-e3.0 协议支持 8.0 GT/s, 即每一条Lane 上支持每秒钟内传输 8G个Bit。

而PCIe 3.0 的物理层协议中使用的是 128b/130b 的编码方案。 即每传输128个Bit,需要发送130个Bit。

 

那么, PCIe 3.0协议的每一条Lane支持 8 * 128 / 130 = 7.877 Gbps = 984.6 MB/s 的速率。

一个PCIe 3.0 x16的通道,x16 的可用带宽为 7.877 * 16 = 126.031 Gbps = 15.754 GB/s。

 

由此可计算出上表中的数据

网卡的区别

 

网卡根据最大的支持带宽不同,可以分为百兆网卡,千兆网卡和万兆网卡,十万兆网线。百兆网卡支持最大为100Mb/s带宽,即12.5MB/s,千兆网卡支持最大为1000Mb/s,即125MB/s,而万兆网卡支持最大为10000Mb/s,即1250MB/s。

 

网卡有分百兆,千兆和万兆,同样网线也是有分百兆网线,千兆网线和万兆网线。千兆网线适用千兆网络和百兆网络,一般为六类网线、超五类网线,而百兆网线只适用于百兆网络,为五类网线,六类线的传输频率远高于五类网线。


在百兆网络中,网线在传输网络信号的过程中,只运用到橙白-1,橙-2,绿白-3,绿-6,这4根线芯,也就是说即使其他4根线芯不用,在百兆网络下也能传输网络信号。而在千兆网络中,网线在传输网络信号时,是一定要运用到8根线芯的,否则达不到千兆网络传输的同时收发。

 

根据网线的外皮上有CAT5、CAT5E、CAT6、CAT8等等,意思为五类线,超五类线,六类线,八类线。其中,五类线属于百兆网络,超五类线、六类线为千兆网线,七类线为万兆网线,八类线属于十万兆网线。

 

 

 

如何计算图像采集所需要的带宽

 

 

应该如何来计算每秒钟我采集的数据大小,来确定图像采集所需要的带宽呢?

 

当考虑图像采集所需要的带宽时,可以根据相机的像素点数、每个像素点占用位数及相机帧率来计算该相机所需要的数据传输速率。我们需要考虑两种数据传输速率:瞬时速率和平均速率。下面就向大家来详细介绍这两种速率的概念以及他们的计算方法,同时在本文的最后为大家提供了一个案例。

 

瞬时数据传输速率

数据传输速率中最重要,最需要考虑的就是瞬时数据传输速率。它是指相机将数据流向采集卡的传输速率,它是由相机的像素时钟速率所决定的。如果该速率过高,采集卡就不能够将相机的图像及时有效地从总线上取走,导致缓冲区溢出的错误。

计算瞬时数据传输速率,需要知道:

• 像素深度 (bytes/pixel)*

• 相机的像素时钟速率 (in MHz)

• 拍数(The number of taps)

*10 & 12 比特的图像在内存中占据16比特的宽度。

 

使用下面的公式来计算瞬时数据传输速率:

瞬时数据传输速率 (MB/s) = 像素时钟速率(MHz) x 像素深度(Bytes) x 拍数

 

一旦我们知道瞬时数据传输速率,我们就可以判断我们的硬件是否能够应付图像采集的任务。如果图像采集卡的数据吞吐量大于瞬时数据传输速率,那么我们就不会得到缓冲区溢出的错误。

如果采集卡的吞吐量小于瞬时数据传输速率,那么我们就需要考虑板载FIFO的填充速率了。如果一帧图像还没有采集完成FIFO就已经溢出,我们同样会得到一个缓冲区溢出的错误,即便我们只是采集一帧图像。

 

使用下面的公式来计算FIFO的填充速度:

FIFO填充速度(MB/s) = 瞬时数据传输速率 - 采集卡总线吞吐量

我们同时需要知道从相机采集一帧图像所需要的时间。该参数会随着相机的帧速率而改变,但它是由相机的时钟速率来决定的:

帧时间 (s/frame) = 分辨率 / (拍数 x 像素时钟速率)

 

我们可以通过FIFO填充速率和帧时间来确定每帧图像所需要的FIFO大小:

FIFO大小 = FIFO填充速率 x 帧时间

 

平均数据速率

平均数据速率是指软件从相机接收一整帧图像的速率,它是由帧速率来决定的。如果像素帧太大而导致在指定的时间内数据不能从总线上传输到软件中,那么我们会得到一个采集超时的错误。

 

计算平均数据速率,你需要知道如下参数:

• 图像的分辨率

• 像素深度 (bytes/pixel)

• 帧速率 (Hz)

使用下面的公式来计算每秒钟采集的数据大小:

 

长 x 宽 = 分辨率 (像素)

分辨率 x 像素深度 = 字节数/帧

字节数/帧 x 帧速率 = 字节数/秒

注意: 该值应该在106 量级,或者MB/s。

 

案例1:

 

我要使用PCIe-1427图像采集卡来采集一个1280x1024 12-bit 的图像,帧速率为10 fps (frames per second)。我的相机速率为80 MHz,采集卡的接口为1x PCIe接口,采集时配置的拍数为2,我能够顺利的采集一帧图像吗?

 

注意:PCIe-1427板载的内存有16 KB,1x PCIe插槽最大的数据吞吐量为 200 MB/s.

 

计算瞬时数据传输速率:

80M pulses/s x 2 pixels/pulse x 2 Bytes/pixel = 320 MB/s

因为 320 MB/s > 200 MBs,所有我们需要将数据缓存到板载的FIFO上面。

 

计算FIFO的填充速率:

320 MB/s – 200 MB/s = 120 MB/s

计算帧时间:

(1280 pixels/line x 1024lines/frame) / (2 pixels/pulse x 80 pulses/s) = 8.2e-3 s/frame

 

计算所需的FIFO大小:

120 MB/s x 8.2e-3 s/frame = 984 KB/frame

因为所需要的FIFO大于板载的内存大小(984 KB > 16 KB),所以我们不能够有效的采集一帧图像,同时会在采集过程中得到一个缓冲区溢出的错误。

 

案例2:

不同的工业相机,在满帧采集的情况下,所需要的传输速率是各不相同的。下面以多款GigE相机对比选型表。

 

以黑白相机为例,每个像素点占8个位,也就是1个字节,则满帧采图的情况下,MV-CA050-20GM每秒传输的数据为2592×2048×1×22=116785152B即111.375MB。MV-CH120-10TM-F-NF每秒传输的数据为4096×3000×1×68=835584000B即796.875MB。所以两款黑白相机满帧采图的情况下的数据传输速度是111.375MB/s和796.875MB/s,对照上面的网卡类型,决定了这两款相机在满帧采图的情况下要用到千兆网口和万兆网口才能满足。

 

彩色像素点一般是由三个颜色来构成的,这里以RGB为例,RGB三个通道各占8个位,即各占1个字节,则一个彩色像素点要占3个字节,是黑白像素点的3倍,因此上述两款彩色相机在满帧的情况下图像数据的传输速度是334.125MB/s和2390.625MB/s。

 

所以,上述500万像素的彩色相机满帧采图的情况下用千兆网口的传输速率已经不能满足,必须上到万兆网口。

 

相机采集卡线路带宽综合分析

多少像素数可以满足实际需求?

摄像机越灵敏,即使在弱光条件下,图像也会越清晰。因此,图像的质量取决于摄像机的灵敏度和图像分辨率。像素数越高,图像就越清晰越精确。如果您想观察精确的细节,我们建议你使用分辨率超过100万像素的相机。还应该注意的是,H.264格式非常大。

 

另外,现在百万像素的摄像头已经变得非常普遍而且价格适中。

 

假如4颗上述500万像素的黑白相机同时接到一张PCIex4的千兆网卡上,该千兆网卡的PCIe接口是3.0版本,则4颗黑白相机同时满帧采图时的数据传输速率是111.375MB/s×4=445.5MB/s,而根据上PCIe 3.0版本PCIex4的数据的传输速率是3.938GB/s,完全可以满足4颗黑白相机同时满帧采图。

 

若是2颗上述1200万像素的彩色相机同时接到一张PCIex4的万兆网卡(假如万兆网卡的每个网口的传输速率可以达到2.5GB/s)上,PCIe插槽的版本是3.0,则两颗1200万彩色相机同时满帧采图时的数据传输速率时2390.624MB/s×2=4.667GB/s,超过了PCIe 3.0版本PCIex4的最大传输速率,因此两颗1200万像素的彩色相机同时满帧采像将会发生图像丢帧现象。

 

根据以上的例子,总结以下几点容易引起相机丢帧的情况。

 

相机丢帧的原因有以下三个

 

1、工业相机部分

图像传感器传送图像到相机上的USB芯片上,USB再传送给PC端,假如PC端系统太繁忙,来不及处理接收的图像,而图像传感器又继续传送新的图像数据,这时如果工业相机没有足够的记忆体缓存,就会发生丢帧现象。

 

2、视觉软件程序设计

视觉软件包括硬件驱动程序和图像处理,为图像计算所分配的内存空间,有无缓冲的机制,可以加大图像的缓存来加大缓冲的时间,另外多线程的设计好坏也会影响到处理速度。让程序运算有足够的空间来处理,在运作情况下,CPU的整体处理速度比图像进来的速度慢,如果缓存不够,接收的效率太低,工业相机又没有足够的缓存,就会构成丢帧的现象。

 

但这是系统掉资料,不是工业相机丢帧。在这种情况不管是用1394接口的工业相机,还是USB接口,又或者是GigE接口,任何接口的工业相机都会得到相同效果。

 

3、硬件包括PC系统部分及数据传输线路

硬件原因导致的丢帧,可能是因为数据带宽不足引起的,比如扩展网卡或者USB3.0卡都可能造成问题。

 

  • 相机网线达不到传输速率要求
  • PCIe插槽有问题,达不到标准速率。比如有的PCIe插槽可能是从主PCIe插槽扩展出来的,与主PCIe插槽共用一个PCIe插槽的带宽。
  • 又或者相机满帧采像的数据传输速率超过单个网口/USB3.0口的传输速度
  • 网卡/USB3.0卡所有通道满负荷工作超过对应PCIe插槽的数据传输速率

视觉魔法师

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐