

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
<a name="ml-tutorial-image-classification-camera"></a>

Questo tutorial mostra come utilizzare il componente di inferenza della [classificazione delle immagini TensorFlow Lite](tensorflow-lite-image-classification-component.md) 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](https://www.raspberrypi.org/) o [NVIDIA Jetson Nano](https://developer.nvidia.com/embedded/jetson-nano), ma AWS IoT Greengrass supporta altri dispositivi su piattaforme ARMv7L, Armv8 o x86\$164. 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](perform-machine-learning-inference.md)

**Topics**
+ [Prerequisiti](#ml-tutorial-camera-prereqs)
+ [Passaggio 1: configura il modulo fotocamera sul tuo dispositivo](#ml-tutorial-image-classification-camera-install)
+ [Passaggio 2: verifica l'abbonamento all'argomento delle notifiche predefinito](#ml-image-classification-camera-subscribe)
+ [Passaggio 3: modifica la configurazione del componente di classificazione delle immagini TensorFlow Lite e distribuiscilo](#ml-image-classification-camera-deploy)
+ [Fase 4: Visualizzazione dei risultati dell'inferenza](#ml-image-classification-camera-results)
+ [Fasi successive](#ml-image-classification-camera-next-steps)

## Prerequisiti
<a name="ml-tutorial-camera-prereqs"></a>

Per completare questo tutorial, devi prima completare[Tutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite](ml-tutorial-image-classification.md).

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:
  + [Raspberry Pi](https://www.raspberrypi.org/) con sistema operativo [Raspberry Pi (precedentemente chiamato](https://www.raspberrypi.org/downloads/) Raspbian)
  + [NVIDIA Jetson Nano](https://developer.nvidia.com/embedded/jetson-nano)

  Per informazioni sulla configurazione di un dispositivo principale Greengrass, vedere. [Tutorial: Guida introduttiva a AWS IoT Greengrass V2](getting-started.md)

  Il dispositivo principale deve soddisfare i seguenti requisiti:<a name="ml-component-requirements"></a>
  + 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](https://www.gnu.org/software/libc/) (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.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**Per abilitare lo stack di telecamere precedente**

      1. Esegui il seguente comando per aprire lo strumento di configurazione Raspberry Pi.

         ```
         sudo raspi-config
         ```

      1. Seleziona **Opzioni di interfaccia**.

      1. Seleziona **Legacy camera** per abilitare lo stack di telecamere legacy.

      1. Riavvia il dispositivo Raspberry Pi.
+ Per dispositivi Raspberry Pi o NVIDIA Jetson Nano, [modulo fotocamera Raspberry Pi V2](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS) - 8 megapixel, 1080p. Per informazioni sulla configurazione della telecamera, consulta [Connessione della telecamera](https://www.raspberrypi.org/documentation/usage/camera/) nella documentazione di Raspberry Pi. 

## Passaggio 1: configura il modulo fotocamera sul tuo dispositivo
<a name="ml-tutorial-image-classification-camera-install"></a>

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

------
#### [ Raspberry Pi (Armv7l) ]

1. <a name="install-picamera-step"></a>Installa l'`picamera`interfaccia 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
   ```

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

1. Riavviare il dispositivo.

   ```
   sudo reboot
   ```

1. Apri lo strumento di configurazione di Raspberry Pi.

   ```
   sudo raspi-config
   ```

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

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

1. 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 *MLRootPath* 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](ml-tutorial-image-classification.md)

------
#### [ 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.

1. (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'abbonamento all'argomento delle notifiche predefinito
<a name="ml-image-classification-camera-subscribe"></a>

Nel[Tutorial: eseguire l'inferenza della classificazione delle immagini di esempio utilizzando TensorFlow Lite](ml-tutorial-image-classification.md), 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-classification`argomento. Nella AWS IoT console, verifica che questo abbonamento esista. In caso contrario, segui i passaggi indicati [Passaggio 1: iscriviti all'argomento delle notifiche predefinito](ml-tutorial-image-classification.md#ml-image-classification-subscribe) 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
<a name="ml-image-classification-camera-deploy"></a>

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

### Per configurare e distribuire il componente di classificazione delle immagini TensorFlow Lite (console)
<a name="ml-image-classification-camera-deploy-console"></a>

1. Nel menu di navigazione [AWS IoT Greengrass della console](https://console.aws.amazon.com/greengrass), scegli **Componenti**.

1. Nella pagina **Componenti**, nella scheda **Componenti pubblici**, scegli `aws.greengrass.TensorFlowLiteImageClassification`.

1. Nella pagina **aws.greengrass.TensorFlowLiteImageClassification**, scegli **(Distribuisci)**.

1. <a name="add-deployment"></a>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.

   1. Per creare una nuova distribuzione sul dispositivo di destinazione, scegli **Crea nuova distribuzione**. Se hai un’implementazione esistente sul tuo dispositivo, la scelta di questa fase sostituisce l’implementazione esistente. 

1. <a name="specify-deployment-target"></a>Nella pagina **Specifica destinazione**, procedi come segue: 

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

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

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

1. Nella pagina **Configura componenti**, procedi come segue: 

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

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

   1. Seleziona **Conferma** e scegli **Avanti**.

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

1. **Nella pagina di **revisione**, scegli Deploy**

### Per configurare e distribuire il componente di classificazione delle immagini TensorFlow Lite ()AWS CLI
<a name="ml-image-classification-camera-deploy-cli"></a>

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 il nome della risorsa Amazon (ARN) 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, sostituisci *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

1. 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. Nella fase successiva, controlla il registro dei componenti per verificare che l’implementazione sia stata completata correttamente e per visualizzare i risultati dell'inferenza.

## Fase 4: Visualizzazione dei risultati dell'inferenza
<a name="ml-image-classification-camera-results"></a>

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'abbonamento all'argomento delle notifiche predefinito](#ml-image-classification-camera-subscribe)

**Topics**
+ **AWS IoT Client MQTT**: per visualizzare i risultati pubblicati dal componente di inferenza sull'[argomento delle notifiche predefinite](ml-tutorial-image-classification.md#ml-image-classification-subscribe), completate i seguenti passaggi:

  1. Nel menu di navigazione della [AWS IoT console](https://console.aws.amazon.com/iot/), scegliete **Test, MQTT test client**.

  1. 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 relativi all'inferenza dell'apprendimento automatico](ml-troubleshooting.md).

## Fasi successive
<a name="ml-image-classification-camera-next-steps"></a>

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, consulta[Personalizza i tuoi componenti di machine learning](ml-customization.md).