Tutorial: creación de una aplicación de Lambda con Amazon Rekognition - AWS Kit de herramientas con Amazon Q

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: creación de una aplicación de Lambda con Amazon Rekognition

En este tutorial se muestra cómo crear una aplicación de Lambda que utilice Amazon Rekognition para etiquetar objetos de S3 con las etiquetas detectadas.

Para obtener información sobre los requisitos previos y la configuración de AWS Toolkit for Visual Studio, consulte Uso de plantillas AWS Lambda en AWS el Toolkit for Visual Studio.

Creación de un proyecto Image Rekognition de Lambda con .NET Core

El siguiente procedimiento describe cómo crear una aplicación Amazon Rekognition Lambda a partir del. AWS Toolkit for Visual Studio

nota

Tras su creación, la aplicación tiene una solución con dos proyectos: el proyecto fuente que contiene el código de la función de Lambda para implementarlo en Lambda y un proyecto de prueba que utiliza xUnit para probar la función localmente.

A veces, Visual Studio no puede encontrar todas las NuGet referencias de sus proyectos. Esto se debe a que los blueprints requieren dependencias de las que hay que recuperar. NuGet Cuando se crean nuevos proyectos, Visual Studio solo extrae referencias locales y no referencias remotas. NuGet Para corregir NuGet errores: haga clic con el botón derecho en las referencias y seleccione Restaurar paquetes.

  1. En Visual Studio, expanda el menú Archivo, expanda Nuevo y, a continuación, elija Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, asegúrese de que los cuadros desplegables Idioma, Plataforma y Tipo de proyecto estén configurados en «Todos...» e introdúzcalos aws lambda en el campo de búsqueda.

  3. Seleccione la plantilla AWS Lambda With Tests (.NET Core - C#).

  4. Haga clic en Siguiente para abrir el cuadro de diálogo Configurar su nuevo proyecto.

  5. En el cuadro de diálogo Configure su nuevo proyecto, introduzca ImageRekognition «» como nombre y, a continuación, complete los campos restantes según sus preferencias. Pulse el botón Crear para pasar al cuadro de diálogo de selección de planos.

  6. En el cuadro de diálogo Seleccionar esquema, elija el esquema Detectar etiquetas de imagen y, a continuación, elija Finalizar para crear el proyecto de Visual Studio.

    nota

    Este esquema proporciona código para escuchar los eventos de Amazon S3 y utiliza Amazon Rekognition para detectar etiquetados y añadirlos al objeto de S3 como etiquetas.

Revisión de los archivos del proyecto

En las siguientes secciones se examinan estos archivos de proyecto:

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

Dentro del Function.cs archivo, el primer segmento de código es el atributo de ensamblaje, ubicado en la parte superior del archivo. De forma predeterminada, Lambda solo acepta parámetros de entrada y tipos de retorno. System.IO.Stream Debe registrar un serializador para usar clases mecanografiadas para los parámetros de entrada y los tipos de retorno. El atributo assembly registra el serializador JSON de Lambda, que se utiliza Newtonsoft.Json para convertir flujos en clases mecanografiadas. Puede definir el serializador en el nivel del conjunto o del método.

A continuación, se muestra un ejemplo del atributo assembly:

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

La clase tiene dos constructores. El primero es un constructor predeterminado que se utiliza cuando Lambda invoca la función. Este constructor crea los clientes de los servicios Amazon S3 y Amazon Rekognition. El constructor también recupera las AWS credenciales de estos clientes de la función de IAM que usted asigna a la función al implementarla. La AWS región de los clientes se establece en la región en la que se ejecuta la función Lambda. En este blueprint, solo desea añadir etiquetas al objeto de Amazon S3 si el servicio Amazon Rekognition tiene un nivel mínimo de confianza en la etiqueta. Este constructor comprueba la variable de entorno MinConfidence para determinar el nivel de confianza aceptable. Puede configurar esta variable de entorno cuando implemente la función de Lambda.

A continuación, se muestra un ejemplo del constructor de primera clase de: Function.cs

public Function() { this.S3Client = new AmazonS3Client(); this.RekognitionClient = new AmazonRekognitionClient(); var environmentMinConfidence = System.Environment.GetEnvironmentVariable(MIN_CONFIDENCE_ENVIRONMENT_VARIABLE_NAME); if(!string.IsNullOrWhiteSpace(environmentMinConfidence)) { float value; if(float.TryParse(environmentMinConfidence, out value)) { this.MinConfidence = value; Console.WriteLine($"Setting minimum confidence to {this.MinConfidence}"); } else { Console.WriteLine($"Failed to parse value {environmentMinConfidence} for minimum confidence. Reverting back to default of {this.MinConfidence}"); } } else { Console.WriteLine($"Using default minimum confidence of {this.MinConfidence}"); } }

El siguiente ejemplo demuestra cómo se puede utilizar el segundo constructor para realizar pruebas. El proyecto de prueba configura sus propios clientes S3 y Rekognition y los pasa a:

public Function(IAmazonS3 s3Client, IAmazonRekognition rekognitionClient, float minConfidence) { this.S3Client = s3Client; this.RekognitionClient = rekognitionClient; this.MinConfidence = minConfidence; }

A continuación, se muestra un ejemplo del FunctionHandler método incluido en el archivo. Function.cs

public async Task FunctionHandler(S3Event input, ILambdaContext context) { foreach(var record in input.Records) { if(!SupportedImageTypes.Contains(Path.GetExtension(record.S3.Object.Key))) { Console.WriteLine($"Object {record.S3.Bucket.Name}:{record.S3.Object.Key} is not a supported image type"); continue; } Console.WriteLine($"Looking for labels in image {record.S3.Bucket.Name}:{record.S3.Object.Key}"); var detectResponses = await this.RekognitionClient.DetectLabelsAsync(new DetectLabelsRequest { MinConfidence = MinConfidence, Image = new Image { S3Object = new Amazon.Rekognition.Model.S3Object { Bucket = record.S3.Bucket.Name, Name = record.S3.Object.Key } } }); var tags = new List(); foreach(var label in detectResponses.Labels) { if(tags.Count < 10) { Console.WriteLine($"\tFound Label {label.Name} with confidence {label.Confidence}"); tags.Add(new Tag { Key = label.Name, Value = label.Confidence.ToString() }); } else { Console.WriteLine($"\tSkipped label {label.Name} with confidence {label.Confidence} because maximum number of tags reached"); } } await this.S3Client.PutObjectTaggingAsync(new PutObjectTaggingRequest { BucketName = record.S3.Bucket.Name, Key = record.S3.Object.Key, Tagging = new Tagging { TagSet = tags } }); } return; }

FunctionHandler es el método al que Lambda llama después de construir la instancia. Observe que el parámetro de entrada es de tipo S3Event y no Stream. Puede hacerlo gracias al serializador JSON de Lambda registrado. El S3Event contiene toda la información acerca del evento activado en S3. La función recorre cíclicamente todos los objetos de S3 que forman parte del evento e indica a Rekognition que detecte etiquetas. Una vez que las etiquetas se han detectado, se añaden como etiquetas al objeto de S3.

nota

El código contiene llamadas aConsole.WriteLine(). Cuando la función se ejecuta en Lambda, todas las llamadas se Console.WriteLine() redirigen a Amazon CloudWatch Logs.

2. aws-lambda-tools-defaults.json

El aws-lambda-tools-defaults.json archivo contiene los valores predeterminados que el blueprint ha establecido para rellenar previamente algunos de los campos del asistente de despliegue. También resulta útil para configurar las opciones de línea de comandos para la integración con la CLI de.NET Core.

Para acceder a la integración de la CLI de.NET Core, navegue hasta el directorio del proyecto de la función y escribadotnet lambda help.

nota

El controlador de funciones indica a qué método debe llamar Lambda en respuesta a la función invocada. El formato de este campo es:. <assembly-name>::<full-type-name>::<method-name> El espacio de nombres debe incluirse con el nombre del tipo.

Implementación de la función

El siguiente procedimiento describe cómo implementar la función Lambda.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto de Lambda y seleccione Publicar en AWS Lambda para abrir la ventana Cargar a. AWS Lambda

    nota

    Los valores preestablecidos se recuperan del aws-lambda-tools-defaults.json archivo.

  2. En la AWS Lambda ventana Cargar a, introduzca un nombre en el campo Nombre de la función y, a continuación, pulse el botón Siguiente para acceder a la ventana de detalles avanzados de la función.

    nota

    En este ejemplo, se utiliza el nombre de la funciónImageRekognition.

  3. En la ventana Detalles de funciones avanzadas, seleccione un rol de IAM que dé permiso para que su código acceda a sus recursos de Amazon S3 y Amazon Rekognition.

    nota

    Si sigue este ejemplo, seleccione el rol. AWSLambda_FullAccess

  4. Establezca la variable de entorno en 60 y, MinConfidence a continuación, seleccione Cargar para iniciar el proceso de implementación. El proceso de publicación finaliza cuando se muestra la vista de funciones en el AWS explorador.

  5. Tras una implementación exitosa, configure Amazon S3 para que envíe sus eventos a su nueva función desde la pestaña Fuentes de eventos.

  6. En la pestaña Fuentes de eventos, pulse el botón Añadir y, a continuación, seleccione el bucket de Amazon S3 que desee conectar con su función Lambda.

    nota

    El depósito debe estar en la misma AWS región que la función Lambda.

Prueba de la función

Ahora que la función se ha implementado y que se ha configurado un bucket de S3 como origen de eventos para ella, abra el navegador de buckets de S3 desde el Explorador de AWS para el bucket seleccionado. A continuación, cargue algunas imágenes.

Cuando se haya completado la carga, puede confirmar que su función se ha ejecutado comprobando los registros en la vista de la función. O bien, haga clic con el botón derecho del ratón en las imágenes del navegador del bucket y elija Properties (Propiedades). En la pestaña Tags (Etiquetas), puede ver las etiquetas que se han aplicado al objeto.