Exercício – Executar um aplicativo de referência do NVIDIA DeepStream Graph Composer
Vamos analisar mais profundamente o fluxo de trabalho do aplicativo de IVA habilitado pelo DeepStream Graph Composer. Mencionamos anteriormente que o Repositório de Nuvem da NVIDIA ou outro Registro externo pode fornecer componentes do tipo "arrastar e soltar" para uso no aplicativo DeepStream Composer.
Ao usar essas extensões, você pode adicionar recursos e funcionalidades ao aplicativo Composer. Por fim, você pode usar essa ferramenta para empacotar e distribuir cargas de trabalho de IVA usando o container-builder agrupado. O diagrama a seguir mostra o processo.
Para começar, sincronize-se com o Repositório de Nuvem público da NVIDIA para ter acesso às extensões disponíveis mais recentes. Para realizar esse processo, execute o seguinte comando em um terminal no computador host:
registry repo sync -n ngc-public
Esse comando gera uma saída semelhante à seguinte:
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 observar que muitas dessas extensões começam com prefixos que são mapeados para os plug-ins do GStreamer otimizados para NVIDIA incluídos no SDK do DeepStream. Por exemplo, a extensão NvDsMuxDemuxExt fornece um componente visual para interagir com o 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ária uma nova sincronização com o repositório ncg-public de acordo com as etapas realizadas anteriormente. Selecione o nome da extensão para ver os componentes que ela fornece, conforme mostrado aqui:
As seguintes diretrizes ajudam você a entender como interagir com o aplicativo Composer para desenvolver aplicativos personalizados:
- Para adicionar uma nova instância de componente, clique e mantenha pressionado o nome de um componente. Depois, arraste-o para o espaço do editor de grafo.
- Para exibir o nome de um componente, veja o cabeçalho na área do grafo. O componente também pode conter identificadores para as portas de entrada/saída.
- Para conectar os componentes entre si, selecione um identificador e desenhe uma conexão entre as portas de entrada/saída compatíveis.
- Para exibir detalhes do componente, basta selecioná-lo. Os detalhes aparecem na janela Detalhes no lado direito do aplicativo. Você pode editar as propriedades nessa 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 grafos de referência do DeepStream, muitos exemplos foram instalados no seguinte caminho:
/opt/nvidia/deepstream/deepstream/reference_graphs/
No aplicativo Composer, selecione Arquivo>Abrir Grafo e acesso o caminho /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Selecione o arquivo deepstream-test1.yaml. Clique em OK.
Selecione o componente NvDsSingleSrcInput e o painel Detalhes será aberto no lado direito do aplicativo. No painel Detalhes, role para baixo e observe a propriedade uri na qual 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. Essa ação tem o mesmo efeito que a entrada do grupo de configuração do 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, veja o fluxo geral do pipeline de IVA apresentado nesse exemplo. Depois de entender o fluxo de trabalho geral e o comportamento esperado do grafo, você aumentará essa carga de trabalho como uma carga de trabalho conteinerizada para redistribuição e execução.
Esse aplicativo usa uma fonte de vídeo como entrada usando
NvDsSingleSrcInput
, que é passado paraNvDsStreamMux
(que tecnicamente pode processar várias entradas de vídeo). A saída deNvDsStreamMux
fornece um quadro de cada entrada de vídeo, que é enviado para processamento noNvDsInferVideo
. A inferência é aplicada usando um detector de objetos de classe ResNet 4, como bicicleta, carro, pessoa ou placa de trânsito. Os resultados de inferência deNvDsInferVideo
são passados para ambos osNvDsPerClassObjectCounting
, para exibir uma contagem para cada classe detectada eNvsOSD
, que gera as detecções na tela com caixas delimitadoras. As caixas são exibidas pela conexão final comNvDsVideoRenderer
.Para verificar esse comportamento e vê-lo em ação, invoque o script
execute_graph.sh
incluído e passe os parâmetros necessários emparameters.yaml
. Para executar o grafo de 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ê deverá ver uma saída semelhante a esta:
Observação
Se quiser usar uma máquina virtual para atender aos requisitos do computador host, poderá encontrar problemas ao tentar executar um aplicativo DeepStream que usa um coletor EGL para a saída visualizada. Para resolver essa limitação, altere o type de sua fonte uri de 1 para FakeSink. Esteja ciente de que 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.