一种多路采集数据的同步输出方法、系统及RGBD相机与流程

文档序号:32605357发布日期:2022-12-17 20:52阅读:68来源:国知局
一种多路采集数据的同步输出方法、系统及RGBD相机与流程
一种多路采集数据的同步输出方法、系统及rgbd相机
技术领域
1.本发明涉及数据处理领域,特别涉及一种多路采集数据的同步输出方法、系统及rgbd相机。


背景技术:

2.在单个设备或多个设备组合使用的场景中,往往同一设备或者不同设备的各路数据流的帧采样时间点、帧数据处理延时和帧数据传输延时等条件都各不相同,导致同批次采样的各路数据流的数据帧输出到上位机时的时间不同步。
3.因此,为了使得采集到的多路数据能够同步输出,需要对数据的同步数据方法做出改进。


技术实现要素:

4.针对现有技术的上述缺陷,本发明提供一种多路采集数据的同步输出方法,旨在解决现有技术中多路数据流的数据帧输出到上位机的时间不同步的问题。
5.为了解决上述技术问题,本发明所采用的技术方案如下:
6.本发明的第一方面,提供一种多路采集数据的同步输出方法,方法包括:接收n路数据流中的数据帧,将每个数据帧加入至队列集中对应的队列,其中,队列集包括n个队列,每个队列与每路数据流相对应,n为大于1的整数;分别提取队列集中存在数据帧的各个队列中加入时刻最早的数据帧,得到待同步数据包;从待同步数据包中提取出时间戳最早的数据帧作为参考数据帧并输至缓存,将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧;根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件;若是,则将目标数据帧输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步输出。
7.本发明的第二方面,提供一种多路采集数据的同步输出系统,包括:数据接收模块,用于接收多路数据流中的数据帧,将每个数据帧加入至队列集中对应的队列,其中,队列集中的每个队列与每路数据流相对应;第一数据提取模块,用于分别提取队列集中存在数据帧的各个队列中加入时刻最早的数据帧,得到待同步数据包;第二数据提取模块,用于从待同步数据包中提取出时间戳最早的数据帧作为参考数据帧并输出至缓存,将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧;数据同步模块,用于根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件;若是,则将目标数据帧输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步输出。
8.本发明的第三方面,提供一种rgbd相机,包括:发射器、rgb图像采集器、ir图像采集器、处理器和存储器;存储器,用于存储可在处理器上运行的同步输出程序,同步输出程序被处理器执行时实现如上述任一方面提供的多路采集数据的同步输出方法的步骤;发射器,用于向目标投射散斑图案;rgb图像采集器,用于采集rgb数据;ir图像采集器,用于采集
目标反射回来的ir数据;处理器,用于获取rgb数据和ir数据,利用ir数据进行深度计算得到深度数据,并执行同步输出程序,以实现rgb数据、ir数据和深度数据同步输出。
9.本发明的第四方面,提供一种终端,终端包括处理器、与处理器通信连接的计算机可读存储介质,计算机可读存储介质适于存储多条指令,处理器适于调用计算机可读存储介质中的指令,以执行实现上述的多路采集数据的同步输出方法的步骤。
10.本发明的第五方面,提供一种计算机可读存储介质,计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一项所述的多路采集数据的同步输出方法的步骤。
11.与现有技术相比,本发明提供了一种多路采集数据的同步输出方法、系统及rgbd相机,本发明提供的方法,通过为每路数据流设置对应的队列,每路数据流的数据帧先是暂存在队列中,将队列中加入时刻最早的数据帧提取出来作为待同步数据包,并在待同步数据包中提取时间戳最早的数据帧作为参考数据帧,将在待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧,根据参考数据帧和目标数据帧之间的时间戳差值确定目标数据帧是否满足同步条件,若满足,则目标数据帧为参考数据帧的同步数据帧,输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步后输出,这样可以为多路数据流的同步输出提供有效保障。
附图说明
12.图1为本发明提供的rgbd相机的实施例的原理示意图;
13.图2为本发明提供的多路采集数据的同步输出方法的实施例的流程图;
14.图3为一种多路采集数据的同步输出方法的流程示意图;
15.图4为本发明提供的多路采集数据的同步输出方法的实施例中开始数据同步匹配的逻辑图;
16.图5为本发明提供的多路采集数据的同步输出方法的实施例中数据同步匹配的流程图;
17.图6为本发明提供的多路采集数据的同步输出系统的实施例的结构原理图;
18.图7为本发明提供的终端的实施例的原理示意图。
具体实施方式
19.为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
20.请参阅图1,图1是本发明某一实施例提供的rgbd相机的结构示意图。rgbd相机1包括:发射器11、采集器12、处理器13和存储器14。图1仅示出了rgbd相机的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
21.发射器11,用于向目标投射散斑图案。采集器12包括rgb图像采集器和ir图像采集器,rgb图像采集器用于采集rgb数据,ir图像采集器用于采集目标反射回来的ir数据。由于rgb图像采集器和ir图像采集器的帧采样时间点、帧数据处理延时和帧数据传输延时等条件都各不相同,且深度图像由ir图像经过深度引擎处理得到,因此rgb图像、ir图像和深度
图像等数据的传输如果不加以同步处理,则不同数据到达上位机的时间不能同步。
22.在本实施例中,存储器14,用于存储可在处理器13上运行的同步输出程序。处理器13,用于获取rgb数据和ir数据,利用ir数据进行深度计算得到深度数据,并执行同步输出程序,以实现rgb数据、ir数据和深度数据同步输出。
23.例如,对于在线上会议抠图场景中,需要rgbd相机同时输出4k分辨率rgb图像和vga分辨率深度图像至上位机,上位机基于深度图像增强rgb抠图的效果,在该场景中,需要严格要求rgb图像和深度图像同步,才能保证抠图主体运动时的抠图准确性和连贯性。为了降低usb带宽和设备功耗,一般采用rgb图像30fps、深度图像15fps的采样频率组合,即rgb图像和深度图像采样频率不一致,并且在设备端rgb图像需要经过isp处理后传输给上位机,而深度图像需要经过深度引擎处理后传输给上位机,并且二者单帧数据量不同,导致在最相近时间采样的rgb图像和深度图像,传输到达上位机的时间点相差比较大。此时,利用处理器13执行同步输出程序,实现rgb数据、ir数据和深度数据同步输出。
24.请参阅图2,图2是本发明某一实施例提供的多路采集数据的同步输出方法的流程示意图。同步输出程序被处理器执行时实现多路采集数据的同步输出方法的步骤,包括:
25.s100、接收n路数据流中的数据帧,将每个数据帧加入至队列集中对应的队列,其中,队列集包括n个队列,每个队列与每路数据流相对应,n为大于1的整数。
26.本实施例提供的方法,针对各数据流增加队列,每个数据流对应一个队列,上位机接收到的每个数据流的数据帧并不直接输出至处理程序进行处理,而是先存储到对应的队列中,对于队列中的数据,确定其中的同步数据,将同步数据同时输出至上位的处理程序进行处理。
27.如图3所示,在一种可能的实现方式中,可以设置每一路数据流对应的队列的预设最大存储数量为2,当所有数据流都缓存有数据帧时,将各队列中的首帧同步输出,当任意一路流存储数量大等于2时,将缓存数大于或等于2的队列的首帧标记为异常状态,输出给处理程序。但是,在实际应用中,数据帧传输可能会丢帧,这种方案可能会导致同步结果不可靠,并且误差会逐步累计,因此,在本实施例提供的方法中,包括步骤:
28.s200、从队列集的各个存有数据帧的队列中提取加入时刻最早的数据帧,得到待同步数据包。
29.在本实施例中,将队列中加入时刻最早的数据帧提取出来,作为待同步数据包,再从待同步数据包中进行数据帧的同步匹配,可以根据数据帧的数据帧的时间戳确定加入时刻,时间戳为数据帧的采样时间戳,多路数据流的采集设备可以随着数据帧输出采样时间戳,当多路数据流的采样设备为多个设备时,多个设备设置有统一的时间参考或有已同步的时间参考,即多路数据流的数据帧的时间戳与真实采样时刻是一致的,对应的时间戳越早,则对应的真实采样时刻越早。为了确定获取到数据帧的所有同步数据帧,在本实施例中,如图4所示,设置有触发条件,当满足触发条件时,开始执行基于时间戳的数据帧同步匹配来匹配数据帧的同步数据帧。具体地,提取队列集中的各个队列中加入时刻最早的数据帧,包括:
30.当队列集中的队列满足预设条件时,提取各个队列中加入时刻最早的数据帧。预设条件为:队列集中的全部队列中都匹配了数据帧,或者队列集中的任一队列匹配的数据帧数量超出该队列对应的最大缓存量。
31.在一种可能的实现方式中,队列对应的最大缓存量可以直接设置为1。而在本实施例中,考虑到数据采集后到传输到上位机的过程中存在延时,是根据对应的数据流的延时以及所有的数据流的延时中的最大延时得到队列集中每个队列对应的最大缓存量的。这里的延时包括数据帧处理延时和数据帧传输延时,具体地,采集设备采集到数据帧后,先要进行相应的处理,例如前文所举的例子中,rgb图像需要经过isp处理,处理需要消耗的时候为处理延时,后再传输到上位机,传输的过程消耗的时间为传输延时。
32.最大缓存量的计算公式为:
33.queue_max_size_n=(delay_max-delay_n)*fpsn
34.其中,queue_max_size_n表示队列集中第n队列对应的最大缓存量,delay_max表示所有数据流的传输延时中的最大延时,delay_n表示队列集中第n队列对应的数据流的传输延时,fpsn表示队列集中第n队列对应的数据流的采样频率。
35.在根据上述计算公式计算最大缓存量时,若计算公式的计算结果小于1,那么对应的最大缓存量取1。
36.例如,数据a采样频率为fpsa=3、b采样频率fpsb=5、c采样频率fpsc=4,数据a的延时为delay_a=5,数据b的延时delay_b=10,数据c的延时为delay_c=15,得到最大延时为delay_max=delay_c=15。则队列a的最大缓存数queue_max_size_a=(delay_max-delay_a)*fpsa=(15-5)*3,队列b的最大缓存数queue_max_size_b=(delay_max-delay_b)*fpsb=(15-10)*5,队列c的最大缓存数为1,(最大缓存数的最小值为1)。
37.采用上式计算最大缓存量的过程中,用最大延时减去对应队列的延时,是因为,当数据帧a到达,理论上需要再等15-5就可以等到c了,如果超过这个时间都等不到,说明c丢帧了,也就没必要再继续等了,这样可以保证能够得到所有数据流的同步数据帧,同时也可以及时地进行同步数据帧输出。
38.s300、从待同步数据包中提取出时间戳最早的数据帧作为参考数据帧并输至缓存,将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧。
39.如图5所示,进入数据帧同步匹配后,首先提取队列集中的各个队列中加入时刻最早的数据帧,得到待同步数据包,将待同步数据包中对应的时间戳最早的数据帧作为参考数据帧,并将参考数据帧输出至缓存,将待同步数据包中剩余的数据帧中对应的时间戳最早的数据帧作为目标数据帧,值得说明的是,目标数据帧先并不输出至缓存。在本实施例中,采用循环判断的方式来确定待同步数据包中的同步数据帧,具体地,在达到循环结束条件之前的每次循环中,都在待同步数据包中确定一个新的参考数据帧,再基于新的参考数据帧确定对应的目标数据帧,判断目标数据帧是否为参考数据帧的同步数据帧,基于判断结果进入下一次循环或者结束循环。
40.请再次参阅图2,本实施例提供的方法,还包括步骤:
41.s400、根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件。
42.s500、若是,则将目标数据帧输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步输出。
43.根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件,包括:
44.根据参考数据帧和目标数据帧分别对应的帧间隔时长确定目标比较值;判断参考数据帧和目标数据帧之间的时间戳差值是否小于或等于目标比较值;若是,则确定目标数据帧符合同步条件;若否,则确定目标数据帧不符合同步条件。
45.目标比较值可以为参考数据帧和目标数据帧分别对应的数据流的帧间隔时长中的较小值的一半。目标比较值的设置可以减少各路数据流帧率不同或偶发丢帧对同步的影响。
46.在确定了参考数据帧和目标数据帧后,若参考数据帧和目标数据帧之间的时间戳差值不大于目标比较值,则确定目标数据帧为参考数据帧的同步数据帧,将目标数据帧输出至缓存,并将目标数据帧作为下次循环的参考数据帧,此时目标数据帧已经被输出至缓存,不在待同步数据包中,重新执行将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧的步骤,即选择一个新的目标数据帧,再确定新的目标数据帧是否与同步数据帧同步,若待同步数据包中已经不存在数据帧,则结束循环。即,根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件之后,还包括步骤:
47.若是,则将目标数据帧输出至缓存,并在待同步数据包中还有剩余数据帧时将缓存中的目标数据帧作为新的参考数据帧,从待同步数据包剩余的数据帧中提取时间戳最早的数据帧作为新的目标数据帧,判断新的目标数据帧是否符合同步条件。
48.在确定了参考数据帧和目标数据帧后,若参考数据帧和目标数据帧之间的时间戳差值大于目标比较值,则确定目标数据帧不是参考数据帧的同步数据帧并结束循环。
49.通过上述步骤,可以确定待同步数据包中存在的同步数据帧,并均输出至缓存。
50.若目标数据帧不符合同步条件,即目标比较值大于参考数据帧和目标数据帧之间的时间戳差值,则将待同步数据包中剩余的数据帧归还给对应的队列,并将缓存中的数据帧标记为异常输出。
51.例如,有3路数据流a、b、c,数据采集的帧间隔时长分别为3、5、4,对应的队列分别为a、b、c,上位机在不同时刻接收到的这3路数据流的数据帧的情况如表1所示。
[0052][0053][0054]
表1
[0055]
在时刻10时,3路数据流分别对应的队列都匹配了数据帧,此时队列集中的队列满足预设条件,提取各个队列中加入时刻最早的数据帧,得到待同步数据包a10、b08、c09,按照时间戳早晚顺序进行排序为b08、c09、a10。那么将b08输出到缓存,并标记b08为参考数据帧,c09为目标数据帧,二者的时间戳差值为tdiff=1,选择数据流帧间隔时长中较小的间
隔时长(4)的一半作为目标比较值,即目标比较值halfgap=2,满足tdiff≤halfgap,因此,输出c09到缓存,开始新的循环,标记c09为参考数据帧,a10为目标数据帧,则新的循环中,tdiff=1,halfgap=2,满足tdiff≤halfgap,那么输出a10到缓存,待同步数据包中没有多余的数据帧且缓存中的数据帧数量与数据流数量相等,将缓存中的数据标记为同步状态并打包输出。a13、b13、c13、a16、b18、c17依据同理也将被标记为“同步状态”输出。
[0056]
假设理应到达的数据a10丢帧了,则在时刻13时队列集中的队列才能满足预设条件,提取各个队列中加入时刻最早的数据帧,得到待同步数据包a13、b08、c09,按照时间戳早晚顺序进行排序为b08、c09、a13。那么将b08输出到缓存,并标记b08为参考数据帧,c09为目标数据帧,二者的时间戳差值为tdiff=1,选择数据流帧间隔时长中较小的间隔时长(4)的一半作为目标比较值,即目标比较值halfgap=2,满足tdiff≤halfgap,因此,输出c09到缓存,开始新的循环,标记c09为参考数据帧,a13为目标数据帧,则新的循环中,tdiff=4,halfgap=2,不满足满足tdiff≤halfgap,因此将已经在缓存中b08和c09标记为异常状态输出,将目标数据帧a13返回队列a中。将a13返回队列集后,每个队列都有数据帧,因此提取各个队列中加入时刻最早的数据帧,得到待同步数据包a13、b13、c13,并进行同步输出。
[0057]
在时刻22时,队列a中缓存了两个数据帧a19、a22,队列b中无数据帧,队列c中缓存了一个数据帧c21,由于队列a中的缓存量超过了预设值1,则触发同步,取出首帧数据得到待同步数据包a19、c21,最终输出的数据包为被标记为异常状态的a19和c21。
[0058]
综上所述,本实施例提供一种多路采集数据的同步输出方法,通过为每路数据流设置对应的队列,每路数据流的数据帧先是暂存在队列中,将队列中加入时刻最早的数据帧提取出来作为待同步数据包,并在待同步数据包中提取时间戳最早的数据帧作为参考数据帧,将在待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧,根据参考数据帧和目标数据帧之间的时间戳差值确定目标数据帧是否满足同步条件,若满足,则目标数据帧为参考数据帧的同步数据帧,输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步后输出,这样可以为多路数据流的同步输出提供有效保障。
[0059]
应该理解的是,虽然本发明说明书附图中给出的的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0060]
基于上述实施例,本发明还相应提供一种多路采集数据的同步输出系统,该系统中未详细描述之处请详见前述多路采集数据的同步输出方法实施例中的描述,下述不再赘述。更具体地,如图6所示,该系统包括:
[0061]
数据接收模块,用于接收多路数据流中的数据帧,将每个数据帧加入至队列集中对应的队列,其中,队列集中的每个队列与每路数据流相对应;
[0062]
第一数据提取模块,用于从队列集的各个存有数据帧的队列中提取加入时刻最早的数据帧,得到待同步数据包;
[0063]
第二数据提取模块,用于从待同步数据包中提取出时间戳最早的数据帧作为参考数据帧并输出至缓存,将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧;
[0064]
数据同步模块,用于根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件;若是,则将目标数据帧输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步输出。
[0065]
基于上述实施例,本发明提供的多路采集数据的同步输出方法,不仅应用于rgbd相机中,还可应用于具有计算能力的终端中,终端可以执行本发明提供的多路采集数据的同步输出方法以输出数据,终端可以但不限于是各种计算机、移动终端、智能家电、可穿戴式设备等。在一个实施例中,如图7所示,终端包括处理器71以及存储器72。图7仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
[0066]
在一个实施例中,存储器72在一些实施例中可以是终端的内部存储单元,例如终端的硬盘或内存。存储器72在另一些实施例中也可以是终端的外部存储设备,例如终端上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,存储器72还可以既包括终端的内部存储单元也包括外部存储设备。存储器72用于存储安装于终端的应用软件及各类数据。存储器72还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器72上存储有多路采集数据的同步输出程序,该多路采集数据的同步输出程序可被处理器71所执行,从而实现本技术中多路采集数据的同步输出方法。
[0067]
在一个实施例中,处理器71在一些实施例中可以是一中央处理器(central processing unit,cpu),微处理器或其他芯片,用于运行存储器72中存储的程序代码或处理数据,例如执行多路采集数据的同步输出方法等。执行多路采集数据的同步输出方法中,接收的n路数据流可以是来自于一个外部设备或者是多个外部设备,例如外部设备是rgbd相机,终端的处理器71接收如rgbd相机等外部设备采集的n路数据流。
[0068]
在一个实施例中,当处理器71执行存储器72中多路采集数据的同步输出程序时实现以下步骤:
[0069]
接收n路数据流中的数据帧,将每个数据帧加入至队列集中对应的队列,其中,队列集包括n个队列,每个队列与每路数据流相对应,n为大于1的整数;分别提取队列集中存在数据帧的各个队列中加入时刻最早的数据帧,得到待同步数据包;从待同步数据包中提取出时间戳最早的数据帧作为参考数据帧并输至缓存,将待同步数据包中剩余的数据帧中时间戳最早的数据帧作为目标数据帧;根据参考数据帧和目标数据帧之间的时间戳差值,判断目标数据帧是否符合同步条件;若是,则将目标数据帧输至缓存,并在待同步数据包中没有剩余数据帧时将缓存中的数据帧标记为同步输出。
[0070]
本发明还提供一种计算机可读存储介质,其中存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现如上所述的多路采集数据的同步输出方法的步骤。
[0071]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可
以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1