• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    圖形/仿真

    將嘈雜的低分辨率視頻轉換為高質量視頻,為最終用戶帶來迷人的體驗

    由于流行病相關的關閉和在家辦公的政策,視頻會議、音頻和視頻流以及電信最近出現了爆炸性增長。企業、教育機構和公共部門機構對虛擬協作和內容創建應用程序的需求正在飆升。在線交流的關鍵部分是視頻流,無論是簡單的視頻通話還是面向廣大受眾的流媒體內容。同時,這些流是在線通信中網絡帶寬最密集的部分,通常伴隨著噪聲和偽影。

    為了解決這些視頻質量挑戰, NVIDIA Maxine 視頻效果 SDK提供了基于人工智能的視覺功能,將嘈雜、低分辨率的視頻流轉換為令人愉悅的用戶體驗。這篇文章演示了如何使用標準網絡攝像頭輸入運行這些效果,并輕松地將它們集成到視頻會議和內容創建管道中。

    添加細節并提高分辨率

    對于因圖像幀的低分辨率而導致的低視頻質量, Maxine video Effects SDK 提供了兩種基于人工智能的最先進視覺效果:超分辨率和放大。

    超分辨率(圖 1 )從提供的輸入圖像生成具有更高分辨率和更好紋理的優質圖像。它提供了全面的增強功能,同時保留了內容。這種視覺效果最好用于無損壓縮數據,如 H . 264 。您可以使用此功能將介質縮放 1 . 33 倍、 1 . 5 倍、 2 倍、 3 倍和 4 倍。

    In the before/after picture, you can observe increases in both structural details and textures.
    圖 1 。超分辨率功能正在發揮作用

    要調整超分辨率效果,請選擇其模式:

    • 0 :建議用于包含編碼工件的流和使用有損壓縮編碼的流。
    • 1 :應用強大的視覺增強功能,建議用于使用無損壓縮編碼的流

    Upscaler (圖 2 )是一種快速且輕量化的方法,用于提高輸入視頻的視頻分辨率,同時也為圖像添加細節。它著重于框架內容的幾何結構,并增強其細節。除了更好的圖像分辨率外,放大效果還能產生更清晰的圖像。

    In the before/after picture, you can observe enhanced structural details.
    圖 2 。放大功能正在運行

    您可以在[0 , 1]范圍內設置 Upscaler 的增強參數:

    • 0 :在不增強圖像的情況下提高分辨率。
    • 1 :最大圖像清晰度和清晰度視覺效果增強。

    默認情況下, Upscaler 的增強參數設置為 0 . 4 。

    消除網絡攝像頭視頻噪音并減少編碼瑕疵

    造成或破壞最終用戶體驗的視頻噪音的根本原因有很多。然而,兩種最常見的噪聲源是網絡攝像頭噪聲和編碼偽影。

    網絡攝像頭噪聲源的示例包括攝像頭傳感器類型、曝光或照明級別。在最終用戶生成的流的環境中,如果環境照明不好或使用的相機質量較差,則情況尤其如此。這些類型的噪音在很大程度上取決于攝像頭中傳感器的類型。

    視頻流中的編碼偽影是傳輸幀所需的帶寬限制的結果。有損壓縮通常包括丟棄圖像中的一些紋理信息以及數據編碼。有損壓縮標準的常見示例是圖像的 JPEG 和視頻的 H . 264 。流式傳輸此媒體時,每單位時間的流帶寬稱為比特率。

    在流式傳輸環境中,可用于流式傳輸壓縮內容的帶寬不是恒定的。這種可變性導致編碼器的比特數少于壓縮幀所需的比特數,從而產生壓縮偽影。壓縮工件可以有多種形式,但最常見的形式之一是塊狀工件。

    Maxine Video Effects SDK 的視頻去噪(圖 3 )功能使您能夠消除網絡攝像頭流的噪音并保留細節,從而獲得更好的最終用戶體驗。

    In the before/after picture, you can observe that camera noise is removed.
    圖 3 。視頻噪音消除功能正在發揮作用

    此功能有兩個具有強度值的變體:

    • 0 :用于較弱的降噪效果,以確保紋理質量的保持。這是低噪音介質的理想選擇。
    • 1 :對于可能影響紋理質量的大量降噪效果。此變體可以輕松地與放大或超分辨率鏈接,以添加細節、增強和提高分辨率。

    Maxine 偽影減少功能(圖 4 )減少了視頻通話帶寬下降時遇到的塊狀偽影。它還減少了ringing蚊子的噪音,同時保留了原始視頻的細節。

    In the before/after picture, you can observe that encoding artifacts are rem
    圖 4 。偽影減少功能正在發揮作用

    此基于 AI 的功能針對兩種模式進行了優化:

    • 0 :保留低梯度信息,同時減少瑕疵。此模式更適合于更高比特率的視頻。
    • 1 :提供更好的輸出流。此模式應適用于具有較低比特率的高質量無損視頻。

    允許最終用戶選擇虛擬背景

    為了使最終用戶能夠在既不涉及個人又不分散注意力的環境中參加會議, Maxine Video Effects SDK 提供了虛擬背景功能。

    虛擬背景功能(圖 5 )基本上生成了一個遮罩來分割前景,在本例中,是來自流的人。您可以提供任何媒體作為背景,無論是圖像還是視頻。您還可以實現多個創造性應用程序,例如在同一背景中添加多個用戶。例如,如果兩位評論員正在談論一個現場活動,您可以在該活動的現場提要上對這兩個評論員進行分段。另一個例子是將用戶分割出來,并將其覆蓋在計算機的實時提要上。這樣,一個或多個用戶可以同時實時呈現,同時保持沉浸感。所有這些操作都使用 GPU 提供的并行性,增加了可實時處理的流的數量。

    In the picture, a new background is being applied.
    圖 5 。虛擬背景功能正在運行

    虛擬背景功能以兩種模式運行:

    • 質量模式:實現最高分割質量
    • 性能模式:實現最快的性能

    您還可以使用此功能生成具有可調模糊強度的模糊背景

    連鎖視頻效果功能

    為了處理預壓縮的視頻或帶有噪聲的視頻,以及提供更高的分辨率,我們建議將 Upscaler 鏈接到偽影減少視頻去噪,具體取決于使用情況。有關更多信息,請參閱探索 API 。您還可以使用 SDK 打包的UpscalePipeline 示例應用程序獲得開箱即用的體驗。

    在 Windows 和 Linux 上使用容器和安裝 Video Effects SDK

    NVIDIA 通過 Docker 容器以 SDK 包的形式在 Windows 和 Linux 平臺上提供 Maxine Video Effects SDK 。

    使用容器的好處是高可擴展性,并且由于減少了部署和采用時間而節省了時間和成本。將容器與 Kubernetes 一起使用提供了一種健壯且易于擴展的部署策略。此外,由于容器的預包裝性質,您不必擔心容器內的特定安裝。

    在本文中,我們將重點介紹如何在容器和窗口中使用 Maxine Video Effects SDK 。繼續安裝之前,請確保滿足所有硬件要求。

    如果您對 NVIDIA 軟件堆棧有豐富的經驗,并且希望在裸機 Linux 系統上部署視頻效果 SDK ,請參閱Maxine 開始了頁面。

    在 Docker 容器中使用視頻效果 SDK

    在容器上安裝和利用高性能視頻效果 SDK 及其最先進的 AI 模型需要四個步驟:

    您需要訪問 NVIDIA 圖靈、 NVIDIA 伏特或 NVIDIA 安培體系結構生成數據中心 GPU s : T4 、 V100 、 A100 、 A10 或 A30 。

    在 Windows 上安裝視頻效果 SDK

    在 Windows 上安裝 SDK 是一個簡單的過程:

    您必須擁有 NVIDIA RTX 卡,才能從 Windows 上 Maxine Video Effects SDK 的加速吞吐量和縮短延遲中獲益。要在數據中心卡(如 A100 )上運行此 SDK ,請使用 Linux 包。

    示例應用程序

    Video Effects SDK 附帶五個示例應用程序:

    • AigsEffectApp
    • BatchEffectApp
    • DenoiseEffectApp
    • UpscalePipelineApp
    • VideoEffectsApp

    這些應用程序包含運行 Video Effects SDK 中所有功能的示例代碼。要體驗這些功能,還可以構建應用程序并使用預構建的 Windows bash 腳本來運行它們。

    您可以使用 SDK 的/VideoFX/share文件夾中的build_samples.sh腳本構建應用程序。如果您使用的是 Docker 容器,則這是條目文件夾。

    bash build_samples.sh’

    該腳本構建示例應用程序并安裝一些示例應用程序特定的依賴項。這一步 MIG 需要幾分鐘的時間。構建后,在構建應用程序的文件夾中,每個應用程序至少可以找到一個 bash 腳本。以下是其中一個應用程序的詳細介紹:

    #!/bin/sh
    
    . ./setup_env.sh
    
    VideoEffectsApp \
            --model_dir=$_VFX_MODELS \
            --in_file=$_VFX_SHARE/samples/input/input1.jpg \
            --out_file=ar_1.png \
            --effect=ArtifactReduction \
            --mode=1 \
            --show
    
    VideoEffectsApp \
            --model_dir=$_VFX_MODELS \
            --in_file=$_VFX_SHARE/samples/input/input1.jpg \
            --out_file=ar_0.png \
            --effect=ArtifactReduction \
            --mode=0 \
            --show
    
    VideoEffectsApp \
            --model_dir=$_VFX_MODELS \
            --in_file=$_VFX_SHARE/samples/input/input2.jpg \
            --out_file=sr_0.png \
            --effect=SuperRes \
            --resolution=2160 \
            --mode=0 \
            --show
    
    VideoEffectsApp \
            --model_dir=$_VFX_MODELS \
            --in_file=$_VFX_SHARE/samples/input/input2.jpg \
            --out_file=sr_1.png \
            --effect=SuperRes \
            --resolution=2160 \
            --mode=1 \
            --show

    這是一個引用示例應用程序之一VideoEffectsApp的命令行示例。您可以調整以下參數以體驗不同的功能:

    • --effect:選擇效果:工件 CTR 導出、超級資源或高級。
    • --mode:在兩種模式之間切換: 0 、 1 。
    • --strength:切換放大倍增器增強倍增器: 0 , 1 。
    • --resolution:用于輸入所選介質的目標分辨率。例如,如果要翻倍 720p 介質,請使用 1440 。

    在本地運行這些效果時,您可以使用鍵盤控件切換效果,并通過網絡攝像頭提要實時體驗效果。有關更多信息,請參閱示例應用程序參考。如果您對鏈接這些效果感興趣,請繼續閱讀。最后,如果您有興趣了解有關批處理和最大化吞吐量的更多信息,請參閱BatchEffectApp示例應用程序。

    使用 API 鏈接多個視頻效果功能

    鏈接效果對于許多應用程序來說都非常有趣。這篇文章主要關注如何將兩種效果很好地結合在一起:工件減少和放大。另一個例子是為嘈雜的網絡攝像頭流運行視頻噪聲消除和超分辨率或放大。您可以選擇最適合您的用例的效果。

    下面是關于 API 及其用法的更多信息。圖 6 顯示了使用 Video Effects SDK 函數的高級過程:

    • 創建和配置效果
    • 配置 CUDA 流、分配緩沖區和加載模型
    • 加載數據并運行效果
    The process includes the following steps: Create the effect, load the model, and use the effect.
    圖 6 。使用 Video Effects SDK API 的三個簡單步驟

    下面的視頻介紹了這個流程,但是這個流程有很多細節,我們將在后面的文章中討論。此外,視頻還介紹了在 Maxine 虛擬背景下使用 GPU 和 API 詳細信息時必須了解的基本知識。本文中的所有代碼示例都可以在 SDK 示例應用程序中找到。

    ?
    視頻 1 。創建自己的虛擬背景

    創建和配置效果

    第一步是創建要使用的效果。在這篇文章中,我們將討論偽影減少和放大。您可以使用NvVFX_CreateEffect函數創建指定類型的視頻效果過濾器的實例。此函數需要效果選擇器并返回效果句柄。效果選擇器是一個字符串,您可以使用它拾取要創建的效果。

    NvVFX_Handle _arEff;
    NvVFX_Handle _upscaleEff;
    NvVFX_EffectSelector first;
    NvVFX_EffectSelector second;
    
    NvVFX_CreateEffect(first, &_arEff);
    NvVFX_CreateEffect(second, &_upscaleEff);

    然后,使用NvVFX_SetString函數指定特征的模型位置。

    NvVFX_SetString(_arEff, NVVFX_MODEL_DIRECTORY, modelDir);
    NvVFX_SetString(_upscaleEff, NVVFX_MODEL_DIRECTORY, modelDir);

    大多數視頻特效 SDK 功能都有模式。如前所述,這些模式本質上是相同效果的兩種不同變體。在這種情況下,偽影減少有兩種模式,您可以使用NvVFX_SetU32函數設置。對于 Upscaler ,這是一個浮點值,可以使用NvVFX_SetF32函數設置為 0 到 1 之間的任何數字。

    int FLAG_arStrength = 0;
    float FLAG_upscaleStrength= 0.2f;
    
    NvVFX_SetU32(_arEff, NVVFX_STRENGTH, FLAG_arStrength);
    NvVFX_SetF32(_upscaleEff, NVVFX_STRENGTH, FLAG_upscaleStrength);

    配置 CUDA 流、分配緩沖區和加載模型

    創建效果后,下面介紹如何使用 CUDA 并加載模型。 CUDA 流是一組按照發出操作的確切順序執行的操作。記住這一點,第一步是創建這個流。您可以使用NvVFX_CudaStreamCreate函數創建此流。

    CUstream _stream;
    NvVFX_CudaStreamCreate(&_stream);

    現在已經有了流,請將效果指定給流。您可以通過NvVFX_SetCudaStream函數實現這一點。

    NvVFX_SetCudaStream(_arEff, NVVFX_CUDA_STREAM, stream));
    NvVFX_SetCudaStream(_upscaleEff, NVVFX_CUDA_STREAM, stream);

    CUDA 流已經就位,下面介紹如何移動數據。在本例中,您正在移動圖像幀。如果您是 GPU s 的新手,您 MIG ht 會問:“為什么我們要將數據移動到哪里?”

    GPU 通常有自己的專用視頻 RAM ( VRAM )。這就像插入系統主板的普通 RAM 一樣。擁有專用 VRAM 的關鍵優勢在于,存儲在該存儲器中的數據處理速度明顯快于常規 RAM 上的數據。當我們說“將數據從 CPU 內存移到 GPU 內存”時,我們指的是這兩種 RAM 之間的內存傳輸。

    Memory transfer between CPU and GPU memory goes both ways.
    圖 7 。 CPU 與 GPU 緩沖區概述

    在使用單一效果的典型場景中,此傳輸將毫不費力,需要兩個 CPU 內存緩沖區和兩個 GPU 緩沖區。在這兩種情況下,一個用于源,另一個用于已處理的幀。

    Memory transfer for single video effect with CPU and GPU memory for source and processed frame.
    圖 8 。在 GPU 和 CPU 上的不同內存緩沖區之間移動數據

    當您鏈接需要兩種不同圖像像素布局的功能時,會增加一層復雜性。 GPU 上還必須有兩個緩沖區,一個用于存儲第一個效果的輸出幀,另一個用于存儲第二個效果的輸入。圖 9 顯示了流程。現在不要擔心函數名;我們將在本文后面的“運行效果”部分中對它們進行回顧。

    Memory transfer for chained video effects with additional intermediate buffer layer.
    圖 9 。在 GPU 和 CPU 上的不同內存緩沖區之間移動數據,同時考慮像素格式

    考慮到這種高層次的理解,下面介紹如何設置管道。設置此管道有兩個步驟:分配內存和指定輸入和輸出緩沖區。

    首先,使用NvCVImage_Alloc函數為 GPU 緩沖區分配內存。

    NvCVImage _srcGpuBuf;
    NvCVImage _interGpuBGRf32pl;
    NvCVImage _interGpuRGBAu8;
    NvCVImage _dstGpuBuf;
    
    // GPU Source Buffer
    NvCVImage_Alloc(&_srcGpuBuf, _srcImg.cols, _srcImg.rows, NVCV_BGR, NVCV_F32, NVCV_PLANAR, NVCV_GPU, 1); 
    
    // GPU Intermediate1 Buffer
    NvCVImage_Alloc(&_interGpuBGRf32pl, _srcImg.cols, _srcImg.rows, NVCV_BGR, NVCV_F32, NVCV_PLANAR, NVCV_GPU, 1);
    
    // GPU Intermediate2 Buffer
    NvCVImage_Alloc(&_interGpuRGBAu8, _srcImg.cols, _srcImg.rows, NVCV_RGBA, NVCV_U8, NVCV_INTERLEAVED, NVCV_GPU, 32);
    
    // GPU Destination Buffer
    NvCVImage_Alloc(&_dstGpuBuf, _dstImg.cols, _dstImg.rows, NVCV_RGBA, NVCV_U8, NVCV_INTERLEAVED, NVCV_GPU, 32);

    這似乎是一個復雜的函數,但在較高的層次上,您正在為給定類型的圖像幀指定所需類型的緩沖區的基本參數。例如,它是 RGBA 圖像嗎?每個組件都有 8 位嗎?這些位是平面、粗塊還是其他格式?有關詳細信息,請參閱設置輸入和輸出圖像緩沖區

    其次,使用NvVFX_SetImage函數指定為每個效果創建的輸入和輸出緩沖區。

    // Setting buffers for 
    NvVFX_SetImage(_arEff, NVVFX_INPUT_IMAGE,  &_srcGpuBuf);
    NvVFX_SetImage(_arEff, NVVFX_OUTPUT_IMAGE, &_interGpuBGRf32pl);
    
    NvVFX_SetImage(_upscaleEff, NVVFX_INPUT_IMAGE, &_interGpuRGBAu8);
    NvVFX_SetImage(_upscaleEff, NVVFX_OUTPUT_IMAGE, &_dstGpuBuf);

    最后,加載模型。NvVFX_Load函數也執行相同的操作。它還驗證為生效選擇的參數是否有效。

    NvVFX_Load(_arEff);
    NvVFX_Load(_upscaleEff);

    運行效果

    現在管道已經設置好,您可以繼續運行效果。將幀從 CPU / GPU 源移動到相應的輸入緩沖區。NvCVImage_Transfer函數可用于移動幀, NvVFX _ Run 函數用于運行效果。

    // Frame moves from CPU buffer to GPU src buffer
    NvCVImage_Transfer(&_srcVFX, &_srcGpuBuf, 1.f/255.f, stream, &_tmpVFX);
    
    // Running Artifact Reduction
    NvVFX_Run(_arEff, 0);
    
    // Frame moves from GPU intermediate buffer 1 to buffer 2
    NvCVImage_Transfer(&_interGpuBGRf32pl, &_interGpuRGBAu8, 255.f, stream, &_tmpVFX);
    
    // Running Upscaler
    NvVFX_Run(_upscaleEff, 0));
    
    // Frame moves from GPU destination buffer to CPU buffer
    NvCVImage_Transfer(&_dstGpuBuf, &_dstVFX, 1.f, stream, &_tmpVFX));

    第一步,似乎有多個運動部件,但只有三個主要步驟:創建效果、設置 CUDA 流以及管理數據流,最后運行效果。

    所有三種 Maxine SDK- 視頻效果 SDK音頻效果 SDK增強現實 SDK的設計都類似。您可以將相同的概念應用于音頻效果和增強現實 SDK ,只需稍作修改。

    將視頻效果 SDK 集成到您的應用程序中

    如本文所示, Maxine Video Effects SDK 提供了許多 AI 功能,使您能夠拍攝嘈雜的低分辨率視頻,并向最終用戶提供高質量的視頻。此外,您可以將多個效果鏈接在一起,并創建視頻管道。要將這些視覺效果應用于視頻會議、流媒體或電信應用程序,請參見Maxine 開始了頁。讓我們知道您的想法或您是否有任何疑問。

    0

    標簽

    人人超碰97caoporen国产