Exercício - Execute um aplicativo de referência NVIDIA DeepStream Graph Composer
Vamos dar uma olhada mais de perto no fluxo de trabalho do aplicativo IVA que é habilitado pelo DeepStream Graph Composer. Mencionamos anteriormente que o Cloud Repository da NVIDIA ou outro registro externo pode fornecer componentes de arrastar e soltar para uso dentro do aplicativo DeepStream Composer.
Usando essas extensões, você pode adicionar recursos e funcionalidades ao aplicativo Composer. Em última análise, você pode usar essa ferramenta para empacotar e distribuir cargas de trabalho de IVA usando o construtor de contêineres incluído. O diagrama a seguir mostra esse processo.
Para começar, sincronize com o Cloud Repository público da NVIDIA para trazer as extensões disponíveis mais recentes. Para realizar esse processo, execute o seguinte comando em um terminal na máquina host:
registry repo sync -n ngc-public
Este comando produz uma saída semelhante à seguinte saída:
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
Verifique se as extensões estão instaladas e disponíveis usando este comando:
registry extn list
Você pode notar que muitas dessas extensões começam com prefixos que mapeiam para os plug-ins GStreamer otimizados para NVIDIA incluídos no SDK do DeepStream. Por exemplo, a extensão NvDsMuxDemuxExt fornece um componente visual para interagir com Gst-nvstreamdemux.
Agora abra o aplicativo Composer usando este comando:
composer
Observe que uma lista de componentes é preenchida no lado direito da interface do usuário do aplicativo. Os componentes são agrupados por nome de extensão. Se uma lista não aparecer, talvez seja necessário ressincronizar com o repositório ncg-public usando as etapas feitas anteriormente. Selecione o nome da extensão para visualizar os componentes que ela fornece, conforme mostrado aqui:
As diretrizes a seguir ajudam você a entender como interagir com o aplicativo Composer para desenvolver aplicativos personalizados:
- Para adicionar uma nova instância de componente, selecione e mantenha pressionado o nome de um componente. Em seguida, arraste-o para o espaço do editor de gráficos.
- Para exibir o nome de um componente, observe o cabeçalho na área do gráfico. O componente também pode conter identificadores para portas de entrada/saída.
- Para conectar componentes uns aos outros, selecione uma alça e desenhe uma conexão entre portas de entrada/saída compatíveis.
- Para exibir os detalhes do componente, selecione o componente. Os detalhes aparecem em uma janela Detalhes no lado direito do aplicativo. Você pode editar as propriedades nesta janela para personalizar o comportamento do componente.
Vamos examinar um aplicativo de referência para mostrar o que você pode criar seguindo as diretrizes anteriores. Anteriormente, quando você instalou o pacote de gráficos de referência do DeepStream, muitos exemplos foram instalados no seguinte caminho:
/opt/nvidia/deepstream/deepstream/reference_graphs/
No aplicativo Composer, selecione File>Open Graph e vá para o caminho /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Selecione o arquivo deepstream-test1.yaml . Em seguida, selecione Ok.
Selecione o componente NvDsSingleSrcInput e o painel Detalhes será aberto no lado direito do aplicativo. Role para baixo no painel Detalhes e observe a propriedade uri onde definimos o arquivo de vídeo que será usado como entrada neste pipeline de IVA.
Se você quiser modificar a propriedade uri para usar um fluxo RTSP, defina type igual a 4. Forneça o caminho RTSP rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov. Esta ação tem o mesmo efeito que a entrada do grupo de configuração DeepStream [source0] mostrada aqui:
[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
Em seguida, observe o fluxo geral do pipeline de IVA apresentado neste exemplo. Depois de entender o fluxo de trabalho geral e o comportamento esperado do gráfico, você aumentará essa carga de trabalho como uma carga de trabalho em contêiner para redistribuição e execução.
Esta aplicação toma uma fonte de vídeo como entrada usando
NvDsSingleSrcInput
, que é passado paraNvDsStreamMux
(que tecnicamente poderia processar várias entradas de vídeo). A saída deNvDsStreamMux
fornece um quadro de cada entrada de vídeo, que é enviado para processamento emNvDsInferVideo
. A inferência é aplicada usando um detetor de objetos da classe ResNet 4, como bicicleta, carro, pessoa ou sinal de trânsito. Os resultados de inferência deNvDsInferVideo
são passados para ambosNvDsPerClassObjectCounting
, para exibir uma contagem para cada classe detetada, eNvsOSD
, que gera as deteções na tela com caixas delimitadoras. As caixas são exibidas pela conexão final com .NvDsVideoRenderer
Para verificar esse comportamento e vê-lo em ação, invoque o script incluído
execute_graph.sh
e passe os parâmetros necessários noparameters.yaml
. Para executar o gráfico para deepstream-test1.yaml no host baseado em x86, execute os seguintes comandos em um terminal: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
Você deve ver uma saída semelhante à mostrada aqui:
Nota
Se você pretende usar uma máquina virtual para satisfazer os requisitos da máquina host, poderá encontrar problemas ao tentar executar um aplicativo DeepStream que usa um coletor EGL para saída visualizada. Para contornar essa limitação, altere o tipo de sua fonte de uri para 1 para FakeSink. Esteja ciente de que o FakeSink não fornecerá nenhuma saída visual. Ele permite que sua carga de trabalho seja executada, mas sem uma exibição associada na tela dos resultados processados.