Didacticiel : Création d'une application Lambda Amazon Rekognition - AWS Boîte à outils avec Amazon Q

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Didacticiel : Création d'une application Lambda Amazon Rekognition

Ce didacticiel explique comment créer une application Lambda qui utilise Amazon Rekognition pour étiqueter des objets Amazon S3 avec des étiquettes détectées.

Pour les prérequis et les informations relatives à la configuration du AWS Toolkit for Visual Studio, consultez la section Utilisation des modèles AWS Lambda dans AWS le Toolkit for Visual Studio.

Création d'un projet de rekognition d'images Lambda Visual Studio .NET Core

La procédure suivante explique comment créer une application Amazon Rekognition Lambda à partir du. AWS Toolkit for Visual Studio

Note

Lors de sa création, votre application dispose d'une solution composée de deux projets : le projet source qui contient le code de votre fonction Lambda à déployer sur Lambda, et un projet de test utilisant xUnit pour tester votre fonction localement.

Il arrive que Visual Studio ne trouve pas toutes les NuGet références de vos projets. Cela est dû au fait que les plans nécessitent des dépendances qui doivent être NuGet extraites. Lorsque de nouveaux projets sont créés, Visual Studio extrait uniquement des références locales et non des références distantes NuGet. Pour corriger les NuGet erreurs : cliquez avec le bouton droit sur vos références et choisissez Restaurer les packages.

  1. Dans Visual Studio, développez le menu Fichier, développez Nouveau, puis choisissez Projet.

  2. Dans la boîte de dialogue Nouveau projet, assurez-vous que les listes déroulantes Langue, Plateforme et Type de projet sont définies sur « Tout... » et entrez aws lambda dans le champ Rechercher.

  3. Sélectionnez le modèle AWS Lambda with Tests (.NET Core - C#).

  4. Cliquez sur Suivant pour ouvrir la boîte de dialogue Configurer votre nouveau projet.

  5. Dans la boîte de dialogue Configurer votre nouveau projet, saisissez ImageRekognition « » pour le nom, puis complétez les champs restants selon vos préférences. Cliquez sur le bouton Créer pour accéder à la boîte de dialogue Sélectionner le plan.

  6. Dans la boîte de dialogue Sélectionner un plan, choisissez le plan Detect Image Labels, puis choisissez Terminer pour créer le projet Visual Studio.

    Note

    Ce plan fournit du code pour écouter les événements Amazon S3 et utilise Amazon Rekognition pour détecter les étiquettes et les ajouter à l'objet S3 sous forme de balises.

Révision des fichiers de projet

Les sections suivantes examinent ces fichiers de projet :

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

À l'intérieur du Function.cs fichier, le premier segment de code est l'attribut d'assemblage, situé en haut du fichier. Par défaut, Lambda accepte uniquement les paramètres d'entrée et les types de retour. System.IO.Stream Vous devez enregistrer un sérialiseur pour utiliser des classes typées pour les paramètres d'entrée et les types de retour. L'attribut assembly enregistre le sérialiseur Lambda JSON, qui permet de Newtonsoft.Json convertir les flux en classes typées. Vous pouvez définir le sérialiseur au niveau de l'assemblage ou de la méthode.

Voici un exemple de l'attribut 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 classe possède deux constructeurs. Le premier est un constructeur par défaut qui est utilisé lorsque Lambda appelle votre fonction. Ce constructeur crée les clients des services Amazon S3 et Amazon Rekognition. Le constructeur extrait également les AWS informations d'identification de ces clients à partir du rôle IAM que vous attribuez à la fonction lorsque vous la déployez. La AWS région pour les clients est définie sur la région dans laquelle votre fonction Lambda s'exécute. Dans ce plan, vous ne souhaitez ajouter des balises à l'objet Amazon S3 que si le service Amazon Rekognition possède un niveau de confiance minimal quant à l'étiquette. Ce constructeur vérifie la variable d'environnement MinConfidence pour déterminer le niveau de confiance acceptable. Vous pouvez définir cette variable d'environnement lorsque vous déployez la fonction Lambda.

Voici un exemple du premier constructeur de classe dans 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}"); } }

L'exemple suivant montre comment le second constructeur peut être utilisé pour les tests. Le projet de test configure ses propres clients S3 et Rekognition et les transmet :

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

Voici un exemple de la FunctionHandler méthode contenue dans le Function.cs fichier.

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 est la méthode que lambda appelle après avoir construit l'instance. Notez que le paramètre d'entrée est de type S3Event et pas un Stream. Vous pouvez effectuer cette action grâce au sérialiseur JSON Lambda enregistré. S3EventIl contient toutes les informations relatives à l'événement déclenché dans Amazon S3. La fonction parcourt tous les objets S3 qui faisaient partie de l'événement et indique à Rekognition de détecter les étiquettes. Lorsque les étiquettes ont été détectées, elles sont ajoutées sous forme d'étiquettes à l'objet S3.

Note

Le code contient des appels àConsole.WriteLine(). Lorsque la fonction est exécutée dans Lambda, tous les appels sont redirigés Console.WriteLine() vers Amazon CloudWatch Logs.

2. aws-lambda-tools-defaults.json

Le aws-lambda-tools-defaults.json fichier contient les valeurs par défaut définies par le plan pour préremplir certains champs de l'assistant de déploiement. Il est également utile pour définir les options de ligne de commande pour l'intégration à la CLI .NET Core.

Pour accéder à l'intégration de la CLI .NET Core, accédez au répertoire de projet de la fonction et tapezdotnet lambda help.

Note

Le gestionnaire de fonctions indique la méthode que Lambda doit appeler en réponse à la fonction invoquée. Le format de ce champ est le suivant :<assembly-name>::<full-type-name>::<method-name>. L'espace de noms doit être inclus dans le nom du type.

Déploiement de la fonction

La procédure suivante décrit comment déployer votre fonction Lambda.

  1. Dans l'explorateur de solutions, cliquez avec le bouton droit sur le projet Lambda et choisissez Publier sur AWS Lambda pour ouvrir la fenêtre Upload to. AWS Lambda

    Note

    Les valeurs prédéfinies sont extraites du aws-lambda-tools-defaults.json fichier.

  2. Dans la AWS Lambda fenêtre Télécharger vers, entrez un nom dans le champ Nom de la fonction, puis cliquez sur le bouton Suivant pour accéder à la fenêtre Détails des fonctions avancées.

    Note

    Cet exemple utilise le nom de la fonctionImageRekognition.

  3. Dans la fenêtre Détails des fonctions avancées, sélectionnez un rôle IAM qui autorise votre code à accéder à vos ressources Amazon S3 et Amazon Rekognition.

    Note

    Si vous suivez cet exemple, sélectionnez le AWSLambda_FullAccess rôle.

  4. Définissez la variable MinConfidence d'environnement sur 60, puis choisissez Upload pour lancer le processus de déploiement. Le processus de publication est terminé lorsque la vue Fonction s'affiche dans l'AWS explorateur.

  5. Après un déploiement réussi, configurez Amazon S3 pour qu'il envoie ses événements à votre nouvelle fonction en accédant à l'onglet Sources d'événements.

  6. Dans l'onglet Sources d'événements, cliquez sur le bouton Ajouter, puis sélectionnez le compartiment Amazon S3 pour vous connecter à votre fonction Lambda.

    Note

    Le bucket doit se trouver dans la même AWS région que votre fonction Lambda.

Test de la fonction

Maintenant que la fonction est déployée et qu'un compartiment S3 est configuré comme source d'événements pour celle-ci, ouvrez le navigateur de compartiments S3 depuis l'AWS explorateur pour le compartiment que vous avez sélectionné. Chargez ensuite des images.

Lorsque le chargement est terminé, vous pouvez vérifier que votre fonction s'est exécutée en consultant les journaux dans la vue de la fonction. Vous pouvez également cliquer avec le bouton droit de la souris sur les images dans le navigateur de compartiment et choisir Propriétés. Dans l'onglet Balises, vous pouvez afficher les étiquettes qui ont été appliquées à votre objet.