Tutorial: Realice una inferencia de clasificación de imágenes de muestra en imágenes de una cámara con Lite TensorFlow - AWS IoT Greengrass

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Realice una inferencia de clasificación de imágenes de muestra en imágenes de una cámara con Lite TensorFlow

Este tutorial le muestra cómo utilizar el componente de inferencia de clasificación de imágenes TensorFlow Lite para realizar inferencias de clasificación de imágenes de muestra en imágenes de una cámara local en un dispositivo central de Greengrass. Este componente incluye las siguientes dependencias de componentes:

  • TensorFlow Componente de tienda de modelos de clasificación de imágenes Lite

  • TensorFlow Componente de tiempo de ejecución Lite

nota

Este tutorial permite acceder al módulo de cámara de los dispositivos Raspberry Pi o NVIDIA Jetson Nano, pero AWS IoT Greengrass es compatible con otros dispositivos en las plataformas ARMv7L, Armv8 o x86_64. Para configurar una cámara para un dispositivo diferente, consulte la documentación correspondiente a su dispositivo.

Para obtener más información sobre el aprendizaje automático en los dispositivos Greengrass, consulte. Cómo realizar la inferencia de machine learning

Requisitos previos

Para completar este tutorial, primero debe Tutorial: Realice una inferencia de clasificación de imágenes de muestra con Lite TensorFlow completarlo.

También necesitará lo siguiente:

  • Un dispositivo central de Linux Greengrass con una interfaz de cámara. Este tutorial permite acceder al módulo de cámara en uno de los siguientes dispositivos compatibles:

    Para obtener información sobre la configuración de un dispositivo principal de Greengrass, consulte. Tutorial: Introducción a AWS IoT Greengrass V2

    El dispositivo principal debe cumplir los siguientes requisitos:

    • En los dispositivos principales de Greengrass que ejecutan Amazon Linux 2 o Ubuntu 18.04, se instala en el dispositivo la versión 2.27 o posterior de la Biblioteca C GNU (glibc).

    • En los dispositivos ARMv7L, como Raspberry Pi, las dependencias para OpenCV-Python están instaladas en el dispositivo. Ejecute el siguiente comando para instalar las dependencias.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • Los dispositivos Raspberry Pi que ejecutan el sistema operativo Bullseye de Raspberry Pi deben cumplir los siguientes requisitos:

      • NumPy 1.22.4 o una versión posterior instalada en el dispositivo. Raspberry Pi OS Bullseye incluye una versión anterior de NumPy, por lo que puede ejecutar el siguiente comando para actualizar NumPy el dispositivo.

        pip3 install --upgrade numpy
      • La pila de cámaras antigua habilitada en el dispositivo. El Raspberry Pi OS Bullseye incluye una nueva pila de cámaras que está habilitada de forma predeterminada y no es compatible, por lo que debes activar la pila de cámaras antigua.

        Para activar la pila de cámaras antigua
        1. Ejecute el siguiente comando para abrir la herramienta de configuración de Raspberry Pi.

          sudo raspi-config
        2. Seleccione Opciones de interfaz.

        3. Seleccione Cámara antigua para activar la pila de cámaras antiguas.

        4. Reinicie el Raspberry Pi.

  • Para dispositivos Raspberry Pi o NVIDIA Jetson Nano, módulo de cámara Raspberry Pi V2:8 megapíxeles, 1080p. Para obtener información sobre cómo configurar la cámara, consulte Connecting the camera en la documentación de Raspberry Pi.

Paso 1: Configura el módulo de cámara de tu dispositivo

En este paso, instala y habilita el módulo de cámara para su dispositivo. Ejecute los siguientes comandos en el dispositivo.

Raspberry Pi (Armv7l)
  1. Instale la picamera interfaz del módulo de cámara. Ejecute el siguiente comando para instalar el módulo de cámara y las demás bibliotecas de Python necesarias para este tutorial.

    sudo apt-get install -y python3-picamera
  2. Compruebe que Picamera se ha instalado correctamente.

    sudo -u ggc_user bash -c 'python3 -c "import picamera"'

    Si el resultado no contiene errores, la validación es correcta.

    nota

    Si el archivo ejecutable de Python que está instalado en su dispositivo lo espython3.7, python3.7 utilícelo en lugar de python3 para los comandos de este tutorial. Asegúrese de que la instalación de pip corresponde a la versión python3 o python3.7 correcta para evitar errores de dependencia.

  3. Reinicie el dispositivo.

    sudo reboot
  4. Abra la herramienta de configuración de Raspberry Pi.

    sudo raspi-config
  5. Utilice las teclas de flecha para abrir Interfacing Options (Opciones de interfaz) y habilitar la interfaz de la cámara. Si se le solicita, permita que el dispositivo se reinicie.

  6. Ejecute el siguiente comando para probar la configuración de la cámara.

    raspistill -v -o test.jpg

    Se abre una ventana de vista previa en el Raspberry Pi, se guarda una imagen denominada test.jpg en el directorio actual y se muestra información sobre la cámara en el terminal de Raspberry Pi.

  7. Ejecute el siguiente comando para crear un enlace simbólico que permita que el componente de inferencia acceda a la cámara desde el entorno virtual creado por el componente de tiempo de ejecución.

    sudo ln -s /usr/lib/python3/dist-packages/picamera "MLRootPath/greengrass_ml_tflite_venv/lib/python3.7/site-packages"

    El valor predeterminado de ML RootPath para este tutorial es. /greengrass/v2/work/variant.TensorFlowLite/greengrass_ml La greengrass_ml_tflite_venv carpeta de esta ubicación se crea al implementar el componente de inferencia por primera vez enTutorial: Realice una inferencia de clasificación de imágenes de muestra con Lite TensorFlow .

Jetson Nano (Armv8)
  1. Ejecute el siguiente comando para probar la configuración de la cámara.

    gst-launch-1.0 nvarguscamerasrc num-buffers=1 ! "video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1" ! nvjpegenc ! filesink location=test.jpg

    Esto captura y guarda una imagen nombrada test.jpg en su directorio actual.

  2. (Opcional) Reinicie el dispositivo. Si tienes problemas al ejecutar el gst-launch comando del paso anterior, es posible que reinicies el dispositivo para resolverlos.

    sudo reboot
nota

En el caso de los dispositivos Armv8 (AArch64), como un Jetson Nano, no es necesario crear un enlace simbólico para permitir que el componente de inferencia acceda a la cámara desde el entorno virtual creado por el componente de tiempo de ejecución.

Paso 2: Compruebe su suscripción al tema de notificaciones predeterminado

EnTutorial: Realice una inferencia de clasificación de imágenes de muestra con Lite TensorFlow , configuró el cliente AWS IoT MQTT que está configurado en la AWS IoT consola para ver los mensajes MQTT publicados por el componente de clasificación de imágenes de TensorFlow Lite sobre el ml/tflite/image-classification tema. En la AWS IoT consola, compruebe que existe esta suscripción. Si no es así, siga los pasos descritos Paso 1: Suscríbase al tema de notificaciones predeterminado para suscribirse a este tema antes de implementar el componente en su dispositivo principal de Greengrass.

Paso 3: Modifique la configuración del componente de clasificación de imágenes de TensorFlow Lite e impleméntelo

En este paso, debe configurar e implementar el componente de clasificación de imágenes de TensorFlow Lite en su dispositivo principal:

  1. En el menú de navegación de la AWS IoT Greengrassconsola, elija Componentes.

  2. En la página Componentes, en la pestaña Componentes públicos, elija aws.greengrass.TensorFlowLiteImageClassification.

  3. En la página aws.greengrass.TensorFlowLiteImageClassification, elija Implementar.

  4. En Añadir al despliegue, elija una de las siguientes opciones:

    1. Para combinar este componente con una implementación existente en el dispositivo de destino, elija Agregar a la implementación existente y, a continuación, seleccione la implementación que desee revisar.

    2. Para crear una nueva implementación en el dispositivo de destino, elija Crear nueva implementación. Si tiene una implementación existente en su dispositivo, al elegir este paso se reemplaza la implementación existente.

  5. En la página Especificar detalles, haga lo siguiente:

    1. En Información de implementación, introduzca o modifique el nombre descriptivo de su implementación.

    2. En Objetivos de implementación, seleccione un objetivo para su implementación y elija Siguiente. No puede cambiar el objetivo de implementación si está revisando una implementación existente.

  6. En la página Seleccionar componentes, en Componentes públicos, compruebe que el aws.greengrass.TensorFlowLiteImageClassification componente esté seleccionado y elija Siguiente.

  7. En la página Configurar componentes, haga lo siguiente:

    1. Seleccione el componente de inferencia y elija Configurar componente.

    2. En Actualización de configuración, introduzca la siguiente actualización de configuración en el cuadro Configuración que se va a fusionar.

      { "InferenceInterval": "60", "UseCamera": "true" }

      Con esta actualización de configuración, el componente accede al módulo de cámara del dispositivo y realiza inferencias a partir de las imágenes tomadas por la cámara. El código de inferencia se ejecuta cada 60 segundos.

    3. Seleccione Confirmar y, a continuación, elija Siguiente.

  8. En la página Configurar ajustes avanzados, mantenga los ajustes de configuración predeterminados y seleccione Siguiente.

  9. En la página de revisión, elija Implementar

  1. Cree un deployment.json archivo para definir la configuración de despliegue del componente de clasificación de imágenes de TensorFlow Lite. Este archivo debería tener el siguiente aspecto:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }
    • En el targetArn campo, targetArnsustitúyalo por el nombre de recurso de Amazon (ARN) de la cosa o grupo de cosas a la que apunte la implementación, en el siguiente formato:

      • Cosa: arn:aws:iot:region:account-id:thing/thingName

      • Grupo de cosas: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • Este tutorial utiliza la versión 2.1.0 del componente. En el objeto aws.greengrass.TensorFlowLiteImageClassification componente, sustituya la 2.1.0 por una versión diferente del componente de clasificación de imágenes TensorFlow Lite.

    Con esta actualización de configuración, el componente accede al módulo de cámara del dispositivo y realiza inferencias a partir de las imágenes tomadas por la cámara. El código de inferencia se ejecuta cada 60 segundos. Sustituya los siguientes valores

  2. Ejecute el siguiente comando para implementar el componente de clasificación de imágenes TensorFlow Lite en el dispositivo:

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

La implementación puede tardar varios minutos en completarse. En el siguiente paso, compruebe el registro de componentes para comprobar que la implementación se ha completado correctamente y para ver los resultados de la inferencia.

Paso 4: Ver los resultados de la inferencia

Tras implementar el componente, puede ver los resultados de la inferencia en el registro del componente de su dispositivo principal de Greengrass y en AWS IoT el cliente MQTT de la consola. AWS IoT Para suscribirse al tema sobre el que el componente publica los resultados de las inferencias, consulte. Paso 2: Compruebe su suscripción al tema de notificaciones predeterminado

Temas
    • AWS IoTCliente MQTT: para ver los resultados que publica el componente de inferencia sobre el tema de notificaciones predeterminado, complete los siguientes pasos:

      1. En el menú de navegación de la AWS IoTconsola, elija Test, MQTT test client.

      2. En Suscripciones, elijaml/tflite/image-classification.

    • Registro de componentes: para ver los resultados de la inferencia en el registro de componentes, ejecute el siguiente comando en su dispositivo principal de Greengrass.

      sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    Si no puede ver los resultados de la inferencia en el registro de componentes o en el cliente MQTT, significa que la implementación ha fallado o no ha llegado al dispositivo principal. Esto puede ocurrir si el dispositivo principal no está conectado a Internet o no tiene los permisos necesarios para ejecutar el componente. Ejecute el siguiente comando en el dispositivo principal para ver el archivo de registro del software AWS IoT Greengrass principal. Este archivo incluye registros del servicio de despliegue del dispositivo principal de Greengrass.

    sudo tail -f /greengrass/v2/logs/greengrass.log

    Para obtener más información, consulte Solución de problemas de inferencia de aprendizaje automático.

    Siguientes pasos

    Este tutorial le muestra cómo utilizar el componente de clasificación de imágenes TensorFlow Lite, con opciones de configuración personalizadas para clasificar imágenes de muestra en imágenes tomadas por una cámara.

    Para obtener más información sobre la personalización de la configuración de los componentes públicos o la creación de componentes de aprendizaje automático personalizados, consultePersonalice sus componentes de aprendizaje automático.