Ejercicio: Ejecución de una aplicación de referencia de NVIDIA DeepStream Graph Composer

Completado

Echemos un vistazo más de cerca al flujo de trabajo de la aplicación de IVA que está habilitado por DeepStream Graph Composer. Anteriormente mencionamos que el repositorio en la nube de NVIDIA u otro registro externo puede proporcionar componentes de arrastrar y colocar para su uso dentro de la aplicación DeepStream Composer.

Mediante el uso de estas extensiones, puede agregar características y funcionalidades a la aplicación Composer. En última instancia, puede usar esta herramienta para empaquetar y distribuir cargas de trabajo de IVA mediante el generador de contenedores. En el siguiente diagrama se muestra el proceso.

Diagrama que muestra el flujo de trabajo NVIDIA DeepStream revisado.

  1. Para empezar, sincronice con el repositorio de nube pública de NVIDIA para traer las extensiones disponibles más recientes. Para llevar a cabo este proceso, ejecute el siguiente comando en un terminal del equipo host:

    registry repo sync -n ngc-public
    

    Este comando produce un resultado similar al siguiente:

    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. Compruebe que las extensiones están instaladas y disponibles mediante este comando:

    registry extn list
    

    Es posible que observe que muchas de estas extensiones comienzan por prefijos que se asignan a los complementos GStreamer optimizados para NVIDIA incluidos en DeepStream SDK. Por ejemplo, la extensión NvDsMuxDemuxExt proporciona un componente visual para interactuar con Gst-nvstreamdemux.

  3. Ahora, abra Composer mediante este comando:

    composer
    

    Captura de pantalla que muestra la apertura de NVIDIA DeepStream Graph Composer.

    Observe que se rellena una lista de componentes en el lado derecho de la interfaz de usuario de la aplicación. Los componentes se agrupan por nombre de extensión. Si no aparece una lista, es posible que tenga que volver a sincronizar con el repositorio ncg-public mediante los pasos anteriores. Seleccione el nombre de extensión para ver los componentes que proporciona, como se muestra aquí:

    Captura de pantalla que muestra los componentes de NVIDIA DeepStream Graph Composer.

    Las siguientes instrucciones le ayudarán a comprender cómo interactuar con Composer para desarrollar aplicaciones personalizadas:

    • Para agregar una nueva instancia de componente, seleccione y mantenga presionado el nombre de un componente. A continuación, arrástrelo al espacio del editor de grafos.
    • Para mostrar el nombre de un componente, mire el encabezado en el área de grafos. El componente también puede contener manipuladores para los puertos de entrada/salida.
    • Para conectar los componentes entre sí, seleccione un manipulador y dibuje una conexión entre los puertos de entrada/salida compatibles.
    • Para mostrar los detalles del componente, selecciónelo. Los detalles aparecen en la ventana Detalles del lado derecho de la aplicación. Puede editar las propiedades de esta ventana para personalizar el comportamiento del componente.
  4. Vamos a examinar una aplicación de referencia para mostrar lo que puede crear siguiendo las instrucciones anteriores. Anteriormente, cuando instaló el paquete de grafo de referencia de DeepStream, se instalaron muchos ejemplos en la siguiente ruta de acceso:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. En Composer, seleccione Archivo>Open Graph y vaya a la ruta de acceso /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1. Seleccione el archivo deepstream-test1.yaml. Luego, seleccione Correcto.

      Captura de pantalla que muestra la aplicación Test1 de apertura de NVIDIA DeepStream Graph Composer.

    2. Seleccione el componente NvDsSingleSrcInput y se abrirá el panel Detalles en el lado derecho de la aplicación. Desplácese hacia abajo en el panel Detalles y observe la propiedad uri donde se establece el archivo de vídeo que se usará como entrada en esta canalización de IVA.

      Captura de pantalla que muestra las propiedades de la aplicación Test1 de NVIDIA DeepStream Graph Composer.

    3. Si desea modificar la propiedad uri para usar una secuencia RTSP, establezca el tipo en 4. Proporcione la ruta de acceso RTSP rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov. Esta acción tiene el mismo efecto que la entrada del grupo de configuración de DeepStream [source0] que se muestra aquí:

      [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. A continuación, vea el flujo general de la canalización de IVA que se presenta en este ejemplo. Después de comprender el flujo de trabajo general y el comportamiento esperado del grafo, esta carga de trabajo se subirá como una carga de trabajo en contenedores para la redistribución y ejecución.

    Captura de pantalla que muestra la aplicación Test1 de NVIDIA DeepStream Graph Composer completa.

    Esta aplicación toma un origen de vídeo como entrada mediante NvDsSingleSrcInput, que se pasa a NvDsStreamMux (que técnicamente podría procesar varias entradas de vídeo). La salida de NvDsStreamMux proporciona un fotograma de cada entrada de vídeo, que se envía para su procesamiento en NvDsInferVideo. La inferencia se aplica mediante un detector de objetos de clase ResNet 4, como bicicleta, automóvil, persona o signo de carretera. Los resultados de inferencia NvDsInferVideode se pasan a NvDsPerClassObjectCounting, para mostrar un recuento de cada clase detectada, y NvsOSD, que genera las detecciones en pantalla con rectángulos delimitadores. La rectángulos se muestran por la conexión final a NvDsVideoRenderer.

  6. Para comprobar este comportamiento y verlo en acción, invoque el script execute_graph.sh incluido y pase los parámetros necesarios en parameters.yaml. Para ejecutar el gráfico de deepstream-test1.yaml en el host basado en x86, ejecute los siguientes comandos en un 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
    

    Debería mostrarse una salida similar a la que se muestra aquí:

    Captura de pantalla que muestra la aplicación Test1 de NVIDIA DeepStream Graph Composer en ejecución.

    Nota:

    Si piensa usar una máquina virtual para satisfacer los requisitos del equipo host, puede encontrar problemas al intentar ejecutar una aplicación DeepStream que usa un receptor para la salida visualizada. Para evitar esta limitación, cambie el tipo de origen del uri a 1 para FakeSink. Tenga en cuenta que FakeSink no proporcionará ninguna salida visual. Permite que la carga de trabajo se ejecute, pero sin una visualización en pantalla asociada de los resultados procesados.