Tutorial: Realización de una inferencia de clasificación de imágenes de muestra en imágenes de una cámara con TensorFlow Lite - 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: Realización de una inferencia de clasificación de imágenes de muestra en imágenes de una cámara con TensorFlow Lite

En este tutorial, se muestra cómo usar el componente de inferencia de clasificación de imágenes de TensorFlow Lite para realizar inferencias de clasificación de imágenes de muestra en imágenes de una cámara local en un dispositivo principal de Greengrass. Este componente incluye las siguientes dependencias de componentes:

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

  • Componente de tiempo de ejecución de TensorFlow 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 al dispositivo.

Para obtener más información acerca de machine learning en dispositivos de Greengrass, consulte Cómo realizar la inferencia de machine learning.

Requisitos previos

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

También necesitará lo siguiente:

  • Un dispositivo principal 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 acerca de cómo configurar un dispositivo principal de Greengrass, consulte Tutorial: Cómo empezar con 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 posterior instalado en el dispositivo. El sistema operativo Bullseye de Raspberry Pi incluye una versión anterior de NumPy, por lo que puede ejecutar el siguiente comando para actualizar NumPy en el dispositivo.

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

        Cómo activar la pila de cámara 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ámara antigua.

        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: Configurar el módulo de cámara del dispositivo

En este paso, se instala y habilita el módulo de cámara para su dispositivo. Ejecute el siguiente comando en el dispositivo.

Raspberry Pi (Armv7l)
  1. Instale la interfaz picamera 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 que sean necesarias para este tutorial.

    sudo apt-get install -y python3-picamera
  2. Compruebe que Picamera se haya 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 ejecutable de Python instalado en el dispositivo es python3.7, utilice python3.7 en lugar de python3 con los comandos de este tutorial. Asegúrese de que la instalación de pip corresponde a la versión python3.7 o python3 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 MLRootPath para este tutorial es /greengrass/v2/work/variant.TensorFlowLite/greengrass_ml. La carpeta greengrass_ml_tflite_venv de esta ubicación se crea cuando implementa el componente de inferencia por primera vez en Tutorial: Realización de una inferencia de clasificación de imágenes de muestra con TensorFlow Lite.

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 con el nombre test.jpg en su directorio actual.

  2. (Opcional) Reinicie el dispositivo. Si tiene problemas para ejecutar el comando gst-launch del paso anterior, es posible que deba reiniciar 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: Comprobar la suscripción al tema de notificaciones predeterminado

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

Paso 3: Modificar la configuración del componente de clasificación de imágenes de TensorFlow Lite e implementarlo

En este paso, se configura e implementa el componente de clasificación de imágenes de TensorFlow Lite en el dispositivo principal:

  1. En el menú de navegación de la consola de AWS IoT Greengrass, 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 Agregar a la implementación, 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 componente aws.greengrass.TensorFlowLiteImageClassification 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 la configuración, introduzca la siguiente actualización de configuración en el cuadro Configuración para combinar.

      { "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 Revisar, elija Implementar.

  1. Cree un archivo deployment.json para definir la configuración de implementación 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 campo targetArn, sustituya targetArn 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 de componente. En el objeto de componente aws.greengrass.TensorFlowLiteImageClassification, reemplace la versión 2.1.0 para usar una versión diferente del componente de clasificación de imágenes de 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. Reemplace los siguientes valores

  2. Ejecute el siguiente comando para implementar el componente de clasificación de imágenes de 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: Visualizar 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 el cliente de MQTT AWS IoT de la consola AWS IoT. Para suscribirse al tema sobre el que el componente publica los resultados de las inferencias, consulte Paso 2: Comprobar la suscripción al tema de notificaciones predeterminado.

Temas
    • Cliente de MQTT AWS IoT: 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 consola de AWS IoT, seleccione Prueba, cliente de prueba de MQTT.

      2. En Suscripciones, elija ml/tflite/image-classification.

    • Registro de componentes: para ver los resultados de la inferencia en el registro de componentes, ejecute el siguiente comando en el 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 falló o no llegó 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 su dispositivo principal para ver el archivo de registro del software AWS IoT Greengrass Core. Este archivo incluye registros del servicio de implementación del dispositivo principal de Greengrass.

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

    Para obtener más información, consulte Resolución de problemas de inferencia de machine learning.

    Siguientes pasos

    En este tutorial, se muestra cómo usar el componente de clasificación de imágenes de TensorFlow Lite con opciones de configuración personalizadas para realizar una clasificación de 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 machine learning personalizados, consulte Personalización de sus componentes de machine learning.