一种基于多GPU的全景实时视频流处理方法及装置与流程

文档序号:11594842阅读:242来源:国知局

本发明涉及图像处理技术领域,特别涉及一种基于多gpu的全景实时视频流处理方法及装置。



背景技术:

伴随着计算机、电子技术的迅速发展,整个处理器计算速度和存储量都有飞速增加,逐步满足计算机视觉技术的实现。图像拼接技术作为图像处理、计算机视觉的一个重要研究方向,已广泛应用于机器人视觉系统、医学图像处理、监控视频等领域。

关于高分辨率视频图像拼接过程中,均需对图像系列进行图像配准、最佳缝合线搜索、融合等步骤最终形成一张无缝的大视场图像。单帧视频图像拼接计算量较大,大多采用并行计算的方法进行加速。目前在单块高性能的gpu上可以实现4k(4096*2048)分辨率的全景视频的实时拼接的质量。但是,在全景播放器中,即使4k的全景视频,用户视窗在某一个视角只是显示全景的一部分,因此视窗中的分辨率只有大约4k的六分之一。当在全景视窗中的分辨率达到2k或者更高时,全景的分辨率会达到12k,甚至16k。目前,国内外单块gpu的全景视频实时拼接尚未支持12k~16k甚至更高的分辨率。多gpu的协同拼接计算成为解决高分辨率视频图像实时拼接的途径之一。



技术实现要素:

鉴于上述问题,本发明提供了一种基于多gpu的全景实时视频流处理方法及装置。

本发明提供的基于多gpu的全景实时视频流处理方法,包括以下步骤:

并行获取多路待拼接视频图像,得到当前批次视频图像,其中每路待拼接视频图像中的每一帧视频图像均带有帧标记;

将属于同一帧标记的多路视频图像分配至同一gpu,将所述当前批次视频图像分配至多个gpu中,同时获取下一批次视频图像;

获取当前批次拼接后的视频图像,将所述拼接后的视频图像按照所述帧标记进行排序并推送。

本发明还提供了一种基于多gpu的全景实时视频流处理装置,包括:

所述获取模块,用于并行获取多路待拼接视频图像,得到当前批次视频图像,其中每路待拼接视频图像中的每一帧视频图像均带有帧标记;

所述分配模块,用于将属于同一帧标记的多路视频图像分配至同一gpu,将所述当前批次视频图像分配至多个gpu中;

所述排序模块,用于获取当前批次拼接后的视频图像,将所述拼接后的视频图像按照所述帧标记进行排序并推送。

本发明有益效果如下:

本发明实施例中对于每一帧视频图像的全景拼接计算始终在一块gpu中执行,这种方式减少了拼接计算与gpu数量的依赖,并且该方法可以很容易拓展到任意数量的gpu计算平台中,同时采用gpu/cuda并行处理技术,通过对gpu的扩展,实现多gpu架构并发运算,解决了高分辨率拼接运算不及时的问题,可以实时完成拼接融合与编码。

附图说明

图1是本发明方法实施例的基于多gpu的全景实时视频流处理方法的流程图;

图2是本发明装置实施例的基于多gpu的全景实时视频流处理装置的结构示意图;

图3为实例1中每批次的视频数据处理的流程;

图4为实例1中视频数据在处理时数据流的示意图;

图5为实例1gpu中数据流示意图;

图6为实例1数据流水示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

为了解决高分辨率视频图像的实时拼接问题,本发明提供了一种基于多gpu的全景实时视频流处理方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

根据本发明的方法实施例,提供了一种基于多gpu的全景实时视频流处理方法,图1是本发明方法实施例的基于多gpu的全景实时视频流处理方法的流程图,如图1所示,根据本发明方法实施例的基于多gpu的全景实时视频流处理方法包括如下处理:

步骤101:并行获取多路待拼接视频图像,得到当前批次视频图像,其中每路待拼接视频图像中的每一帧视频图像均带有帧标记。

具体的,每路待拼接视频图像的获取方法包括以下步骤:

获取当前帧视频图像,对当前帧视频图像按获取的先后顺序进行标记;

在当前帧视频图像标记结束后获取下一帧视频图像并标记。

步骤102:将属于同一帧标记的多路视频图像分配至同一gpu,将所述当前批次视频图像分配至多个gpu中,同时获取下一批次视频图像。

具体的,将所述当前批次视频图像分配至多个gpu中,包括:

将当前批次视频图像分别存入n个第一存储队列,其中,将属于同一帧标记的多路视频图像存入相同的第一存储队列;

将n个第一存储队列中的视频图像分别发送至n个gpu中。

优选的,将所述当前批次视频图像分配至多个gpu中包括:将所述当前批次视频图像平均分配至多个gpu中,以使每个gpu中进行视频图像拼接的时间基本相同。

步骤103:获取当前批次拼接后的视频图像,将所述拼接后的视频图像按照所述帧标记进行排序并推送。

具体的,获取当前批次拼接后的视频图像,包括:

获取n个gpu中拼接后的视频图像,并存入n个第二存储队列;

获取n个第二存储队列的拼接后的视频图像。

本发明方法实施例步骤102中,将属于同一帧标记的多路视频图像分配至同一gpu,将所述当前批次视频图像分配至多个gpu中,同时获取下一批次视频图像,也即本发明方法实施例的基于多gpu的全景实时视频流处理方法具体为如下流程:

并行获取多路待拼接视频图像,得到当前批次视频图像,其中每路待拼接视频图像中的每一帧视频图像均带有帧标记;

将属于同一帧标记的多路视频图像分配至同一gpu,将所述当前批次视频图像从宿主机分配输至多个gpu中,同时多路视频并行获取下一批次视频图像;

在各个gpu接收到相对应的待拼接图像后进行拼接计算,同时下一批次的图像被分配输出至多个gpu中,同时多路视频并行获取再下一批次视频图像;

在各个gpu完成当前批次图像拼接的计算任务后,将拼接结果传送至宿主机,同时各个gpu进行下一批次图像的拼接计算,同时下下批次的图像被分配输出至多个gpu中,同时多路视频并行获取再下一批次视频图像;

宿主机获取当前批次拼接后的视频图像,将所述拼接后的视频图像按照所述帧标记进行排序并推送,同时下一批次的拼接结果被传送至宿主机,同时各个gpu同时各个gpu进行下下一批次图像的拼接计算,同时再下批次的图像被分配输出至多个gpu中,同时多路视频并行获取再下一批次视频图像。

本发明方法实施例的技术方案为流处理过程,利用实时拼接过程中视频数据获取,视频数据传输,多路视频数据拼接计算过程中执行可以重叠的部分实现计算资源以及设备i/o资源的最大利用率;而且对于每一帧的全景视频拼接计算始终在一块gpu中执行,这种方式减少了拼接计算与gpu数量的依赖,并且该方法可以很容易拓展到任意数量的gpu计算平台中。

根据本发明的装置实施例,提供了一种基于多gpu的全景实时视频流处理装置,图2是本发明装置实施例的基于多gpu的全景实时视频流处理装置的结构示意图,如图2所示,根据本发明装置实施例的基于多gpu的全景实时视频流处理装置包括:获取模块20、分配模块22、排序模块24;以下对本发明实施例的各个模块进行详细的说明。

所述获取模块20,用于并行获取多路待拼接视频图像,得到当前批次视频图像,其中每路待拼接视频图像中的每一帧视频图像均带有帧标记。

具体的,所述获取模块20用于:

获取当前帧视频图像,对当前帧视频图像按获取的先后顺序进行标记;

在当前帧视频图像标记结束后获取下一帧视频图像并标记。

所述分配模块22,用于将属于同一帧标记的多路视频图像分配至同一个gpu,将所述当前批次视频图像分配至多个gpu中。

具体的,所述分配模块22用于:

将当前批次视频图像分别存入n个第一存储队列,其中,将属于同一帧标记的多路视频图像存入相同的第一存储队列;

将n个第一存储队列中的视频图像分别发送至n个gpu中。

优选的,所述分配模块22用于:将所述当前批次视频图像平均分配至多个gpu中,以使每个gpu中进行视频图像拼接的时间基本相同。

所述排序模块24,用于获取当前批次拼接后的视频图像,将所述拼接后的视频图像按照所述帧标记进行排序并推送。

具体的,所述排序模块24用于:

获取n个gpu中拼接后的视频图像,并存入n个第二存储队列;

获取n个第二存储队列的拼接后的视频图像。

为了更加详细的说明本发明的装置实施例和方法实施例,给出实例1。实例1中一种基于多gpu的高分辨率全景实时视频流处理方法,对于每一批的视频数据主要包括以下处理过程:多路视频并行接收;视频帧标记;视频数据同步传输至多个gpu;多个gpu同步拼接计算;多个gpu拼接结果传输至宿主机;全景视频帧排序;推送全景视频流。

所述多路视频并行接收采用高清摄像机作为图像接收内容,启动与视频路数相同的线程,每个线程负责一个摄像机视频的获取。

所述视频帧标记是对每个批次的视频帧按照产生的先后顺序进行顺序标记。

所述视频数据同步传输至多个gpu是将每一批的视频数据按照gpu的数量进行平均分配,每个gpu对应一定数量的待拼接处理的视频帧数据。每个gpu对应的视频帧数据传输至gpu中。

所述多个gpu同步拼接计算是每个gpu同步进行拼接计算。

所述多个gpu拼接结果传输至主机是每个gpu拼接完成的全景视频帧传送至gpu所在的宿主机。

所述宿主机是搭载gpu的主机。

所述全景视频帧排序是在当前批次的所有全景帧视频拼接完成并传送至gpu所在宿主机,按照视频帧的标记进行先后排序。

所述推送全景视频流是由独立线程对完成排序的全景视频帧进行推流。

图3为实例1中每批次的视频数据处理的流程,与之相对应的图4为实例1中视频数据在处理时数据流的示意图。

如图3和图4所示,根据待拼接的接入视频的路数启动相应的数量的线程与队列,每个线程负责获取实时的视频数据并存入相对应的队列,并且对每一帧的视频图像进行顺序标记,每个线程的操作相对独立,互不干扰,每个线程在做完标记操作后循环至下一帧视频的获取。

根据宿主机中gpu的数量将待拼接的视频帧数据进行等分,使得每个gpu分配到相同量的拼接计算任务,目的在于能够让每个gpu都会在差不多的时间节点完成计算任务。

启动与gpu数量相当的线程,每个线程分别将待拼接计算的任务传输至对应的gpu中的存储队列1,如图5所示,每个线程在传输数据时互不干扰,且每个线程在传输完成此批数据后会自动实施存储队列1中下一批数据的传输。

每个gpu进行各自计算任务的拼接计算,具体进行图像预处理、图像投影、图像特征提取、图像配准、图像融合操作过程,将完成拼接的全景视频帧存入到存储队列2中,对每个gpu来说,该过程是不停地进行,除非该gpu的存储队列1中没有待拼接数据。各个gpu进行独立的计算,gpu之间没有交互,保证了gpu计算单元数量的可扩展性。

启动与gpu数量相当的线程,将拼接完成的全景视频帧从相应的gpu存储队列2中传输至宿主机内存中,每个线程在传输完成此批数据后会自动实施存储队列2中下一批数据的传输

宿主机中启动一个守护进程实时对宿主机内存中的全景视频帧图像进行排序。

宿主机中推流线程实时将排好序的视频帧以视频流的形式保存或者推送。

整个处理过程的特点是以流水处理的方式进行,如图6所示,对一系列待拼接的视频数据a0来说,平均分配的数据a00、a01、a02的数据传输、在多gpu上的拼接计算以及最终的全景视频流的推送都是以流水方式进行。

本发明的有益效果如下:

(1)利用实时拼接过程中视频数据获取,视频数据传输,多路视频数据拼接计算过程中执行可以重叠的部分实现计算资源以及设备i/o资源的最大利用率。

(2)对于每一帧的全景视频拼接计算始终在一块gpu中执行,这种方式减少了拼接计算与gpu数量的依赖,并且该方法可以很容易拓展到任意数量的gpu计算平台中。

(3)采用gpu/cuda并行处理技术,通过对gpu的扩展,实现多gpu架构并发运算,解决了高分辨率拼接运算不及时的问题,可以实时完成拼接融合与编码。

以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1