Tutorial: Erstellen einer Amazon Rekognition-Lambda-Anwendung - AWS Toolkit mit Amazon Q

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Erstellen einer Amazon Rekognition-Lambda-Anwendung

Dieses Tutorial zeigt Ihnen, wie Sie eine Lambda-Anwendung erstellen, die Amazon Rekognition verwendet, um Amazon S3 S3-Objekte mit erkannten Labels zu kennzeichnen.

Voraussetzungen und Informationen zur Einrichtung von finden Sie unter Verwenden der AWS Lambda-Vorlagen im AWS Toolkit for Visual Studio. AWS Toolkit for Visual Studio

Erstellen Sie ein Visual Studio-.NET Core Lambda Image Rekognition-Projekt

Das folgende Verfahren beschreibt, wie Sie eine Amazon Rekognition Lambda-Anwendung aus dem erstellen. AWS Toolkit for Visual Studio

Anmerkung

Nach der Erstellung verfügt Ihre Anwendung über eine Lösung mit zwei Projekten: dem Quellprojekt, das Ihren Lambda-Funktionscode zur Bereitstellung auf Lambda enthält, und einem Testprojekt, das xUnit verwendet, um Ihre Funktion lokal zu testen.

Manchmal kann Visual Studio nicht alle NuGet Referenzen für Ihre Projekte finden. Das liegt daran, dass Blueprints Abhängigkeiten erfordern, aus NuGet denen abgerufen werden muss. Wenn neue Projekte erstellt werden, ruft Visual Studio nur lokale Verweise ab und keine Remote-Verweise von. NuGet Um Fehler zu NuGet beheben, klicken Sie mit der rechten Maustaste auf Ihre Verweise und wählen Sie Pakete wiederherstellen.

  1. Erweitern Sie in Visual Studio das Menü Datei, erweitern Sie Neu und wählen Sie dann Projekt aus.

  2. Vergewissern Sie sich, dass im Dialogfeld „Neues Projekt“ die Dropdown-Felder Sprache, Plattform und Projekttyp auf „Alle...“ gesetzt sind, und geben Sie aws lambda in das Suchfeld ein.

  3. Wählen Sie die Vorlage AWS Lambda mit Tests (.NET Core — C#) aus.

  4. Klicken Sie auf Weiter, um das Dialogfeld Neues Projekt konfigurieren zu öffnen.

  5. Geben Sie im Dialogfeld „Neues Projekt konfigurieren“ ImageRekognition "als Namen ein und füllen Sie dann die verbleibenden Felder nach Ihren Wünschen aus. Wählen Sie die Schaltfläche „Erstellen“, um mit dem Dialogfeld „Blueprint auswählen“ fortzufahren.

  6. Wählen Sie im Dialogfeld „Blueprint auswählen“ den Blueprint „Bildbeschriftungen erkennen“ und anschließend „Fertig stellen“, um das Visual Studio-Projekt zu erstellen.

    Anmerkung

    Dieser Blueprint bietet Code zum Abhören von Amazon S3 S3-Ereignissen und verwendet Amazon Rekognition, um Labels zu erkennen und sie dem S3-Objekt als Tags hinzuzufügen.

Projektdateien überprüfen

In den folgenden Abschnitten werden diese Projektdateien untersucht:

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

In der Function.cs Datei ist das erste Codesegment das Assemblyattribut, das sich oben in der Datei befindet. Standardmäßig akzeptiert Lambda nur Eingabeparameter und Rückgabetypen vom TypSystem.IO.Stream. Sie müssen einen Serializer registrieren, um typisierte Klassen für Eingabeparameter und Rückgabetypen zu verwenden. Das Assembly-Attribut registriert den Lambda-JSON-Serializer, der Streams in Newtonsoft.Json typisierte Klassen konvertiert. Sie können den Serializer auf Assembly- oder Methodenebene festlegen.

Im Folgenden finden Sie ein Beispiel für das Assembly-Attribut:

// 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))]

Die Klasse enthält zwei Konstruktoren. Der erste ist ein Standardkonstruktor, der verwendet wird, wenn Lambda Ihre Funktion aufruft. Dieser Konstruktor erstellt die Amazon S3- und Amazon Rekognition Service-Clients. Der Konstruktor ruft auch die AWS Anmeldeinformationen für diese Clients aus der IAM-Rolle ab, die Sie der Funktion bei der Bereitstellung zuweisen. Die AWS Region für die Clients ist auf die Region festgelegt, in der Ihre Lambda-Funktion ausgeführt wird. In diesem Blueprint möchten Sie dem Amazon S3 S3-Objekt nur dann Tags hinzufügen, wenn der Amazon Rekognition Rekognition-Service ein Mindestmaß an Vertrauen in das Label hat. Dieser Konstruktor prüft die Umgebungsvariable MinConfidence, um das Mindestmaß an Vertrauen zu ermitteln. Sie können diese Umgebungsvariable bei der Bereitstellung der Lambda-Funktion festlegen.

Im Folgenden finden Sie ein Beispiel für den Konstruktor der ersten Klasse in: 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}"); } }

Das folgende Beispiel zeigt, wie der zweite Konstruktor zum Testen verwendet werden kann. Das Testprojekt konfiguriert seine eigenen S3- und Rekognition-Clients und übergibt sie:

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

Das Folgende ist ein Beispiel für die FunctionHandler Methode in der Datei. 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 ist die Methode, die Lambda aufruft, nachdem die Instance erstellt wurde. Beachten Sie, dass der Eingabeparameter vom Typ S3Event und nicht Stream ist. Dies ist aufgrund des registrierten Lambda-JSON-Serializers möglich. Das S3Event enthält alle Informationen über das in Amazon S3 ausgelöste Ereignis. Die Funktion durchläuft alle S3-Objekte, die Teil des Ereignisses waren, und weist Rekognition an, die Bezeichner zu ermitteln. Nachdem die Bezeichner ermittelt wurden, werden sie dem S3-Objekt als Tags hinzugefügt.

Anmerkung

Der Code enthält Aufrufe vonConsole.WriteLine(). Wenn die Funktion in Lambda ausgeführt wird, werden alle Aufrufe zu Amazon CloudWatch Logs Console.WriteLine() umgeleitet.

2. aws-lambda-tools-defaults.json

Die aws-lambda-tools-defaults.json Datei enthält Standardwerte, die der Blueprint so festgelegt hat, dass einige Felder im Bereitstellungsassistenten vorab ausgefüllt werden. Es ist auch hilfreich bei der Festlegung von Befehlszeilenoptionen für die Integration mit.NET Core CLI.

Um auf die .NET Core CLI-Integration zuzugreifen, navigieren Sie zum Projektverzeichnis der Funktion und geben Sie Folgendes eindotnet lambda help.

Anmerkung

Der Funktionshandler gibt an, welche Methode Lambda als Antwort auf die aufgerufene Funktion aufrufen soll. Das Format dieses Feldes ist:. <assembly-name>::<full-type-name>::<method-name> Der Namespace muss im Typnamen enthalten sein.

Bereitstellen der Funktion

Das folgende Verfahren beschreibt, wie Sie Ihre Lambda-Funktion bereitstellen.

  1. Klicken Sie im Solution Explorer mit der rechten Maustaste auf das Lambda-Projekt und wählen Sie In AWS Lambda veröffentlichen, um das Fenster Hochladen in zu AWS Lambda öffnen.

    Anmerkung

    Die voreingestellten Werte werden aus der aws-lambda-tools-defaults.json Datei abgerufen.

  2. Geben Sie AWS Lambda im Fenster „Hochladen in“ einen Namen in das Feld „Funktionsname“ ein und klicken Sie dann auf „Weiter“, um zum Fenster „Erweiterte Funktionsdetails“ zu gelangen.

    Anmerkung

    In diesem Beispiel wird der Funktionsname verwendetImageRekognition.

    AWS Lambda function upload interface with options for package type, runtime, architecture, and function details. (AI generated)
  3. Wählen Sie im Fenster Erweiterte Funktionsdetails eine IAM-Rolle aus, die Ihrem Code die Erlaubnis erteilt, auf Ihre Amazon S3- und Amazon Rekognition Rekognition-Ressourcen zuzugreifen.

    Anmerkung

    Wenn Sie diesem Beispiel folgen, wählen Sie die Rolle aus. AWSLambda_FullAccess

  4. Setzen Sie die Umgebungsvariable MinConfidence auf 60 und wählen Sie dann Upload, um den Bereitstellungsprozess zu starten. Der Veröffentlichungsvorgang ist abgeschlossen, wenn die Funktionsansicht im AWS Explorer angezeigt wird.

    AWS Lambda function configuration with settings for role, memory, timeout, dead letter queue, and environment variable. (AI generated)
  5. Nach einer erfolgreichen Bereitstellung konfigurieren Sie Amazon S3 so, dass seine Ereignisse an Ihre neue Funktion gesendet werden, indem Sie zur Registerkarte Ereignisquellen navigieren.

  6. Wählen Sie auf der Registerkarte Ereignisquellen die Schaltfläche Hinzufügen und dann den Amazon S3 S3-Bucket aus, um eine Verbindung mit Ihrer Lambda-Funktion herzustellen.

    Anmerkung

    Der Bucket muss sich in derselben AWS Region wie Ihre Lambda-Funktion befinden.

Testen der -Funktion

Nachdem die Funktion nun bereitgestellt und ein S3-Bucket als Ereignisquelle dafür konfiguriert wurde, öffnen Sie im AWS Explorer den S3-Bucket-Browser für den ausgewählten Bucket. Laden Sie anschließend einige Bilder hoch.

Wenn der Upload abgeschlossen ist, können Sie überprüfen, ob Ihre Funktion ausgeführt wurde, indem Sie die Protokolle in der Ansicht Ihrer Funktion einsehen. Oder klicken Sie mit der rechten Maustaste auf die Bilder im Bucket-Browser und wählen Sie Properties (Eigenschaften) aus. Auf der Registerkarte Tags können Sie die Tags anzeigen, die auf Ihr Objekt angewendet wurden.

Properties window showing metadata tags and values for an image file. (AI generated)