Exercício - Execute um aplicativo de referência NVIDIA DeepStream Graph Composer

Concluído

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.

Diagrama que mostra o fluxo de trabalho NVIDIA DeepStream revisitado.

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

  3. Agora abra o aplicativo Composer usando este comando:

    composer
    

    Captura de tela que mostra 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á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:

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

    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.
  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 gráficos de referência do DeepStream, muitos exemplos foram instalados no seguinte caminho:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. 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.

      Captura de tela que mostra 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. 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.

      Captura de tela que mostra 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. 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
      
  5. 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.

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

    Esta aplicação toma uma fonte de vídeo como entrada usando NvDsSingleSrcInput, que é passado para NvDsStreamMux (que tecnicamente poderia 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 em NvDsInferVideo. 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 de NvDsInferVideo são passados para ambos NvDsPerClassObjectCounting, para exibir uma contagem para cada classe detetada, e NvsOSD, que gera as deteçõ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 incluído execute_graph.sh e passe os parâmetros necessários no parameters.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:

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

    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.