Exercício – Executar um aplicativo de referência do NVIDIA DeepStream Graph Composer

Concluído

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.

Diagrama mostrando o fluxo de trabalho do NVIDIA DeepStream revisitado

  1. 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
    
  2. 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.

  3. Agora abra o aplicativo Composer usando este comando:

    composer
    

    Captura de tela mostrando a abertura do NVIDIA DeepStream Graph 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:

    Captura de tela que mostra os componentes do NVIDIA DeepStream Graph Composer.

    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.
  4. 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/
    
    1. 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.

      Captura de tela mostrando o NVIDIA DeepStream Graph Composer abrindo o aplicativo Test1.

    2. 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.

      Captura de tela mostrando as propriedades do aplicativo NVIDIA DeepStream Graph Composer Test1.

    3. 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
      
  5. 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.

    Captura de tela mostrando o aplicativo NVIDIA DeepStream Graph Composer Test1 completo.

    Esse aplicativo usa uma fonte de vídeo como entrada usando NvDsSingleSrcInput, que é passado para NvDsStreamMux (que tecnicamente pode processar várias entradas de vídeo). A saída de NvDsStreamMux fornece um quadro de cada entrada de vídeo, que é enviado para processamento no NvDsInferVideo. 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 de NvDsInferVideo são passados para ambos os NvDsPerClassObjectCounting, para exibir uma contagem para cada classe detectada e NvsOSD, que gera as detecções na tela com caixas delimitadoras. As caixas são exibidas pela conexão final com NvDsVideoRenderer.

  6. 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 em parameters.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:

    Captura de tela que mostra o NVIDIA DeepStream Graph Composer Test1 em execução.

    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.