Tutorial: creazione di un'applicazione Amazon Rekognition Lambda - AWS Toolkit con Amazon Q

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: creazione di un'applicazione Amazon Rekognition Lambda

Questo tutorial mostra come creare un'applicazione Lambda che utilizzi Amazon Rekognition per etichettare gli oggetti Amazon S3 con le etichette rilevate.

Per i prerequisiti e informazioni sulla configurazione di AWS Toolkit for Visual Studio, consulta Using the AWS Lambda Templates in AWS the Toolkit for Visual Studio.

Creare un progetto di Rekognition Lambda Image Rekognition di Visual Studio.NET Core

La procedura seguente descrive come creare un'applicazione Amazon Rekognition Lambda da. AWS Toolkit for Visual Studio

Nota

Al momento della creazione, l'applicazione dispone di una soluzione con due progetti: il progetto sorgente che contiene il codice della funzione Lambda da distribuire su Lambda e un progetto di test che utilizza xUnit per testare la funzione localmente.

A volte Visual Studio non riesce a trovare tutti i NuGet riferimenti per i tuoi progetti. Questo perché i blueprint richiedono dipendenze da cui è necessario recuperare. NuGet Quando vengono creati nuovi progetti, Visual Studio inserisce solo riferimenti locali e non riferimenti remoti da. NuGet Per correggere gli NuGet errori: fai clic con il pulsante destro del mouse sui riferimenti e scegli Ripristina pacchetti.

  1. Da Visual Studio espandi il menu File, espandi Nuovo, quindi scegli Progetto.

  2. Nella finestra di dialogo Nuovo progetto, assicurati che le caselle a discesa Lingua, Piattaforma e Tipo di progetto siano impostate su «Tutto...» e inseriscile aws lambda nel campo Cerca.

  3. Seleziona il modello AWS Lambda with Tests (.NET Core - C#).

  4. Fai clic su Avanti per aprire la finestra di dialogo Configura il tuo nuovo progetto.

  5. Nella finestra di dialogo Configura il nuovo progetto, inserisci ImageRekognition "" come nome, quindi completa i campi rimanenti secondo le tue preferenze. Scegli il pulsante Crea per passare alla finestra di dialogo Seleziona Blueprint.

  6. Nella finestra di dialogo Seleziona progetto, scegli il progetto Detect Image Labels, quindi scegli Fine per creare il progetto Visual Studio.

    Nota

    Questo modello fornisce codice per ascoltare gli eventi di Amazon S3 e utilizza Amazon Rekognition per rilevare le etichette e aggiungerle all'oggetto S3 come tag.

Revisione dei file di progetto

Le seguenti sezioni esaminano questi file di progetto:

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

All'interno del Function.cs file, il primo segmento di codice è l'attributo assembly, situato nella parte superiore del file. Per impostazione predefinita, Lambda accetta solo parametri di input e tipi di tipo restituiti. System.IO.Stream È necessario registrare un serializzatore per utilizzare le classi tipizzate per i parametri di input e i tipi restituiti. L'attributo assembly registra il serializzatore JSON Lambda, che viene Newtonsoft.Json utilizzato per convertire i flussi in classi tipizzate. È possibile impostare il serializzatore a livello di assembly o metodo.

Di seguito è riportato un esempio dell'attributo 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 ha due costruttori. Il primo è un costruttore predefinito che viene utilizzato quando Lambda richiama la tua funzione. Questo costruttore crea i client di servizi Amazon S3 e Amazon Rekognition. Il costruttore recupera anche le AWS credenziali per questi client dal ruolo IAM assegnato alla funzione al momento della distribuzione. La AWS regione per i client è impostata sulla regione in cui è in esecuzione la funzione Lambda. In questo modello, desideri aggiungere tag all'oggetto Amazon S3 solo se il servizio Amazon Rekognition ha un livello minimo di fiducia sull'etichetta. Questo costruttore controlla la variabile di ambiente per determinare il livello di confidenza MinConfidence accettabile. È possibile impostare questa variabile di ambiente quando si distribuisce la funzione Lambda.

Di seguito è riportato un esempio del costruttore di prima classe 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}"); } }

L'esempio seguente dimostra come il secondo costruttore può essere utilizzato per i test. Il progetto di test configura i propri client S3 e Rekognition e li trasmette:

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

Di seguito è riportato un esempio del metodo all'interno del FunctionHandler file. 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è il metodo che Lambda chiama dopo aver costruito l'istanza. Notate che il parametro di input è di tipo S3Event e non a. Stream Puoi farlo grazie al serializzatore JSON Lambda registrato. S3EventContiene tutte le informazioni sull'evento attivato in Amazon S3. La funzione esegue un ciclo su tutti gli oggetti S3 che facevano parte dell'evento e indica a Rekognition di rilevare le etichette. Dopo che le etichette sono state rilevate, vengono aggiunte come tag all'oggetto S3.

Nota

Il codice contiene chiamate a. Console.WriteLine() Quando la funzione è in esecuzione in Lambda, tutte le chiamate vengono Console.WriteLine() reindirizzate ad Amazon Logs. CloudWatch

2. aws-lambda-tools-defaults.json

Il aws-lambda-tools-defaults.json file contiene i valori predefiniti che il blueprint ha impostato per precompilare alcuni campi nella procedura guidata di distribuzione. È anche utile per impostare le opzioni della riga di comando per l'integrazione con.NET Core CLI.

Per accedere all'integrazione CLI.NET Core, accedi alla directory del progetto della funzione e digita. dotnet lambda help

Nota

Il gestore delle funzioni indica quale metodo Lambda deve chiamare in risposta alla funzione richiamata. Il formato di questo campo è:. <assembly-name>::<full-type-name>::<method-name> Il namespace deve essere incluso nel nome del tipo.

Implementa la funzione

La procedura seguente descrive come distribuire la funzione Lambda.

  1. Da Solution Explorer, fai clic con il pulsante destro del mouse sul progetto Lambda e scegli Pubblica su AWS Lambda per aprire la finestra Carica su. AWS Lambda

    Nota

    I valori preimpostati vengono recuperati dal file. aws-lambda-tools-defaults.json

  2. Dalla AWS Lambda finestra Carica su, inserisci un nome nel campo Nome funzione, quindi scegli il pulsante Avanti per passare alla finestra Dettagli della funzione avanzata.

    Nota

    Questo esempio utilizza il nome della funzioneImageRekognition.

  3. Dalla finestra Advanced Function Details, seleziona un ruolo IAM che autorizzi il codice ad accedere alle tue risorse Amazon S3 e Amazon Rekognition.

    Nota

    Se stai seguendo questo esempio, seleziona il ruolo. AWSLambda_FullAccess

  4. Imposta la variabile MinConfidence di ambiente su 60, quindi scegli Carica per avviare il processo di distribuzione. Il processo di pubblicazione è completo quando la vista Function viene visualizzata in AWS Explorer.

  5. Dopo una distribuzione riuscita, configura Amazon S3 per inviare i suoi eventi alla tua nuova funzione accedendo alla scheda Event Sources.

  6. Dalla scheda Event Sources, scegli il pulsante Aggiungi, quindi seleziona il bucket Amazon S3 per connetterti alla tua funzione Lambda.

    Nota

    Il bucket deve trovarsi nella stessa AWS regione della funzione Lambda.

Esegui il test della funzione

Ora che la funzione è stata implementata e un bucket S3 è configurato come sorgente di eventi, apri il browser del bucket S3 dall'Explorer per il AWS bucket selezionato. Quindi carica alcune immagini.

Una volta completato il caricamento, puoi confermare che la tua funzione è stata eseguita guardando i log dalla visualizzazione delle funzioni. In alternativa, fate clic con il pulsante destro del mouse sulle immagini nel browser bucket e scegliete Proprietà. Nella scheda Tag, puoi visualizzare i tag che sono stati applicati all'oggetto.