練習 - 執行 NVIDIA DeepStream Graph Composer 參考應用程式
讓我們進一步了解 DeepStream Graph Composer 啟用的 IVA 應用程式工作流程。 我們先前提到 NVIDIA 的雲端存放庫或其他外部登錄可以提供拖放元件,以便在 DeepStream Composer 應用程式中使用。
您可以使用這些延伸模組,將特性和功能新增至 Composer 應用程式。 最後,您可以此工具及配套的「容器建立器」來封裝和散發 IVA 工作負載。 下圖顯示此程序。
若要開始,請同步至 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
使用此命令來確認延伸模組已安裝且可供使用:
registry extn list
您可能會注意到,其中許多延伸模組的開頭字首對應至 DeepStream SDK 所含的 NVIDIA 最佳化 GStreamer 外掛程式。 例如,NvDsMuxDemuxExt 延伸模組提供與 Gst-nvstreamdemux 互動的視覺元件。
現在,使用此命令開啟 Composer 應用程式:
composer
請注意,元件清單會植入應用程式使用者介面的右側。 元件會依延伸模組名稱分組。 如果清單未出現,您可能需要使用稍早執行的步驟,重新同步至 ncg-public 存放庫。 選取延伸模組名稱以檢視其所提供的元件,如下所示:
下列指導方針可協助您了解如何與 Composer 應用程式互動,以開發自訂應用程式:
- 若要新增元件執行個體,請選取並保存元件名稱。 然後將其拖曳到圖形編輯器空間。
- 若要顯示元件的名稱,請查看圖形區域中的「標頭」。 元件也可能包含輸入/輸出連接埠的「控制代碼」。
- 若要建立元件彼此之間的連線,請選取控制代碼,並在相容的輸入/輸出連接埠之間繪製連線。
- 若要顯示元件詳細資料,請選取元件。 詳細資料會出現在應用程式右側的 [詳細資料] 視窗中。 您可以編輯此視窗中的屬性,以自訂元件的行為。
讓我們檢查參考應用程式,以顯示您遵循上述指導方針所建立的內容。 稍早在安裝 DeepStream 參考圖形套件時,許多範例都已安裝到下列路徑中:
/opt/nvidia/deepstream/deepstream/reference_graphs/
在 Composer 應用程式中,選取 [檔案]>[開啟 Graph],然後移至 /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1 路徑。 選取 deepstream-test1.yaml 檔案。 然後選取 [確定]。
選取 NvDsSingleSrcInput 元件,然後 [詳細資料] 窗格會在應用程式右側開啟。 在 [詳細資料] 窗格中向下捲動,然後找出 [uri] 屬性,將使用設定視訊檔案的這個 URI 作為 IVA 管線中的輸入。
如果您想要修改 [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
接下來,查看此範例中呈現的 IVA 管線整體流程。 了解圖形的整體工作流程和預期行為之後,您接著將此工作負載設定為容器化工作負載,以便重新發佈和執行。
此應用程式使用
NvDsSingleSrcInput
取得視訊來源作為輸入,然後傳入NvDsStreamMux
(透過技術處理多個視訊輸入)。NvDsStreamMux
的輸出會提供每一個視訊輸入的框架,以便傳送後在NvDsInferVideo
中處理。 使用 ResNet 4 類別物件偵測器來套用推斷,例如自行車、汽車、行人或道路符號。NvDsInferVideo
的推斷結果會傳遞至NvDsPerClassObjectCounting
,以顯示每個偵測到類別的計數,以及傳遞至NvsOSD
,這會產生具有週框方塊的螢幕偵測。 方塊是由NvDsVideoRenderer
的最終連線所顯示。若要確認此行為並查看其實際作用,請叫用內含的
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
您應該會看到類似以下的輸出:
注意
如果您想要使用虛擬機器來滿足主機需求,當您嘗試執行使用 EGL 接收器來接收視覺化輸出的 DeepStream 應用程式時,可能會遇到問題。 若要解決此限制,請將 uri 來源的類型變更為代表 FakeSink 的 1。 請注意,FakeSink 不會提供任何視覺輸出。 其可讓您的工作負載執行,但不會在相關的畫面上顯示處理結果。