一种低延时图像采集方法、装置及***
技术领域
本发明涉及图像采集领域,尤其涉及一种低延时图像采集方法、装置及***。
背景技术
随着社会的不断发展,图像采集***在许多行业领域中扮演着非常重要的角色,如军事、安全监控、工业视觉等领域。目前,用相关的集成硬件如DSP、MCU、FPGA等对视频图像进行采集处理具有实时性好、体积小、方便使用的优点。但是当对太阳观测时,或者其他对实时性要求比较高的场合,需要实时针对运动情况做出处理,此时需要将图像数据以最快的传输速度传输给PC主机,PC主机根据不同的情况做出响应。这就需要图像采集具有极低的延迟特性,并且图像数据不能在采集***中留有缓存。MCU是微控制器,主要用于控制***,工作频率比较低,对于图像的高速数据流不能及时处理。DSP主要是为快速实现各种数字信号处理算法而专门设计的具有特殊结构的微处理器,本质上同MCU一样都是串行执行指令,也不能满足高实时性的要求。
发明内容
本发明的目的在于克服现有技术之缺陷,提供了一种低延时图像采集方法、装置及***,以解决现有技术中的图像采集***数据延迟较高的问题。
本发明是这样实现的:本发明公开了一种低延时图像采集方法,包括如下步骤:
接收工业相机发送的图像数据;
对图像数据进行解析打包;
对每帧图像进行数据补偿;
将数据补偿后的图像数据通过光纤通道传输到PCIe采集卡。
将每帧图像数据按照设定字节数N进行分割封帧中所述的设定字节数N为1KB。这个值是由DMA大小确定的,将每帧图像数据按照设定字节数N进行分割封帧中所述的设定字节数N与PCIe采集卡内部使用的DMA设置的值相同。优选地,DMA设置的值为1KB。该值如果取得较大,等待时间就越长相应的就会增加延时。该值如果较小的话,就会增加传输的次数,从而造成抖动增加。设置为1KB,最后经过验证一帧图像得延时稳定在12us左右,但是有抖动现象,最大延时45us左右。
进一步地,对每帧图像进行数据补偿,具体包括:
数据接收模块将接收到的图像数据暂存入接收FIFO当中,数据补偿模块判断接收FIFO内的数据量是否达到设定字节数N,如果达到,则读出接收FIFO内的设定字节数N的数据,写入到发送FIFO中,并且包计数器f_cnt加1,如此重复,直到f_cnt等于预设的X值,此时代表接收FIFO内的数据为该帧图像数据的尾部部分,进入到填充数据的状态,然后判断接收FIFO内的数据量是否达到预设的Y字节,如果接收FIFO内的数据量达到Y字节,代表该帧图像的最后一部分数据已经接收完毕,读出接收FIFO内的Y字节数据并且补充数据达到设定字节数N后写入到发送FIFO中,实现每帧图像的数据补偿,并且将f_cnt清零,同时回到空闲状态,等待下一帧图像进入接收FIFO,重复上述步骤,所述数据上传模块用于判断发送FIFO内是否有数据,只要判定该发送FIFO非空,则读出发送FIFO内的设定字节数N的数据进行发送。
进入到填充数据的状态后,如果接收FIFO内的数据量达到预设的Y字节,代表该帧图像的最后一部分数据已经接收完毕。经过判断,如果接收完毕则把该部分数据读出来,由于该部分不够1KB,所以需要填充够1KB。如果不达到预设的Y字节,则等待,直到这部分数据接收完毕。
对于同一分辨率的图像,X、Y均为固定值,在采集数据前,会根据相应的相机属性,设置好分辨率,在采集过程中是不会变化的,因此,该专利所述的方法适用于所有型号不同分辨率的工业相机。
将一副图像按照设定字节数N进行分割封帧,得到可以封装的帧数是个固定值为X,则剩余字节数也是个固定值为Y。
进一步地,将每帧图像数据按照设定字节数N进行分割封帧中所述的设定字节数N为1KB。
补充的数据没有具体要求,一般是填充0,也可以加入一些标识。
本发明公开了一种低延时图像采集装置,包括数据接收模块、数据补偿模块、数据上传模块,所述数据接收模块用于负责接收工业相机发送的图像数据,所述数据补偿模块用于对每帧图像进行数据补偿,所述数据上传模块用于将数据补偿后的图像数据通过光纤通道传输到PCIe采集卡。
数据的读写fifo操作在各部分模块中包含,不是单独的一个模块。数据先经过接收模块,接收之后进行数据的处理。数据处理模块将数据写入到接收fifo中。
进一步地,数据接收模块将接收到的图像数据暂存入接收FIFO当中,数据补偿模块判断接收FIFO内的数据量是否达到设定字节数N,如果达到,则读出接收FIFO内的设定字节数N的数据,写入到发送FIFO中,并且包计数器f_cnt加1,如此重复,直到f_cnt等于预设的X值,此时代表接收FIFO内的数据为该帧图像数据的尾部部分,进入到填充数据的状态,然后判断接收FIFO内的数据量是否达到预设的Y字节,如果接收FIFO内的数据量达到预设的Y字节,代表该帧图像的最后一部分数据已经接收完毕,读出接收FIFO内的预设的Y字节数据并且补充数据达到设定字节数N后写入到发送FIFO中,实现每帧图像的数据补偿,并且将f_cnt清零,同时回到空闲状态,等待下一帧图像进入接收FIFO,重复上述步骤,所述数据上传模块用于判断发送FIFO内是否有数据,只要判定该发送FIFO非空,则读出发送FIFO内的设定字节数N的数据进行发送。
进一步地,将每帧图像数据按照设定字节数N进行分割封帧中所述的设定字节数N为1KB。
进一步地,数据接收模块采用FPGA的高速收发器IP核;数据上传模块采用FPGA的高速收发器IP核。
本发明公开了一种低延时图像采集***,包括工业相机、PCIe采集卡、PC主机以及如上所述的低延时图像采集装置,所述低延时图像采集装置通过输入端接口与工业相机进行通信,接收工业相机发送的图像数据,所述低延时图像采集装置通过光纤接口与PCIe采集卡进行通信,将图像数据通过光纤通道传输到PCIe采集卡,所述PCIe采集卡通过PCIe总线与PC主机进行通信,将光纤通道图像数据上传到PCIe主机,PC主机负责图像显示处理和人机交互功能。
进一步地,所述输入端接口为CXP接口。
进一步地,低延时图像采集装置通过FPGA芯片实现集成数据收发和处理功能。
进一步地,在PCIe采集卡内部使用DMA传输数据,数据量如果满足DMA缓存大小,则触发中断,将数据传输给PC主机。
进一步地,在PCIe采集卡内部使用DMA传输数据,数据量如果满足DMA缓存大小,则触发中断,将数据传输给PC主机;将DMA大小设置为设定字节数N,与数据补偿模块每包数据保持一致,DMA内每次达到设定字节数N的数据,就传输给PC主机一次。
进一步地,设定字节数N为1KB。
本发明的有益效果为:本发明的图像采集装置为实现整个采集***低延时无缓冲的核心部分,其中包括数据补偿机制、光纤传输、PCIe接口。本发明设计思想为将每帧图像数据按照整1KB数据补齐,不够的填充空闲数据,所以通过数据补偿机制可以实现无缓冲高速输出。数据接收模块将接收到的图像数据暂存入接收FIFO当中,数据补偿模块判断接收FIFO内的数据量是否达到1KB,如果达到,则读出接收FIFO内的1KB数据,写入到发送FIFO中,并且包计数器f_cnt加1,如此重复,直到f_cnt等于预设的X值,此时接收FIFO内的数据为该帧图像数据的尾部部分,进入到填充数据的状态,如果接收FIFO内的数据量达到预设的Y字节,则读出预设的Y字节数据并且补充(1024-Y)字节数据,写入到发送FIFO中,实现每帧图像的数据补偿,并且将f_cnt清零,同时回到空闲状态,等待下一帧图像进入接收FIFO,重复上述步骤,所述数据上传模块用于判断发送FIFO内是否有数据,只要判定该发送FIFO非空,则读出发送FIFO内的1KB数据进行发送。这样在发送FIFO中的数据是按照1KB对齐的,下级发送模块只要判定该发送FIFO非空,则可以读出1KB数据进行发送。数据补偿机制可以实现图像数据的无缓冲,当图像源中止工作时,最后一帧图像仍然能够完整发出,将图像数据以最高的实时性转发给PC主机,不会造成图像数据残留在采集***中。由于数据不会残留在采集***中,并且数据到达接收FIFO只要满1KB就立即进行了转发,所以从数据接收到最后的发送所需时间非常少,大量较少了传输延时。
图像采集装置的图像数据经过光纤通道传输到PCIE采集卡。由于光纤信道的传输容量大,带宽高,并且传输质量好,抗电磁干扰性能好,所以采用光纤传输图像数据,可以极大减少传输延时。PCIE是一种高速串行计算机扩展总线,由于其使用高速串行点对点传输,具有较高的带宽。PCIE_4的传输速度可以达到2.0GBps(吉比特每秒),通过PCIE接口上传图像数据到PC主机,降低了数据传输的延迟,可应用于实时性要求比较高的图像采集场合。
在PCIE采集卡内部使用DMA(直接内存存取)传输数据,数据量如果满足DMA缓存大小,则触发中断,将数据传输给PC主机。为了降低延迟,将DMA大小设置为1KB,即和数据补偿模块每包数据保持一致。每次够1KB数据,就传输给主机一次。DMA设置的越大,则需要等待的时间越长,同时补偿模块包的尺寸也越大,补偿的数据就越多,不仅提高了延迟还浪费资源;DMA设置的越小,则通信就会越频繁,中断次数就会越多,会增加PC主机负荷,同时带来延迟的抖动。故使用PCIe接口且DMA大小设置为1KB可以大量减少数据传输延时。
附图说明
图1为本发明的低延时图像采集***的整个***框图;
图2本发明的低延时图像采集装置的数据接收模块结构原理图;
图3本发明的低延时图像采集装置的数据处理模块框图;
图4本发明的低延时图像采集装置的数据补偿模块框图;
图5本发明的低延时图像采集装置的数据补偿机制状态转换图;
图6本发明延迟统计示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参见图1至图5,本实施例公开了一种低延时图像采集方法,包括如下步骤:
接收工业相机发送的图像数据;
对图像数据进行解析打包;
对每帧图像进行数据补偿;
将数据补偿后的图像数据通过光纤通道传输到PCIe采集卡。
对每帧图像进行数据补偿,包括:将每帧图像数据按照设定字节数N进行分割封帧,不够的填充空闲数据。补充的数据没有具体要求,一般是填充0,也可以加入一些标识。如本实施例添加了一些标识,填充的数据是:4字节头(0x499602d2)+4字节帧计数器+4字节打包时间戳+4字节上一帧到达时间戳,其余填充0。
本实施例将每帧图像数据按照设定字节数N进行分割封帧中所述的设定字节数N为1KB。对于本身图像数据为1KB(1024字节)的,不需要进行填充。假如一幅图像分辨率为576*562,图像数据为8bit(比特)灰度,则该幅图像数据量为576*562*8/8=323712B(316KB+128B)。按照整1KB数据填充,则需要填充872B图像数据,每帧构成317KB数据。经过数据填充,每帧图像数据均为1KB对齐,这样转发给PC时,判断图像数据是否够1KB,如果够,则进行转发。同时,如果图像源停止工作,因为每帧图像数据经过填充后是1KB对齐的,最后一帧图像数据是可以完整转发,不会出现图像数据残留在采集***中的情况。
将一幅图像按照1KB进行分割封帧,可以封装的帧数是个固定值为X,则剩余字节数也是个固定值为Y,则一整幅图像数据表示为(X*1024+Y)B,经过填充后一幅图像数据为(X+1)KB。
进一步地,对每帧图像进行数据补偿,具体包括:
数据接收模块将接收到的图像数据暂存入接收FIFO当中,数据补偿模块判断接收FIFO内的数据量是否达到1KB,如果达到,则读出接收FIFO内的1KB数据,写入到发送FIFO中,并且包计数器f_cnt加1,如此重复,直到f_cnt等于X值,此时代表接收FIFO内的数据为该帧图像数据的尾部部分,进入到填充数据的状态,然后判断接收FIFO内的数据量是否达到Y字节,如果接收FIFO内的数据量达到Y字节,代表该帧图像的最后一部分数据已经接收完毕,读出Y字节数据并且补充(1024-Y)字节数据,写入到发送FIFO中,实现每帧图像的数据补偿,并且将f_cnt清零,同时回到空闲状态,等待下一帧图像进入接收FIFO,重复上述步骤,所述数据上传模块用于判断发送FIFO内是否有数据,只要判定该发送FIFO非空,则读出发送FIFO内的1KB数据进行发送。
实施例二
参见图1至图5,本实施例公开了一种低延时图像采集装置,包括数据接收模块、数据补偿模块、数据上传模块,所述数据接收模块用于负责接收工业相机发送的图像数据,所述数据补偿模块用于对每帧图像进行数据补偿,所述数据上传模块用于将数据补偿后的图像数据通过光纤通道传输到PCIe采集卡。
数据接收模块主要负责接收工业相机发送的图像数据。相机接口为CXP接口。CXP是一种非对称的高速点对点串行通信数字接口标准。CXP相机通过4根同轴电缆连接到FPGA图像采集板,以高达6.25Gbps的速度传输数据,4根线缆可达25Gbps。与其他标准相比,CXP接口的一大优势是数据传输率高。对于许多应用而言,在更远的距离上实现相机和计算机之间的桥接具有很高的应用价值,能够实现更复杂的图像处理解决方案。CXP非常受市场欢迎,在半导体行业尤为如此。例如,在太阳观测***中,必须以高分辨率获得大数据量,并且不能出现明显的延迟,CXP接口超高的传输速率可以满足这一需求。
数据接收模块的设计采用FPGA的高速收发器IP核。该嵌入式硬核主要包括PCS(物理编码子层)和PMA(物理媒介适配层),其内部结构如下图所示。
PMA(物理编码子层)中用到的Serdes(串行解串)是一种集成电路收发器,主要完成序列化和反序列化功能。其中Serializer(序列化器)将并行数据转化为高速串行数据,反之,Deserializer(反序列化器)将接收到的串行数据恢复成并行数据。CDR(时钟恢复电路),从接收到的串行数据当中恢复出时钟信号,用于数据接收。PCS主要完成8b/10b编码功能。8b/10b编码是一种电信线路代码,其中每8bit数据字节转换为10bit字符。使用这种编码可以改善串行数据流的直流平衡,同时还可以检测出单bit传输错误。通过该IP每个通道最高传输速度可以达到12.5Gbps。
数据处理模块通过VerilogHDL(硬件描述语言)实现,主要完成图像数据的解析打包。功能框图如下图所示。具体是按照协议,将数据封装成规定的格式,同时对图像进行平暗场的计算,这个与本专利的改进点不相关。
数据补偿模块,实现***中的数据补偿机制。其功能框图如下图所示。
数据接收模块将接收到的图像数据暂存入接收FIFO(先进先出队列)当中。一幅图像分辨率固定,数据量也是固定的。将一幅图像按照1KB进行分割封帧,可以封装的帧数是个固定值为X,则剩余字节数也是个固定值为Y,则一整幅图像数据可以表示为(X*1024+Y)B。经过填充后一幅图像数据(包括填充数据)为(X+1)KB。
该模块设计思想可由上图状态转换表示,当复位时,***进入空闲状态。判断接收FIFO中的数据量是否达到1KB,如果达到,进入到读FIFO状态,读出接收FIFO中的1KB数据,写入到发送FIFO中,并且包计数器f_cnt加1;当接收FIFO中的数据量再次达到1KB,再次进入到读FIFO状态,读出接收FIFO中的1KB数据,包计数器f_cnt加1,如此重复,直到f_cnt等于X的值,此时接收FIFO中的数据为该帧图像的尾部部分,进入到填充数据的状态,然后判断接收FIFO内的数据量是否达到Y字节,如果接收FIFO内的数据量达到Y字节,代表该帧图像的最后一部分数据已经接收完毕,则读出Y字节数据并且补充(1024-Y)字节数据,写入到发送FIFO中。并且将f_cnt清零,同时回到空闲状态,等待下一帧图像进入接收FIFO,重复上述步骤。经过上述处理,每帧图像都进行了数据补偿。这样在发送FIFO中的数据是按照1KB对齐的,下级发送模块只要判定该发送FIFO非空,则可以读出1KB数据进行发送。当图像源中止工作时,最后一帧图像数据进入到接收FIFO,经过数据填充,下级发送模块仍然可以将该幅图像完整发送出去,不会造成图像数据残留在采集***中。由于数据不会残留在采集***中,并且数据到达接收FIFO只要满1KB就立即进行了转发,所以从数据接收到最后的发送所需时间非常少,大量较少了传输延时。
f_cnt等于X的值时,代表一幅图像能够凑成整KB的部分已经接收并读出了,剩下的数据就是Y部分了。只有等fifo中的数据达到Y的时候,把这最后一部分数据读出来并且进行填充够1KB(填充1024-Y字节数据)。所以需要判断数据量是否达到Y字节,如果没有达到,代表该幅尾部的数据还没有接收完毕,等待即可。
数据上传模块同样采用FPGA的高速收发器IP核,将图像数据通过光纤通道传输到PCIe采集卡。
实施例三
参见图1至图5,本实施例公开了一种低延时图像采集***,包括工业相机、PCIe采集卡、PC主机以及如实施例二所述的低延时图像采集装置,所述低延时图像采集装置通过CXP接口与工业相机进行通信,接收工业相机发送的图像数据,所述低延时图像采集装置通过光纤接口与PCIe采集卡进行通信,将图像数据通过光纤通道传输到PCIe采集卡,所述PCIe采集卡通过PCIe总线与PC主机进行通信,将光纤通道图像数据上传到PCIe主机,PC主机负责图像显示处理和人机交互功能。
工业相机为图像源,产生图像数据,接口为Camera Link接口和高速CXP接口。FPGA图像采集板为通过FPGA芯片实现的集成数据收发和处理功能的图像采集***核心器件。PC主机负责图像显示处理和人机交互功能。
进一步地,低延时图像采集装置通过FPGA芯片实现集成数据收发和处理功能。
进一步地,在PCIe采集卡内部使用DMA传输数据,数据量如果满足DMA缓存大小,则触发中断,将数据传输给PC主机。
进一步地,将DMA大小设置为1KB,即和数据补偿模块每包数据保持一致,DMA内每次够1KB数据,就传输给PC主机一次。
PCIe采集卡通过PCIe总线和PC主机进行通信,将光纤通道图像数据上传到PCIe主机。PCIe是新一代的总线接口,PCIe和第二代***总线PCI最主要的不同是实现了传输方式从并行到串行的转变。它采用了点对点串行连接,比起PCI以及更早期的计算机总线的共享并行架构,它允许和每个设备建立独立的数据传输通道,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很高的频率,这样就可以轻松达到其他接口标准所不能提供的高带宽。相对于传统PCI总线在单一时间周期内只能实现单向传输,PCIe的双单工连接能提供更高的传输速率和质量,它们之间的差异跟半双工和全双工类似。PCIe的接口根据总线位宽不同而有所差异,包括X1、X4、X8以及X16(X2模式将用于内部接口而非插槽模式)。较短的PCIe卡可以***较长的PCIe插槽中使用。PCIe接口能够支持热拔插。PCIe卡支持的三种电压分别为+3.3V、3.3Vaux以及+12V。用于取代AGP接口的PCIe接口位宽为X16,能够提供5GB/s的带宽,即便有编码上的损耗但仍能够提供约为4GB/s左右的实际带宽,远远超过AGP 8X的2.1GB/s的带宽。在采集卡内部使用DMA(直接内存存取)传输数据,数据量如果满足DMA缓存大小,则触发中断,将数据传输给PC主机。为了降低延迟,将DMA大小设置为1KB,即和数据补偿模块每包数据保持一致。每次够1KB数据,就传输给主机一次。DMA设置的越大,则需要等待的时间越长,同时补偿模块包的尺寸也越大,补偿的数据就越多,不仅提高了延迟还浪费资源;DMA设置的越小,则通信就会越频繁,中断次数就会越多,会增加PC主机负荷,同时带来延迟的抖动。故使用PCIe接口且DMA大小设置为1KB可以大量减少数据传输延时。
本发明所述的延迟为FPGA图像采集板接收一帧图像完成之后,到PC主机接收到该帧图像数据的延迟。在帧尾添加一个时间戳T1,上位机接收到图像数据马上返回8个字节的数据,图像采集板接收到数据时记下时间戳T2,由于上位机返回的时间戳数据只有8个字节并且是通过光纤接收,延迟极低,所以该部分时间可以忽略不计。采集板时钟为200Mhz,故延迟时间可以近似为
参见图6,对该***做50万帧图像延迟统计,传输延迟基本稳定在12us左右,偶尔有抖动现象,该抖动现象是由操作***响应不及时造成的,***本身传输是稳定的,基本抖动维持在30us以内,最高抖动不超过12us。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。