練習 - 執行 NVIDIA DeepStream Graph Composer 參考應用程式

已完成

讓我們進一步了解 DeepStream Graph Composer 啟用的 IVA 應用程式工作流程。 我們先前提到 NVIDIA 的雲端存放庫或其他外部登錄可以提供拖放元件,以便在 DeepStream Composer 應用程式中使用。

您可以使用這些延伸模組,將特性和功能新增至 Composer 應用程式。 最後,您可以此工具及配套的「容器建立器」來封裝和散發 IVA 工作負載。 下圖顯示此程序。

顯示重新造訪 NVIDIA DeepStream 工作流程的圖表。

  1. 若要開始,請同步至 NVIDIA 的公用雲端存放庫,以使用最新發佈的延伸模組。 若要完成此程序,請在主機上的終端執行下列命令:

    registry repo sync -n ngc-public
    

    這個命令產生的輸出與以下範例類似:

    2021-09-13 21:32:39,127 - Registry - INFO - Syncing repo ngc-public ...
    2021-09-13 21:32:41,022 - Registry - INFO - Syncing extension NvDsBaseExt version 0.0.1
    2021-09-13 21:32:45,833 - Registry - INFO - Syncing extension NvDsAnalyticsExt version 0.0.1
    2021-09-13 21:32:50,676 - Registry - INFO - Syncing extension NvDsCloudMsgExt version 0.0.1
    2021-09-13 21:32:55,743 - Registry - INFO - Syncing extension NvDsConverterExt version 0.0.1
    2021-09-13 21:33:00,579 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.2
    2021-09-13 21:33:05,283 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.1
    2021-09-13 21:33:10,300 - Registry - INFO - Syncing extension NvDsInferenceExt version 0.0.1
    2021-09-13 21:33:15,899 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.2
    2021-09-13 21:33:20,574 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.1
    2021-09-13 21:33:25,722 - Registry - INFO - Syncing extension NvDsInterfaceExt version 0.0.1
    2021-09-13 21:33:30,814 - Registry - INFO - Syncing extension NvDsMuxDemuxExt version 0.0.1
    Repository synced
    
  2. 使用此命令來確認延伸模組已安裝且可供使用:

    registry extn list
    

    您可能會注意到,其中許多延伸模組的開頭字首對應至 DeepStream SDK 所含的 NVIDIA 最佳化 GStreamer 外掛程式。 例如,NvDsMuxDemuxExt 延伸模組提供與 Gst-nvstreamdemux 互動的視覺元件。

  3. 現在,使用此命令開啟 Composer 應用程式:

    composer
    

    螢幕擷取畫面顯示正在開啟 NVIDIA DeepStream Graph Composer。

    請注意,元件清單會植入應用程式使用者介面的右側。 元件會依延伸模組名稱分組。 如果清單未出現,您可能需要使用稍早執行的步驟,重新同步至 ncg-public 存放庫。 選取延伸模組名稱以檢視其所提供的元件,如下所示:

    螢幕擷取畫面顯示 NVIDIA DeepStream Graph Composer 元件。

    下列指導方針可協助您了解如何與 Composer 應用程式互動,以開發自訂應用程式:

    • 若要新增元件執行個體,請選取並保存元件名稱。 然後將其拖曳到圖形編輯器空間。
    • 若要顯示元件的名稱,請查看圖形區域中的「標頭」。 元件也可能包含輸入/輸出連接埠的「控制代碼」
    • 若要建立元件彼此之間的連線,請選取控制代碼,並在相容的輸入/輸出連接埠之間繪製連線。
    • 若要顯示元件詳細資料,請選取元件。 詳細資料會出現在應用程式右側的 [詳細資料] 視窗中。 您可以編輯此視窗中的屬性,以自訂元件的行為。
  4. 讓我們檢查參考應用程式,以顯示您遵循上述指導方針所建立的內容。 稍早在安裝 DeepStream 參考圖形套件時,許多範例都已安裝到下列路徑中:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. 在 Composer 應用程式中,選取 [檔案]>[開啟 Graph],然後移至 /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1 路徑。 選取 deepstream-test1.yaml 檔案。 然後選取 [確定]

      螢幕擷取畫面顯示 NVIDIA DeepStream Graph Composer 正在開啟 Test1 應用程式。

    2. 選取 NvDsSingleSrcInput 元件,然後 [詳細資料] 窗格會在應用程式右側開啟。 在 [詳細資料] 窗格中向下捲動,然後找出 [uri] 屬性,將使用設定視訊檔案的這個 URI 作為 IVA 管線中的輸入。

      螢幕擷取畫面顯示 NVIDIA DeepStream Graph Composer Test1 應用程式屬性。

    3. 如果您想要修改 [uri] 屬性以使用 RTSP 資料流,請將 [類型] 設定為等於 [4]。 提供 RTSP 路徑 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov。 此動作的效果與 DeepStream [source0] 設定群組輸入相同,如下所示:

      [source0]
      enable=1
      #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
      type=4
      uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
      num-sources=1
      #drop-frame-interval=2
      gpu-id=0
      # (0): memtype_device   - Memory type Device
      # (1): memtype_pinned   - Memory type Host Pinned
      # (2): memtype_unified  - Memory type Unified
      cudadec-memtype=0
      
  5. 接下來,查看此範例中呈現的 IVA 管線整體流程。 了解圖形的整體工作流程和預期行為之後,您接著將此工作負載設定為容器化工作負載,以便重新發佈和執行。

    螢幕擷取畫面顯示 NVIDIA DeepStream Graph Composer Test1 應用程式已滿。

    此應用程式使用 NvDsSingleSrcInput 取得視訊來源作為輸入,然後傳入 NvDsStreamMux (透過技術處理多個視訊輸入)。 NvDsStreamMux 的輸出會提供每一個視訊輸入的框架,以便傳送後在 NvDsInferVideo 中處理。 使用 ResNet 4 類別物件偵測器來套用推斷,例如自行車、汽車、行人或道路符號。 NvDsInferVideo 的推斷結果會傳遞至 NvDsPerClassObjectCounting,以顯示每個偵測到類別的計數,以及傳遞至 NvsOSD,這會產生具有週框方塊的螢幕偵測。 方塊是由 NvDsVideoRenderer 的最終連線所顯示。

  6. 若要確認此行為並查看其實際作用,請叫用內含的 execute_graph.sh 指令碼,並在 parameters.yaml 中傳入必要參數。 若要在 x86 型主機上執行 deepstream-test1.yaml 的圖表,請在終端執行下列命令:

    cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1
    /opt/nvidia/graph-composer/execute_graph.sh deepstream-test1.yaml parameters.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
    

    您應該會看到類似以下的輸出:

    螢幕擷取畫面顯示 NVIDIA DeepStream Graph Composer Test1 正在執行。

    注意

    如果您想要使用虛擬機器來滿足主機需求,當您嘗試執行使用 EGL 接收器來接收視覺化輸出的 DeepStream 應用程式時,可能會遇到問題。 若要解決此限制,請將 uri 來源的類型變更為代表 FakeSink1。 請注意,FakeSink 不會提供任何視覺輸出。 其可讓您的工作負載執行,但不會在相關的畫面上顯示處理結果。