本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,特別涉及一種基于多gpu的全景實時視頻流處理方法及裝置。
背景技術(shù):
伴隨著計算機、電子技術(shù)的迅速發(fā)展,整個處理器計算速度和存儲量都有飛速增加,逐步滿足計算機視覺技術(shù)的實現(xiàn)。圖像拼接技術(shù)作為圖像處理、計算機視覺的一個重要研究方向,已廣泛應(yīng)用于機器人視覺系統(tǒng)、醫(yī)學(xué)圖像處理、監(jiān)控視頻等領(lǐng)域。
關(guān)于高分辨率視頻圖像拼接過程中,均需對圖像系列進行圖像配準(zhǔn)、最佳縫合線搜索、融合等步驟最終形成一張無縫的大視場圖像。單幀視頻圖像拼接計算量較大,大多采用并行計算的方法進行加速。目前在單塊高性能的gpu上可以實現(xiàn)4k(4096*2048)分辨率的全景視頻的實時拼接的質(zhì)量。但是,在全景播放器中,即使4k的全景視頻,用戶視窗在某一個視角只是顯示全景的一部分,因此視窗中的分辨率只有大約4k的六分之一。當(dāng)在全景視窗中的分辨率達到2k或者更高時,全景的分辨率會達到12k,甚至16k。目前,國內(nèi)外單塊gpu的全景視頻實時拼接尚未支持12k~16k甚至更高的分辨率。多gpu的協(xié)同拼接計算成為解決高分辨率視頻圖像實時拼接的途徑之一。
技術(shù)實現(xiàn)要素:
鑒于上述問題,本發(fā)明提供了一種基于多gpu的全景實時視頻流處理方法及裝置。
本發(fā)明提供的基于多gpu的全景實時視頻流處理方法,包括以下步驟:
并行獲取多路待拼接視頻圖像,得到當(dāng)前批次視頻圖像,其中每路待拼接視頻圖像中的每一幀視頻圖像均帶有幀標(biāo)記;
將屬于同一幀標(biāo)記的多路視頻圖像分配至同一gpu,將所述當(dāng)前批次視頻圖像分配至多個gpu中,同時獲取下一批次視頻圖像;
獲取當(dāng)前批次拼接后的視頻圖像,將所述拼接后的視頻圖像按照所述幀標(biāo)記進行排序并推送。
本發(fā)明還提供了一種基于多gpu的全景實時視頻流處理裝置,包括:
所述獲取模塊,用于并行獲取多路待拼接視頻圖像,得到當(dāng)前批次視頻圖像,其中每路待拼接視頻圖像中的每一幀視頻圖像均帶有幀標(biāo)記;
所述分配模塊,用于將屬于同一幀標(biāo)記的多路視頻圖像分配至同一gpu,將所述當(dāng)前批次視頻圖像分配至多個gpu中;
所述排序模塊,用于獲取當(dāng)前批次拼接后的視頻圖像,將所述拼接后的視頻圖像按照所述幀標(biāo)記進行排序并推送。
本發(fā)明有益效果如下:
本發(fā)明實施例中對于每一幀視頻圖像的全景拼接計算始終在一塊gpu中執(zhí)行,這種方式減少了拼接計算與gpu數(shù)量的依賴,并且該方法可以很容易拓展到任意數(shù)量的gpu計算平臺中,同時采用gpu/cuda并行處理技術(shù),通過對gpu的擴展,實現(xiàn)多gpu架構(gòu)并發(fā)運算,解決了高分辨率拼接運算不及時的問題,可以實時完成拼接融合與編碼。
附圖說明
圖1是本發(fā)明方法實施例的基于多gpu的全景實時視頻流處理方法的流程圖;
圖2是本發(fā)明裝置實施例的基于多gpu的全景實時視頻流處理裝置的結(jié)構(gòu)示意圖;
圖3為實例1中每批次的視頻數(shù)據(jù)處理的流程;
圖4為實例1中視頻數(shù)據(jù)在處理時數(shù)據(jù)流的示意圖;
圖5為實例1gpu中數(shù)據(jù)流示意圖;
圖6為實例1數(shù)據(jù)流水示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
為了解決高分辨率視頻圖像的實時拼接問題,本發(fā)明提供了一種基于多gpu的全景實時視頻流處理方法及裝置,以下結(jié)合附圖以及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
根據(jù)本發(fā)明的方法實施例,提供了一種基于多gpu的全景實時視頻流處理方法,圖1是本發(fā)明方法實施例的基于多gpu的全景實時視頻流處理方法的流程圖,如圖1所示,根據(jù)本發(fā)明方法實施例的基于多gpu的全景實時視頻流處理方法包括如下處理:
步驟101:并行獲取多路待拼接視頻圖像,得到當(dāng)前批次視頻圖像,其中每路待拼接視頻圖像中的每一幀視頻圖像均帶有幀標(biāo)記。
具體的,每路待拼接視頻圖像的獲取方法包括以下步驟:
獲取當(dāng)前幀視頻圖像,對當(dāng)前幀視頻圖像按獲取的先后順序進行標(biāo)記;
在當(dāng)前幀視頻圖像標(biāo)記結(jié)束后獲取下一幀視頻圖像并標(biāo)記。
步驟102:將屬于同一幀標(biāo)記的多路視頻圖像分配至同一gpu,將所述當(dāng)前批次視頻圖像分配至多個gpu中,同時獲取下一批次視頻圖像。
具體的,將所述當(dāng)前批次視頻圖像分配至多個gpu中,包括:
將當(dāng)前批次視頻圖像分別存入n個第一存儲隊列,其中,將屬于同一幀標(biāo)記的多路視頻圖像存入相同的第一存儲隊列;
將n個第一存儲隊列中的視頻圖像分別發(fā)送至n個gpu中。
優(yōu)選的,將所述當(dāng)前批次視頻圖像分配至多個gpu中包括:將所述當(dāng)前批次視頻圖像平均分配至多個gpu中,以使每個gpu中進行視頻圖像拼接的時間基本相同。
步驟103:獲取當(dāng)前批次拼接后的視頻圖像,將所述拼接后的視頻圖像按照所述幀標(biāo)記進行排序并推送。
具體的,獲取當(dāng)前批次拼接后的視頻圖像,包括:
獲取n個gpu中拼接后的視頻圖像,并存入n個第二存儲隊列;
獲取n個第二存儲隊列的拼接后的視頻圖像。
本發(fā)明方法實施例步驟102中,將屬于同一幀標(biāo)記的多路視頻圖像分配至同一gpu,將所述當(dāng)前批次視頻圖像分配至多個gpu中,同時獲取下一批次視頻圖像,也即本發(fā)明方法實施例的基于多gpu的全景實時視頻流處理方法具體為如下流程:
并行獲取多路待拼接視頻圖像,得到當(dāng)前批次視頻圖像,其中每路待拼接視頻圖像中的每一幀視頻圖像均帶有幀標(biāo)記;
將屬于同一幀標(biāo)記的多路視頻圖像分配至同一gpu,將所述當(dāng)前批次視頻圖像從宿主機分配輸至多個gpu中,同時多路視頻并行獲取下一批次視頻圖像;
在各個gpu接收到相對應(yīng)的待拼接圖像后進行拼接計算,同時下一批次的圖像被分配輸出至多個gpu中,同時多路視頻并行獲取再下一批次視頻圖像;
在各個gpu完成當(dāng)前批次圖像拼接的計算任務(wù)后,將拼接結(jié)果傳送至宿主機,同時各個gpu進行下一批次圖像的拼接計算,同時下下批次的圖像被分配輸出至多個gpu中,同時多路視頻并行獲取再下一批次視頻圖像;
宿主機獲取當(dāng)前批次拼接后的視頻圖像,將所述拼接后的視頻圖像按照所述幀標(biāo)記進行排序并推送,同時下一批次的拼接結(jié)果被傳送至宿主機,同時各個gpu同時各個gpu進行下下一批次圖像的拼接計算,同時再下批次的圖像被分配輸出至多個gpu中,同時多路視頻并行獲取再下一批次視頻圖像。
本發(fā)明方法實施例的技術(shù)方案為流處理過程,利用實時拼接過程中視頻數(shù)據(jù)獲取,視頻數(shù)據(jù)傳輸,多路視頻數(shù)據(jù)拼接計算過程中執(zhí)行可以重疊的部分實現(xiàn)計算資源以及設(shè)備i/o資源的最大利用率;而且對于每一幀的全景視頻拼接計算始終在一塊gpu中執(zhí)行,這種方式減少了拼接計算與gpu數(shù)量的依賴,并且該方法可以很容易拓展到任意數(shù)量的gpu計算平臺中。
根據(jù)本發(fā)明的裝置實施例,提供了一種基于多gpu的全景實時視頻流處理裝置,圖2是本發(fā)明裝置實施例的基于多gpu的全景實時視頻流處理裝置的結(jié)構(gòu)示意圖,如圖2所示,根據(jù)本發(fā)明裝置實施例的基于多gpu的全景實時視頻流處理裝置包括:獲取模塊20、分配模塊22、排序模塊24;以下對本發(fā)明實施例的各個模塊進行詳細的說明。
所述獲取模塊20,用于并行獲取多路待拼接視頻圖像,得到當(dāng)前批次視頻圖像,其中每路待拼接視頻圖像中的每一幀視頻圖像均帶有幀標(biāo)記。
具體的,所述獲取模塊20用于:
獲取當(dāng)前幀視頻圖像,對當(dāng)前幀視頻圖像按獲取的先后順序進行標(biāo)記;
在當(dāng)前幀視頻圖像標(biāo)記結(jié)束后獲取下一幀視頻圖像并標(biāo)記。
所述分配模塊22,用于將屬于同一幀標(biāo)記的多路視頻圖像分配至同一個gpu,將所述當(dāng)前批次視頻圖像分配至多個gpu中。
具體的,所述分配模塊22用于:
將當(dāng)前批次視頻圖像分別存入n個第一存儲隊列,其中,將屬于同一幀標(biāo)記的多路視頻圖像存入相同的第一存儲隊列;
將n個第一存儲隊列中的視頻圖像分別發(fā)送至n個gpu中。
優(yōu)選的,所述分配模塊22用于:將所述當(dāng)前批次視頻圖像平均分配至多個gpu中,以使每個gpu中進行視頻圖像拼接的時間基本相同。
所述排序模塊24,用于獲取當(dāng)前批次拼接后的視頻圖像,將所述拼接后的視頻圖像按照所述幀標(biāo)記進行排序并推送。
具體的,所述排序模塊24用于:
獲取n個gpu中拼接后的視頻圖像,并存入n個第二存儲隊列;
獲取n個第二存儲隊列的拼接后的視頻圖像。
為了更加詳細的說明本發(fā)明的裝置實施例和方法實施例,給出實例1。實例1中一種基于多gpu的高分辨率全景實時視頻流處理方法,對于每一批的視頻數(shù)據(jù)主要包括以下處理過程:多路視頻并行接收;視頻幀標(biāo)記;視頻數(shù)據(jù)同步傳輸至多個gpu;多個gpu同步拼接計算;多個gpu拼接結(jié)果傳輸至宿主機;全景視頻幀排序;推送全景視頻流。
所述多路視頻并行接收采用高清攝像機作為圖像接收內(nèi)容,啟動與視頻路數(shù)相同的線程,每個線程負責(zé)一個攝像機視頻的獲取。
所述視頻幀標(biāo)記是對每個批次的視頻幀按照產(chǎn)生的先后順序進行順序標(biāo)記。
所述視頻數(shù)據(jù)同步傳輸至多個gpu是將每一批的視頻數(shù)據(jù)按照gpu的數(shù)量進行平均分配,每個gpu對應(yīng)一定數(shù)量的待拼接處理的視頻幀數(shù)據(jù)。每個gpu對應(yīng)的視頻幀數(shù)據(jù)傳輸至gpu中。
所述多個gpu同步拼接計算是每個gpu同步進行拼接計算。
所述多個gpu拼接結(jié)果傳輸至主機是每個gpu拼接完成的全景視頻幀傳送至gpu所在的宿主機。
所述宿主機是搭載gpu的主機。
所述全景視頻幀排序是在當(dāng)前批次的所有全景幀視頻拼接完成并傳送至gpu所在宿主機,按照視頻幀的標(biāo)記進行先后排序。
所述推送全景視頻流是由獨立線程對完成排序的全景視頻幀進行推流。
圖3為實例1中每批次的視頻數(shù)據(jù)處理的流程,與之相對應(yīng)的圖4為實例1中視頻數(shù)據(jù)在處理時數(shù)據(jù)流的示意圖。
如圖3和圖4所示,根據(jù)待拼接的接入視頻的路數(shù)啟動相應(yīng)的數(shù)量的線程與隊列,每個線程負責(zé)獲取實時的視頻數(shù)據(jù)并存入相對應(yīng)的隊列,并且對每一幀的視頻圖像進行順序標(biāo)記,每個線程的操作相對獨立,互不干擾,每個線程在做完標(biāo)記操作后循環(huán)至下一幀視頻的獲取。
根據(jù)宿主機中g(shù)pu的數(shù)量將待拼接的視頻幀數(shù)據(jù)進行等分,使得每個gpu分配到相同量的拼接計算任務(wù),目的在于能夠讓每個gpu都會在差不多的時間節(jié)點完成計算任務(wù)。
啟動與gpu數(shù)量相當(dāng)?shù)木€程,每個線程分別將待拼接計算的任務(wù)傳輸至對應(yīng)的gpu中的存儲隊列1,如圖5所示,每個線程在傳輸數(shù)據(jù)時互不干擾,且每個線程在傳輸完成此批數(shù)據(jù)后會自動實施存儲隊列1中下一批數(shù)據(jù)的傳輸。
每個gpu進行各自計算任務(wù)的拼接計算,具體進行圖像預(yù)處理、圖像投影、圖像特征提取、圖像配準(zhǔn)、圖像融合操作過程,將完成拼接的全景視頻幀存入到存儲隊列2中,對每個gpu來說,該過程是不停地進行,除非該gpu的存儲隊列1中沒有待拼接數(shù)據(jù)。各個gpu進行獨立的計算,gpu之間沒有交互,保證了gpu計算單元數(shù)量的可擴展性。
啟動與gpu數(shù)量相當(dāng)?shù)木€程,將拼接完成的全景視頻幀從相應(yīng)的gpu存儲隊列2中傳輸至宿主機內(nèi)存中,每個線程在傳輸完成此批數(shù)據(jù)后會自動實施存儲隊列2中下一批數(shù)據(jù)的傳輸
宿主機中啟動一個守護進程實時對宿主機內(nèi)存中的全景視頻幀圖像進行排序。
宿主機中推流線程實時將排好序的視頻幀以視頻流的形式保存或者推送。
整個處理過程的特點是以流水處理的方式進行,如圖6所示,對一系列待拼接的視頻數(shù)據(jù)a0來說,平均分配的數(shù)據(jù)a00、a01、a02的數(shù)據(jù)傳輸、在多gpu上的拼接計算以及最終的全景視頻流的推送都是以流水方式進行。
本發(fā)明的有益效果如下:
(1)利用實時拼接過程中視頻數(shù)據(jù)獲取,視頻數(shù)據(jù)傳輸,多路視頻數(shù)據(jù)拼接計算過程中執(zhí)行可以重疊的部分實現(xiàn)計算資源以及設(shè)備i/o資源的最大利用率。
(2)對于每一幀的全景視頻拼接計算始終在一塊gpu中執(zhí)行,這種方式減少了拼接計算與gpu數(shù)量的依賴,并且該方法可以很容易拓展到任意數(shù)量的gpu計算平臺中。
(3)采用gpu/cuda并行處理技術(shù),通過對gpu的擴展,實現(xiàn)多gpu架構(gòu)并發(fā)運算,解決了高分辨率拼接運算不及時的問題,可以實時完成拼接融合與編碼。
以上所述僅為本發(fā)明的實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的權(quán)利要求范圍之內(nèi)。