Tutorial: Esegui l'inferenza della classificazione delle immagini di esempio sulle immagini di una fotocamera utilizzando TensorFlow Lite - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: Esegui l'inferenza della classificazione delle immagini di esempio sulle immagini di una fotocamera utilizzando TensorFlow Lite

Questo tutorial mostra come utilizzare il componente di inferenza della classificazione delle immagini TensorFlow Lite per eseguire l'inferenza della classificazione delle immagini di esempio sulle immagini di una fotocamera localmente su un dispositivo principale Greengrass. Questo componente include le seguenti dipendenze dei componenti:

  • TensorFlow Componente di archiviazione del modello di classificazione delle immagini Lite

  • TensorFlow Componente di runtime Lite

Nota

Questo tutorial accede al modulo fotocamera per i dispositivi Raspberry Pi o NVIDIA Jetson Nano, ma AWS IoT Greengrass supporta altri dispositivi su piattaforme ARMv7L, Armv8 o x86_64. Per configurare una fotocamera per un altro dispositivo, consulta la documentazione pertinente del dispositivo.

Per ulteriori informazioni sull'apprendimento automatico sui dispositivi Greengrass, vedere. Esecuzione dell'inferenza di Machine Learning

Prerequisiti

Per completare questo tutorial, devi prima completareTutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite.

Devi disporre anche dei seguenti elementi:

  • Un dispositivo core Linux Greengrass con interfaccia fotocamera. Questo tutorial accede al modulo fotocamera su uno dei seguenti dispositivi supportati:

    Per informazioni sulla configurazione di un dispositivo principale Greengrass, vedere. Tutorial: Nozioni di base su AWS IoT Greengrass V2

    Il dispositivo principale deve soddisfare i seguenti requisiti:

    • Sui dispositivi core Greengrass che eseguono Amazon Linux 2 o Ubuntu 18.04, sul dispositivo è installata la versione 2.27 o successiva della GNU C Library (glibc).

    • Sui dispositivi ARMv7L, come Raspberry Pi, le dipendenze per OpenCV-Python sono installate sul dispositivo. Esegui il comando seguente per installare le dipendenze.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • I dispositivi Raspberry Pi che eseguono il sistema operativo Raspberry Pi Bullseye devono soddisfare i seguenti requisiti:

      • NumPy 1.22.4 o versione successiva installata sul dispositivo. Il sistema operativo Raspberry Pi Bullseye include una versione precedente di NumPy, quindi è possibile eseguire il seguente comando per l'aggiornamento del dispositivo. NumPy

        pip3 install --upgrade numpy
      • Lo stack di fotocamere legacy è abilitato sul dispositivo. Il sistema operativo Raspberry Pi Bullseye include un nuovo stack di fotocamere abilitato di default e non compatibile, quindi è necessario abilitare lo stack di fotocamere precedente.

        Per abilitare lo stack di telecamere precedente
        1. Esegui il seguente comando per aprire lo strumento di configurazione Raspberry Pi.

          sudo raspi-config
        2. Seleziona Opzioni di interfaccia.

        3. Seleziona Legacy camera per abilitare lo stack di telecamere legacy.

        4. Riavvia il dispositivo Raspberry Pi.

  • Per dispositivi Raspberry Pi o NVIDIA Jetson Nano, modulo fotocamera Raspberry Pi V2 - 8 megapixel, 1080p. Per informazioni sulla configurazione della telecamera, consulta Connessione della telecamera nella documentazione di Raspberry Pi.

Passaggio 1: configura il modulo fotocamera sul tuo dispositivo

In questo passaggio, installi e abiliti il modulo videocamera per il tuo dispositivo. Esegui i seguenti comandi sul dispositivo.

Raspberry Pi (Armv7l)
  1. Installa l'picamerainterfaccia per il modulo videocamera. Esegui il seguente comando per installare il modulo telecamera e le altre librerie Python necessarie per questo tutorial.

    sudo apt-get install -y python3-picamera
  2. Verificate che Picamera sia stato installato correttamente.

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

    Se l'output non contiene errori, la convalida ha esito positivo.

    Nota

    Se il file eseguibile Python installato sul tuo dispositivo lo èpython3.7, usalo python3.7 al posto dei comandi python3 di questo tutorial. Assicurati che l'installazione di pip sia mappata alla versione python3.7 o python3 corretta per evitare errori di dipendenza.

  3. Riavviare il dispositivo.

    sudo reboot
  4. Apri lo strumento di configurazione di Raspberry Pi.

    sudo raspi-config
  5. Utilizza i tasti freccia per aprire Interfacing Options (Opzioni di interfaccia) e abilita l'interfaccia della telecamera. Se richiesto, consenti il riavvio del dispositivo.

  6. Eseguite il comando seguente per testare la configurazione della fotocamera.

    raspistill -v -o test.jpg

    Viene visualizzata una finestra di anteprima sul dispositivo Raspberry Pi, viene salvata un'immagine denominata test.jpg nella directory corrente e vengono visualizzati informazioni sulla telecamera nel terminale Raspberry Pi.

  7. Eseguite il comando seguente per creare un collegamento simbolico che consenta al componente di inferenza di accedere alla telecamera dall'ambiente virtuale creato dal componente runtime.

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

    Il valore predefinito per ML RootPath per questo tutorial è. /greengrass/v2/work/variant.TensorFlowLite/greengrass_ml La greengrass_ml_tflite_venv cartella in questa posizione viene creata quando si distribuisce il componente di inferenza per la prima volta in. Tutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite

Jetson Nano (Armv8)
  1. Eseguite il comando seguente per testare la configurazione della telecamera.

    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

    In questo modo viene acquisita e salvata un'immagine test.jpg denominata nella directory corrente.

  2. (Facoltativo) Riavviare il dispositivo. Se riscontri problemi durante l'esecuzione del gst-launch comando nel passaggio precedente, il riavvio del dispositivo potrebbe risolverli.

    sudo reboot
Nota

Per i dispositivi Armv8 (AArch64), come Jetson Nano, non è necessario creare un collegamento simbolico per consentire al componente di inferenza di accedere alla telecamera dall'ambiente virtuale creato dal componente runtime.

Passaggio 2: verifica l'iscrizione all'argomento delle notifiche predefinito

NelTutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite, hai configurato il client AWS IoT MQTT è configurato nella AWS IoT console per guardare i messaggi MQTT pubblicati dal componente di classificazione delle immagini TensorFlow Lite sull'ml/tflite/image-classificationargomento. Nella AWS IoT console, verifica che questo abbonamento esista. In caso contrario, segui i passaggi indicati Passaggio 1: iscriviti all'argomento delle notifiche predefinito per iscriverti a questo argomento prima di distribuire il componente sul tuo dispositivo principale Greengrass.

Passaggio 3: modifica la configurazione del componente di classificazione delle immagini TensorFlow Lite e distribuiscilo

In questo passaggio, configuri e distribuisci il componente di classificazione delle immagini TensorFlow Lite sul tuo dispositivo principale:

  1. Nel menu di navigazione AWS IoT Greengrassdella console, scegli Componenti.

  2. Nella pagina Componenti, nella scheda Componenti pubblici, scegli aws.greengrass.TensorFlowLiteImageClassification.

  3. Nella pagina aws.greengrass.TensorFlowLiteImageClassification, scegli (Distribuisci).

  4. Da Aggiungi alla distribuzione, scegli una delle seguenti opzioni:

    1. Per unire questo componente a una distribuzione esistente sul dispositivo di destinazione, scegli Aggiungi alla distribuzione esistente, quindi seleziona la distribuzione che desideri modificare.

    2. Per creare una nuova distribuzione sul dispositivo di destinazione, scegli Crea nuova distribuzione. Se hai una distribuzione esistente sul tuo dispositivo, la scelta di questo passaggio sostituisce la distribuzione esistente.

  5. Nella pagina Specifica destinazione, procedi come segue:

    1. In Informazioni sulla distribuzione, inserisci o modifica il nome descrittivo della distribuzione.

    2. In Destinazione della distribuzione, seleziona una destinazione della distribuzione e scegli Avanti. Non è possibile modificare la destinazione della distribuzione se si sta revisionando una distribuzione esistente.

  6. Nella pagina Seleziona componenti, in Componenti pubblici, verifica che il aws.greengrass.TensorFlowLiteImageClassification componente sia selezionato e scegli Avanti.

  7. Nella pagina Configura componenti, procedi come segue:

    1. Selezionate il componente di inferenza e scegliete Configura componente.

    2. In Aggiornamento della configurazione, inserisci il seguente aggiornamento di configurazione nella casella Configurazione da unire.

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

      Con questo aggiornamento della configurazione, il componente accede al modulo della fotocamera sul dispositivo ed esegue inferenze sulle immagini scattate dalla fotocamera. Il codice di inferenza viene eseguito ogni 60 secondi.

    3. Seleziona Conferma e scegli Avanti.

  8. Nella pagina Configura impostazioni avanzate, mantieni le impostazioni di configurazione predefinite e scegli Avanti.

  9. Nella pagina di revisione, scegli Deploy

  1. Crea un deployment.json file per definire la configurazione di distribuzione per il componente di classificazione delle immagini TensorFlow Lite. Questo file dovrebbe avere il seguente aspetto:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }
    • Nel campo targetArn, sostituisci targetArn con l'ARN (Amazon Resource Name) dell'oggetto o del gruppo di oggetti a cui destinare la distribuzione, nel seguente formato:

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

      • Gruppo di oggetti: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • Questo tutorial utilizza la versione 2.1.0 del componente. Nell'oggetto aws.greengrass.TensorFlowLiteImageClassification componente, sostituite 2.1.0 per utilizzare una versione diversa del componente di classificazione delle immagini TensorFlow Lite.

    Con questo aggiornamento della configurazione, il componente accede al modulo fotocamera sul dispositivo ed esegue inferenze sulle immagini scattate dalla fotocamera. Il codice di inferenza viene eseguito ogni 60 secondi. Sostituisci i seguenti valori

  2. Esegui il comando seguente per distribuire il componente di classificazione delle immagini TensorFlow Lite sul dispositivo:

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

La distribuzione può richiedere alcuni minuti. Nel passaggio successivo, controlla il registro dei componenti per verificare che la distribuzione sia stata completata correttamente e per visualizzare i risultati dell'inferenza.

Fase 4: Visualizzazione dei risultati dell'inferenza

Dopo aver distribuito il componente, è possibile visualizzare i risultati dell'inferenza nel registro dei componenti sul dispositivo principale Greengrass e nel client AWS IoT MQTT nella console. AWS IoT Per sottoscrivere l'argomento su cui il componente pubblica i risultati dell'inferenza, vedere. Passaggio 2: verifica l'iscrizione all'argomento delle notifiche predefinito

Argomenti
    • AWS IoTClient MQTT: per visualizzare i risultati pubblicati dal componente di inferenza sull'argomento delle notifiche predefinite, completate i seguenti passaggi:

      1. Nel menu di navigazione della AWS IoTconsole, scegliete Test, MQTT test client.

      2. In Abbonamenti, scegli. ml/tflite/image-classification

    • Registro dei componenti: per visualizzare i risultati dell'inferenza nel registro dei componenti, esegui il seguente comando sul tuo dispositivo principale Greengrass.

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

    Se non riesci a visualizzare i risultati dell'inferenza nel registro dei componenti o nel client MQTT, la distribuzione non è riuscita o non ha raggiunto il dispositivo principale. Ciò può verificarsi se il dispositivo principale non è connesso a Internet o non dispone delle autorizzazioni necessarie per eseguire il componente. Esegui il comando seguente sul tuo dispositivo principale per visualizzare il file di registro del software AWS IoT Greengrass Core. Questo file include i log del servizio di distribuzione del dispositivo principale Greengrass.

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

    Per ulteriori informazioni, consulta Risoluzione dei problemi di inferenza dell'apprendimento automatico.

    Passaggi successivi

    Questo tutorial mostra come utilizzare il componente di classificazione delle immagini TensorFlow Lite, con opzioni di configurazione personalizzate per eseguire la classificazione delle immagini di esempio sulle immagini scattate da una fotocamera.

    Per ulteriori informazioni sulla personalizzazione della configurazione dei componenti pubblici o sulla creazione di componenti di machine learning personalizzati, consultaPersonalizza i tuoi componenti di machine learning.