

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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.

# Conector de la clasificación de ML Image
<a name="image-classification-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

Los [conectores](connectors.md) de clasificación de imágenes de ML proporcionan un servicio de inferencia de aprendizaje automático (ML) que se ejecuta en el AWS IoT Greengrass núcleo. Este servicio de inferencia local realiza la clasificación de imágenes mediante un modelo entrenado por el algoritmo de clasificación de imágenes de SageMaker IA.

Las funciones Lambda definidas por el usuario utilizan el AWS IoT Greengrass SDK de Machine Learning para enviar solicitudes de inferencia al servicio de inferencia local. El servicio ejecuta la inferencia localmente y devuelve las probabilidades de que la imagen de entrada pertenezca a categorías específicas.

AWS IoT Greengrass proporciona las siguientes versiones de este conector, que está disponible para varias plataformas.

------
#### [ Version 2 ]


| Connector | Descripción y ARN | 
| --- | --- | 
| Clasificación de imágenes XML: Aarch64 JTX2 |  Servicio de inferencia de clasificación de imágenes para NVIDIA Jetson. TX2 Admite aceleración de GPU. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2` | 
| Clasificación de imágenes de ML x86\$164 |  Servicio de inferencia para clasificación de imágenes para plataformas x86\$164. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/2` | 
| Clasificación de imágenes ML ARMv7 |  Servicio de inferencia de clasificación de imágenes para ARMv7 plataformas. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2` | 

------
#### [ Version 1 ]


| Connector | Descripción y ARN | 
| --- | --- | 
| Clasificación de imágenes XML Aarch64 JTX2 |  Servicio de inferencia de clasificación de imágenes para NVIDIA Jetson. TX2 Admite aceleración de GPU. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/1` | 
| Clasificación de imágenes de ML x86\$164 |  Servicio de inferencia para clasificación de imágenes para plataformas x86\$164. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/1` | 
| Clasificación de imágenes de ML Armv7 |  Servicio de inferencia para clasificación de imágenes para plataformas Armv7. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/1` | 

------

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#image-classification-connector-changelog).

## Requisitos
<a name="image-classification-connector-req"></a>

Estos conectores tienen los siguientes requisitos:

------
#### [ Version 2 ]
+ AWS IoT Greengrass Core Software v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
Para usar Python 3.8, ejecute el siguiente comando para crear un enlace simbólico desde la carpeta de instalación predeterminada de Python 3.7 a los binarios de Python 3.8 instalados.  

  ```
  sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7
  ```
Esto configura su dispositivo para que cumpla con el requisito de Python para AWS IoT Greengrass.
+ <a name="req-image-classification-framework"></a>Dependencias del MXNet marco Apache instalado en el dispositivo principal. Para obtener más información, consulte [Instalar MXNet dependencias en el núcleo AWS IoT Greengrass](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Un [recurso de aprendizaje automático](ml-inference.md#ml-resources) del grupo Greengrass que hace referencia a una fuente de modelos de SageMaker IA. Este modelo debe ser entrenado por el algoritmo de clasificación de imágenes de SageMaker IA. Para obtener más información, consulte [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ <a name="req-image-classification-feedback"></a>El [conector de Feedback de ML ](ml-feedback-connector.md) añadido al grupo de Greengrass y configurado. Solo es necesario si desea utilizar el conector para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.
+ <a name="req-image-classification-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `sagemaker:DescribeTrainingJob` en la tarea de entrenamiento de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte [Administración del rol de grupo de Greengrass (consola)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1) Si cambia el trabajo de entrenamiento de destino en el futuro, asegúrese de actualizar el rol de grupo.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.1.0 para interactuar con este conector.

------
#### [ Version 1 ]
+ AWS IoT Greengrass Core Software v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="req-image-classification-framework"></a>Dependencias del MXNet marco Apache instalado en el dispositivo principal. Para obtener más información, consulte [Instalar MXNet dependencias en el núcleo AWS IoT Greengrass](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Un [recurso de aprendizaje automático](ml-inference.md#ml-resources) del grupo Greengrass que hace referencia a una fuente de modelos de SageMaker IA. Este modelo debe ser entrenado por el algoritmo de clasificación de imágenes de SageMaker IA. Para obtener más información, consulte [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ <a name="req-image-classification-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `sagemaker:DescribeTrainingJob` en la tarea de entrenamiento de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte [Administración del rol de grupo de Greengrass (consola)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1) Si cambia el trabajo de entrenamiento de destino en el futuro, asegúrese de actualizar el rol de grupo.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.0.0 o posterior para interactuar con este conector.

------

## Parámetros de conector
<a name="image-classification-connector-param"></a>

Estos conectores proporcionan los siguientes parámetros.

------
#### [ Version 2 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Es la ruta local absoluta del recurso ML dentro del entorno de Lambda. Esta es la ruta de destino que se ha especificado para el recurso de aprendizaje automático.  
Si ha creado el recurso de aprendizaje automático en la consola, esta es la ruta local.
Nombre para mostrar en la AWS IoT consola: ruta de destino **del modelo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
El ID del recurso de aprendizaje automático que hace referencia al modelo de origen.  
Mostrar el nombre en la AWS IoT consola: **SageMaker recurso ARN del trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
El ARN del trabajo de formación en SageMaker IA que representa la fuente del modelo de SageMaker IA. El modelo debe entrenarse mediante el algoritmo de clasificación de imágenes de la SageMaker IA.  
Nombre para mostrar en la AWS IoT consola: ARN del **SageMaker trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
El nombre del servicio de inferencia local. Las funciones Lambda definidas por el usuario invocan el servicio pasando el nombre a la función `invoke_inference_service` del SDK de Machine AWS IoT Greengrass Learning. Para ver un ejemplo, consulta [Ejemplo de uso](#image-classification-connector-usage).  
Nombre para mostrar en la AWS IoT consola: nombre del servicio de **inferencia local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
La cantidad de tiempo (en segundos) antes de que se termine la solicitud de inferencia. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **Tiempo de espera (segundo)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
La cantidad de memoria (en KB) a la que el servicio tiene acceso. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **límite de memoria (KB)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
El contexto de informática de la CPU o GPU (acelerada). Esta propiedad se aplica únicamente al JTX2 conector Aarch64 de clasificación de imágenes ML.  
**Nombre para mostrar en la AWS IoT consola: aceleración de GPU**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `CPU` o `GPU`

`MLFeedbackConnectorConfigId`  <a name="param-image-classification-feedbackconfigid"></a>
El ID de la configuración de retroalimentación que se va a utilizar para cargar los datos de entrada del modelo. Debe coincidir con el ID de una configuración de comentarios definida para el [conector de comentarios de aprendizaje automático](ml-feedback-connector.md).  
Este parámetro solo es necesario si desea utilizar el conector de comentarios de aprendizaje automático para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.  
Nombre para mostrar en la AWS IoT consola: **ID de configuración del conector ML Feedback**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

------
#### [ Version 1 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Es la ruta local absoluta del recurso ML dentro del entorno de Lambda. Esta es la ruta de destino que se ha especificado para el recurso de aprendizaje automático.  
Si ha creado el recurso de aprendizaje automático en la consola, esta es la ruta local.
Nombre para mostrar en la AWS IoT consola: **ruta de destino del modelo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
El ID del recurso de aprendizaje automático que hace referencia al modelo de origen.  
Mostrar el nombre en la AWS IoT consola: **SageMaker recurso ARN del trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
El ARN del trabajo de formación en SageMaker IA que representa la fuente del modelo de SageMaker IA. El modelo debe entrenarse mediante el algoritmo de clasificación de imágenes de la SageMaker IA.  
Nombre para mostrar en la AWS IoT consola: ARN del **SageMaker trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
El nombre del servicio de inferencia local. Las funciones Lambda definidas por el usuario invocan el servicio pasando el nombre a la función `invoke_inference_service` del SDK de Machine AWS IoT Greengrass Learning. Para ver un ejemplo, consulta [Ejemplo de uso](#image-classification-connector-usage).  
Nombre para mostrar en la AWS IoT consola: nombre del servicio de **inferencia local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
La cantidad de tiempo (en segundos) antes de que se termine la solicitud de inferencia. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **Tiempo de espera (segundo)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
La cantidad de memoria (en KB) a la que el servicio tiene acceso. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **límite de memoria (KB)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
El contexto de informática de la CPU o GPU (acelerada). Esta propiedad se aplica únicamente al JTX2 conector Aarch64 de clasificación de imágenes ML.  
**Nombre para mostrar en la AWS IoT consola: aceleración de GPU**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `CPU` o `GPU`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="image-classification-connector-create"></a>

Los siguientes comandos de la CLI crean un parámetro `ConnectorDefinition` con una versión inicial que contiene un conector Image Classification de ML.

**Ejemplo: instancia de CPU**  
Este ejemplo crea una instancia del conector Image Classification de ML Armv7l.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**Ejemplo: instancia de GPU**  
En este ejemplo, se crea una instancia del JTX2 conector Aarch64 de clasificación de imágenes ML, que admite la aceleración de la GPU en una placa NVIDIA TX2 Jetson.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "GPUAcceleration": "GPU",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de estos conectores tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

**En la AWS IoT Greengrass consola, puede añadir un conector desde la página de conectores del grupo.** Para obtener más información, consulte [Introducción a los conectores de Greengrass (consola)](connectors-console.md).

## Datos de entrada
<a name="image-classification-connector-data-input"></a>

 Estos conectores aceptan un archivo de imagen como entrada. Los archivos de imagen de entrada deben tener el formato `jpeg` o `png`. Para obtener más información, consulte [Ejemplo de uso](#image-classification-connector-usage). 

Estos conectores no aceptan mensajes MQTT como datos de entrada.

## Datos de salida
<a name="image-classification-connector-data-output"></a>

Estos conectores devuelven una predicción con formato para el objeto identificado en la imagen de entrada:

```
[0.3,0.1,0.04,...]
```

La predicción contiene una lista de valores que se corresponden con las categorías utilizadas en el conjunto de datos de entrenamiento durante la capacitación de modelos. Cada valor representa la probabilidad de que la imagen se encuentre dentro de la categoría correspondiente. La categoría con la mayor probabilidad es la predicción dominante.

Estos conectores no publican mensajes MQTT como datos de salida.

## Ejemplo de uso
<a name="image-classification-connector-usage"></a>

El siguiente ejemplo de función de Lambda utiliza el [SDK de Machine Learning de AWS IoT Greengrass](lambda-functions.md#lambda-sdks-ml) para interactuar con un conector de Image Classification de ML.

**nota**  
 Puede descargar el SDK desde la página de descargas del [SDK de machine learning de AWS IoT Greengrass](what-is-gg.md#gg-ml-sdk-download).

En el ejemplo se inicializa un cliente SDK y de forma sincrónica llama a la función `invoke_inference_service` del SDK para invocar el servicio de inferencia local. Pasa el tipo de algoritmo, el nombre del servicio, el tipo de imagen y contenido de imágenes. A continuación, el ejemplo analiza la respuesta del servicio para obtener los resultados de probabilidad (predicciones).

------
#### [ Python 3.7 ]

```
import logging
from threading import Timer

import numpy as np

import greengrass_machine_learning_sdk as ml

# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
    content = bytearray(f.read())

client = ml.client('inference')

def infer():
    logging.info('invoking Greengrass ML Inference service')

    try:
        resp = client.invoke_inference_service(
            AlgoType='image-classification',
            ServiceName='imageClassification',
            ContentType='image/jpeg',
            Body=content
        )
    except ml.GreengrassInferenceException as e:
        logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
        return
    except ml.GreengrassDependencyException as e:
        logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
        return

    logging.info('resp: {}'.format(resp))
    predictions = resp['Body'].read().decode("utf-8")
    logging.info('predictions: {}'.format(predictions))
    
    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    count = len(predictions.split(','))
    predictions_arr = np.fromstring(predictions, count=count, sep=',')

    # Perform business logic that relies on the predictions_arr, which is an array
    # of probabilities.
    
    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()
    return

infer()

def function_handler(event, context):
    return
```

------
#### [ Python 2.7 ]

```
import logging
from threading import Timer

import numpy

import greengrass_machine_learning_sdk as gg_ml

# The inference input image.
with open("/test_img/test.jpg", "rb") as f:
    content = f.read()

client = gg_ml.client("inference")


def infer():
    logging.info("Invoking Greengrass ML Inference service")

    try:
        resp = client.invoke_inference_service(
            AlgoType="image-classification",
            ServiceName="imageClassification",
            ContentType="image/jpeg",
            Body=content,
        )
    except gg_ml.GreengrassInferenceException as e:
        logging.info('Inference exception %s("%s")', e.__class__.__name__, e)
        return
    except gg_ml.GreengrassDependencyException as e:
        logging.info('Dependency exception %s("%s")', e.__class__.__name__, e)
        return

    logging.info("Response: %s", resp)
    predictions = resp["Body"].read()
    logging.info("Predictions: %s", predictions)

    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    predictions_arr = numpy.fromstring(predictions, sep=",")
    logging.info("Split into %s predictions.", len(predictions_arr))

    # Perform business logic that relies on predictions_arr, which is an array
    # of probabilities.

    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()


infer()


# In this example, the required AWS Lambda handler is never called.
def function_handler(event, context):
    return
```

------

La `invoke_inference_service` función del AWS IoT Greengrass Machine Learning SDK acepta los siguientes argumentos.


| Argumento | Description (Descripción) | 
| --- | --- | 
| `AlgoType` | El nombre del tipo de algoritmo que usar para la interferencia. En la actualidad, solo se admite `image-classification`. Obligatorio: `true` Tipo: `string` Valores válidos: `image-classification` | 
| `ServiceName` | El nombre del servicio de inferencia local. Utilice el nombre que especificó para el parámetro `LocalInferenceServiceName` al configurar el conector. Obligatorio: `true` Tipo: `string` | 
| `ContentType` | El tipo mime de la imagen de entrada. Obligatorio: `true` Tipo: `string` Valores válidos: `image/jpeg, image/png` | 
| `Body` | El contenido del archivo de la imagen de entrada. Obligatorio: `true` Tipo: `binary` | 

## Instalar MXNet dependencias en el núcleo AWS IoT Greengrass
<a name="image-classification-connector-config"></a>

Para utilizar un conector de clasificación de imágenes de aprendizaje automático, debe instalar las dependencias del MXNet marco Apache en el dispositivo principal. Los conectores utilizan el marco de trabajo para servir al modelo de ML.

**nota**  
Estos conectores vienen con una MXNet biblioteca precompilada, por lo que no es necesario instalar el MXNet marco en el dispositivo principal. 

AWS IoT Greengrass proporciona scripts para instalar las dependencias en las siguientes plataformas y dispositivos comunes (o para utilizarlos como referencia al instalarlos). Si utiliza una plataforma o dispositivo diferente, consulte la [MXNet documentación](https://mxnet.apache.org/) de la configuración.

Antes de instalar MXNet las dependencias, asegúrate de que las [bibliotecas del sistema](#image-classification-connector-logging) necesarias (con las versiones mínimas especificadas) estén presentes en el dispositivo.

------
#### [ NVIDIA Jetson TX2 ]

1. Instalación del conjunto de herramientas CUDA 9.0 y cuDNN 7.0. Puede seguir las instrucciones en [Configuración de otros dispositivos](setup-filter.other.md) en el tutorial de Introducción.

1. Habilitar repositorios universales para que el conector pueda instalar software abierto mantenido por la comunidad. Para obtener más información, consulte [Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu) en la documentación de Ubuntu.

   1. Abra el archivo `/etc/apt/sources.list`.

   1. Asegúrese de que las siguientes líneas no tienen comentarios.

      ```
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      ```

1. Guarde una copia del siguiente script de instalación en un archivo llamado `nvidiajtx2.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install numpy==1.15.0 scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo nvidiajtx2.sh
   ```

------
#### [ x86\$164 (Ubuntu or Amazon Linux)  ]

1. Guarde una copia del siguiente script de instalación en un archivo llamado `x86_64.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
     apt-get install -y python3.7 python3.7-dev
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   pip install numpy==1.15.0 scipy opencv-python
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo x86_64.sh
   ```

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

1. Guarde una copia del siguiente script de instalación en un archivo llamado `armv7l.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev
   
   # python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2
   # This script installs python-numpy first so that python-opencv can be installed, and then install the latest
   # numpy-1.15.x with pip
   apt-get install -y python-numpy python-opencv
   dpkg --remove --force-depends python-numpy
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install --upgrade numpy==1.15.0 picamera scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo bash armv7l.sh
   ```
**nota**  
En una solución Raspberry Pi, el uso de `pip` para instalar dependencias de aprendizaje automático es una operación de uso intensivo de memoria que puede provocar que el dispositivo se quede sin memoria y deje de responder. Como alternativa, puede aumentar temporalmente el tamaño de intercambio:  
En `/etc/dphys-swapfile`, aumente el valor de la variable `CONF_SWAPSIZE` y, a continuación, ejecute el siguiente comando para reiniciar `dphys-swapfile`.  

   ```
   /etc/init.d/dphys-swapfile restart
   ```

------

## Registro y solución de problemas
<a name="image-classification-connector-logging"></a>

Según la configuración del grupo, los registros de eventos y errores se escriben en los CloudWatch registros, en el sistema de archivos local o en ambos. Los registros de este conector utilizan el prefijo `LocalInferenceServiceName`. Si el conector se comporta de forma inesperada, compruebe los registros del conector. Estos suelen contener información de depuración útil, como, por ejemplo, que falta una dependencia de biblioteca de ML o la causa de un error de inicio del conector.

Si el AWS IoT Greengrass grupo está configurado para escribir registros locales, el conector escribe los archivos de registro en ellos`greengrass-root/ggc/var/log/user/region/aws/`. Para obtener más información sobre los registros de Greengrass, consulte [Supervisión con AWS IoT Greengrass registros](greengrass-logs-overview.md).

Utilice la siguiente información como ayuda para solucionar problemas con los conectores Image Classification de ML.

**Bibliotecas del sistema obligatorias**

Las siguientes pestañas muestran las bibliotecas del sistema necesarias para cada conector Image Classification de ML.

------
#### [ ML Image Classification Aarch64 JTX2 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-aarch64.so.1 | GLIBC\$12.17 | 
| libc.so.6 | GLIBC\$12.17 | 
| libcublas.so.9.0 | no aplicable | 
| libcudart.so.9.0 | no aplicable | 
| libcudnn.so.7 | no aplicable | 
| libcufft.so.9.0 | no aplicable | 
| libcurand.so.9.0 | no aplicable | 
| libcusolver.so.9.0 | no aplicable | 
| libgcc\$1s.so.1 | GCC\$14.2.0 | 
| libgomp.so.1 | GOMP\$14.0, OMP\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.17 | 
| librt.so.1 | GLIBC\$12.17 | 
| libstdc\$1\$1.so.6 | GLIBCXX\$13.4.21, CXXABI\$11.3.8 | 

------
#### [ ML Image Classification x86\$164 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-x86-64.so.2 | GCC\$14.0.0 | 
| libc.so.6 | GLIBC\$12.4 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.2.5 | 
| librt.so.1 | GLIBC\$12.2.5 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, GLIBCXX\$13.4.21 | 

------
#### [ ML Image Classification Armv7 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-armhf.so.3 | GLIBC\$12.4 | 
| libc.so.6 | GLIBC\$12.7 | 
| libgcc\$1s.so.1 | GCC\$14.0.0 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.4 | 
| libpthread.so.0 | GLIBC\$12.4 | 
| librt.so.1 | GLIBC\$12.4 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, CXXABI\$1ARM\$11.3.3, GLIBCXX\$13.4.20 | 

------

**Problemas**


| Síntoma | Solución | 
| --- | --- | 
|  En una Raspberry Pi, se registra el siguiente mensaje de error y no está utilizando la cámara: `Failed to initialize libdc1394`   |  Ejecute el comando siguiente para deshabilitar el controlador: <pre>sudo ln /dev/null /dev/raw1394</pre> Esta operación es efímera y el enlace simbólico desaparecerá después del reinicio. Consulte el manual de su distribución de SO para obtener información acerca de cómo crear automáticamente el enlace al reiniciar.  | 

## Licencias
<a name="image-classification-connector-license"></a>

Los conectores Image Classification de ML incluyen las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License
+ [Biblioteca de red neuronal profunda (DNNL)](https://github.com/intel/mkl-dnn)/Licencia Apache 2.0
+ [Biblioteca de tiempo de ejecución OpenMP\$1](https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/optimization-and-programming-guide/openmp-support/openmp-library-support/openmp-run-time-library-routines.html)/Consulte [Licencias de bibliotecas de tiempo de ejecución Intel OpenMP](#openmp-license).
+ [mxnet](https://pypi.org/project/mxnet/)/Licencia Apache 2.0
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

**Licencias de biblioteca de tiempo de ejecución Intel OpenMP**. El tiempo de ejecución de Intel® OpenMP\$1 dispone de licencia doble, con una licencia comercial (COM) como parte de los productos Intel® Parallel Studio XE Suite y una licencia de código abierto BSD (OSS).

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="image-classification-connector-changelog"></a>

La siguiente tabla describe los cambios en cada versión del conector.


| Versión | Cambios | 
| --- | --- | 
| 2 | Se agregó el `MLFeedbackConnectorConfigId` parámetro para admitir el uso del [conector ML Feedback](ml-feedback-connector.md) para cargar datos de entrada del modelo, publicar predicciones en un tema de MQTT y publicar métricas en Amazon CloudWatch.  | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>Un grupo de Greengrass solo puede contener una versión del conector a la vez. Para obtener información sobre cómo actualizar una versión de conector, consulte [Actualización de versiones de los conectores](connectors.md#upgrade-connector-versions).

## Véase también
<a name="image-classification-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Cómo realizar la inferencia de machine learning](ml-inference.md)
+ [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*