

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Execute inferência de classificação de imagens de amostra usando o Lite TensorFlow
<a name="ml-tutorial-image-classification"></a>

Este tutorial mostra como usar o componente de inferência de [classificação de imagem TensorFlow Lite](tensorflow-lite-image-classification-component.md) para realizar exemplos de inferência de classificação de imagens em um dispositivo principal do Greengrass. Esse componente inclui as seguintes dependências de componentes: 
+ TensorFlow Componente de armazenamento de modelos de classificação de imagem Lite
+ TensorFlow Componente Lite Runtime

Quando você implanta esse componente, ele baixa um modelo MobileNet v1 pré-treinado e instala o tempo de execução [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) e suas dependências. Esse componente publica resultados de inferência no tópico `ml/tflite/image-classification`. Para visualizar esses resultados de inferência, use o cliente AWS IoT MQTT no AWS IoT console para assinar este tópico. 

Neste tutorial, você implanta o componente de inferência de amostra para realizar a classificação da imagem na imagem de amostra fornecida pelo AWS IoT Greengrass. Depois de concluir este tutorial, você pode concluir [Tutorial: Execute inferência de classificação de imagens de amostra em imagens de uma câmera usando o TensorFlow Lite](ml-tutorial-image-classification-camera.md), que mostra como modificar o componente de inferência de amostra para realizar a classificação de imagens em imagens de uma câmera localmente em um dispositivo principal do Greengrass.

Para obter mais informações sobre machine learning nos dispositivos Greengrass, consulte [Executar a inferência de machine learning](perform-machine-learning-inference.md).

**Topics**
+ [Pré-requisitos](#ml-tutorial-prereqs)
+ [Etapa 1: assinar o tópico de notificações padrão](#ml-image-classification-subscribe)
+ [Etapa 2: implantar o componente de classificação de imagem TensorFlow Lite](#ml-image-classification-deploy)
+ [Etapa 3: exibir resultados de inferência](#ml-image-classification-results)
+ [Próximas etapas](#ml-image-classification-next-steps)

## Pré-requisitos
<a name="ml-tutorial-prereqs"></a>

Para concluir este tutorial, você precisará do seguinte:
+ Um dispositivo principal do Linux Greengrass. Se você não tiver uma, consulte [Tutorial: Conceitos básicos do AWS IoT Greengrass V2](getting-started.md). O dispositivo principal deve atender aos seguintes requisitos:<a name="ml-component-requirements"></a>
  + Nos dispositivos principais do Greengrass que executam o Amazon Linux 2 ou o Ubuntu 18.04, a [Biblioteca do GNU C](https://www.gnu.org/software/libc/) (glibc) versão 2.27 ou posterior está instalada no dispositivo.
  + Em dispositivos Armv7l, como o Raspberry Pi, as dependências do OpenCV-Python estão instaladas no dispositivo. Execute o seguinte comando para instalar as dependências.

    ```
    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    ```
  + Os dispositivos Raspberry Pi que executam o Raspberry Pi OS Bullseye devem atender aos seguintes requisitos:
    + NumPy 1.22.4 ou posterior instalado no dispositivo. O Raspberry Pi OS Bullseye inclui uma versão anterior do NumPy, então você pode executar o seguinte comando para atualizar NumPy o dispositivo.

      ```
      pip3 install --upgrade numpy
      ```
    + A pilha de câmeras antiga habilitada no dispositivo. O Raspberry Pi OS Bullseye inclui uma nova pilha de câmeras que está habilitada por padrão e não é compatível, portanto você precisa habilitar a pilha de câmeras antiga.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**Para habilitar a pilha de câmeras antiga**

      1. Execute o comando abaixo para abrir a ferramenta de configuração do Raspberry Pi.

         ```
         sudo raspi-config
         ```

      1. Selecione **Opções de interface**.

      1. Selecione **Câmera antiga** para habilitar a pilha de câmeras antiga.

      1. Reinicie o Raspberry Pi.

## Etapa 1: assinar o tópico de notificações padrão
<a name="ml-image-classification-subscribe"></a>

Nesta etapa, você configura o cliente AWS IoT MQTT no AWS IoT console para assistir às mensagens MQTT publicadas pelo componente de classificação de imagem TensorFlow Lite. Por padrão, o componente publica resultados de inferência no tópico `ml/tflite/image-classification`. Inscreva-se neste tópico antes de implantar o componente em seu dispositivo principal do Greengrass para ver os resultados da inferência quando o componente é executado pela primeira vez. 



**Para se inscrever no tópico de notificações padrão**

1. No menu de navegação do [console do AWS IoT](https://console.aws.amazon.com/iot/), escolha **Teste, Cliente de teste MQTT**.

1. Em **Inscrever-se em um tópico**, na caixa **Nome do tópico**, digite **ml/tflite/image-classification**.

1. Escolha **Assinar**.

## Etapa 2: implantar o componente de classificação de imagem TensorFlow Lite
<a name="ml-image-classification-deploy"></a>

Nesta etapa, você implanta o componente de classificação de imagem TensorFlow Lite em seu dispositivo principal:

### Para implantar o componente de classificação de imagem TensorFlow Lite (console)
<a name="ml-image-classification-deploy-console"></a>

1. No menu de navegação do [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), selecione **Componentes**.

1. Na página **Componentes**, na guia **Componentes públicos**, escolha `aws.greengrass.TensorFlowLiteImageClassification`.

1. Na página **aws.greengrass.TensorFlowLiteImageClassification**, escolha **Implantar**.

1. <a name="add-deployment"></a>Em **Adicionar à implantação**, escolha uma das seguintes opções:

   1. Para mesclar esse componente a uma implantação existente em seu dispositivo de destino, escolha **Adicionar à implantação existente** e selecione a implantação que você deseja revisar.

   1. Para criar uma nova implantação em seu dispositivo de destino, escolha **Criar nova implantação**. Se você tiver uma implantação existente em seu dispositivo, escolher essa etapa substituirá a implantação existente. 

1. <a name="specify-deployment-target"></a>Na página **Especificar destino**, faça o seguinte: 

   1. Em **Informações de implantação**, insira ou modifique o nome amigável para sua implantação.

   1. Em **Destinos de implantação**, selecione um alvo para sua implantação e escolha **Avançar**. Você não pode alterar o destino de implantação se estiver revisando uma implantação existente.

1. Na página **Selecionar componentes**, em **Componentes públicos**, verifique se o componente `aws.greengrass.TensorFlowLiteImageClassification` está selecionado e escolha **Avançar**.

1. Na página **Configurar componentes**, mantenha as configurações padrão e escolha **Avançar**.

1. Na página **Definir configurações avançadas**, mantenha as configurações padrão e escolha **Avançar**.

1. Na página **Revisar**, escolha **Implantar**.

### Para implantar o componente de classificação de imagem TensorFlow Lite (AWS CLI)
<a name="ml-image-classification-deploy-cli"></a>

1. Crie um `deployment.json` arquivo para definir a configuração de implantação do componente de classificação de imagem TensorFlow Lite. Esse arquivo deve ser semelhante ao seguinte:

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.TensorFlowLiteImageClassification": {
         "componentVersion": 2.1.0,
         "configurationUpdate": {
         }
       }
     }
   }
   ```
   + No campo `targetArn`, substitua `targetArn` pelo nome do recurso da Amazon (ARN) da coisa ou do grupo de coisas do destino da implantação, no formato a seguir: 
     + Coisa: `arn:aws:iot:region:account-id:thing/thingName`
     + Grupo de coisas: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + Este tutorial usa o componente versão 2.1.0. No objeto `aws.greengrass.TensorFlowLiteObjectDetection` componente, *2.1.0* substitua para usar uma versão diferente do componente de detecção de objetos TensorFlow Lite.

1. Execute o comando a seguir para implantar o componente de classificação de imagem TensorFlow Lite no dispositivo:

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

A implantação pode levar vários minutos para ser concluída. Na próxima etapa, verifique o log do componente para verificar se a implantação foi concluída com êxito e para ver os resultados da inferência.

## Etapa 3: exibir resultados de inferência
<a name="ml-image-classification-results"></a>

Depois de implantar o componente, você pode visualizar os resultados da inferência no registro do componente em seu dispositivo principal do Greengrass e no cliente MQTT AWS IoT no console. AWS IoT Para assinar o tópico no qual o componente publica resultados de inferência, consulte [Etapa 1: assinar o tópico de notificações padrão](#ml-image-classification-subscribe).
+ **AWS IoT Cliente MQTT** — Para visualizar os resultados que o componente de inferência publica no [tópico de notificações padrão](#ml-image-classification-subscribe), conclua as seguintes etapas:

  1. No menu de navegação do [console do AWS IoT](https://console.aws.amazon.com/iot/), escolha **Teste, Cliente de teste MQTT**.

  1. Em **Assinaturas**, escolha **ml/tflite/image-classification**.

     Você verá mensagens semelhantes ao exemplo a seguir.

     ```
     {
       "timestamp": "2021-01-01 00:00:00.000000",
       "inference-type": "image-classification",
       "inference-description": "Top 5 predictions with score 0.3 or above ",
       "inference-results": [
         {
           "Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "Persian cat",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "tiger cat",
           "Score": "0.5882352941176471"
         },
         {
           "Label": "dalmatian, coach dog, carriage dog",
           "Score": "0.5607843137254902"
         },
         {
           "Label": "malamute, malemute, Alaskan malamute",
           "Score": "0.5450980392156862"
         }
       ]
     }
     ```
+ **Log do componente**: para visualizar os resultados da inferência no registro do componente, execute o comando a seguir em seu dispositivo principal do Greengrass. 

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

  Serão apresentados resultados semelhantes ao exemplo a seguir.

  ```
  2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. Publishing results to the IoT core.... {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}
          
  2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. {"timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [{"Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471"}, {"Label": "Persian cat", "Score": "0.5882352941176471"}, {"Label": "tiger cat", "Score": "0.5882352941176471"}, {"Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902"}, {"Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862"}]}. {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}
  ```

Se você não conseguir ver os resultados da inferência no log do componente ou no cliente MQTT, a implantação falhou ou não atingiu o dispositivo principal. Isso pode ocorrer se seu dispositivo principal não estiver conectado à Internet ou não tiver as permissões corretas para executar o componente. Execute o comando a seguir em seu dispositivo principal para visualizar o arquivo de log do software AWS IoT Greengrass principal. Esse arquivo inclui logs do serviço de implantação do dispositivo principal do Greengrass.

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

Para obter mais informações, consulte [Solução de problemas de inferência de Machine learning do](ml-troubleshooting.md).

## Próximas etapas
<a name="ml-image-classification-next-steps"></a>

Se você tiver um dispositivo principal do Greengrass com uma interface de câmera compatível, poderá concluir [Tutorial: Execute inferência de classificação de imagens de amostra em imagens de uma câmera usando o TensorFlow Lite](ml-tutorial-image-classification-camera.md), que mostra como modificar o componente de inferência de amostra para executar a classificação de imagens em imagens de uma câmera.

Para explorar mais a configuração do componente de inferência de [classificação de imagem TensorFlow Lite](tensorflow-lite-image-classification-component.md) de amostra, tente o seguinte:
+ Modifique o parâmetro de configuração `InferenceInterval` para alterar a frequência com que o código de inferência é executado.
+ Modifique os parâmetros de configuração `ImageName` e `ImageDirectory` na configuração do componente de inferência para especificar uma imagem personalizada a ser usada para inferência. 

Para obter informações sobre como personalizar a configuração de componentes públicos ou criar componentes personalizados de machine learning, consulte [Personalizar seus componentes de machine learning](ml-customization.md).