Tutorial: Creating an Amazon Rekognition Lambda Application - AWS Kit de ferramentas com Amazon Q

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tutorial: Creating an Amazon Rekognition Lambda Application

Este tutorial mostra como criar uma aplicação do Lambda que usa o Amazon Rekognition para marcar objetos do Amazon S3 com rótulos detectados.

Para obter pré-requisitos e informações sobre como configurar o AWS Toolkit for Visual Studio, consulte Usando os modelos AWS Lambda no Toolkit for Visual Studio AWS.

Criar um projeto do Image Rekognition do Lambda do Visual Studio .NET Core

O procedimento a seguir descreve como criar um aplicativo Amazon Rekognition Lambda a partir do. AWS Toolkit for Visual Studio

nota

Após a criação, seu aplicativo tem uma solução com dois projetos: o projeto de origem que contém o código da função Lambda para implantação no Lambda e um projeto de teste usando o xUnit para testar sua função localmente.

Às vezes, o Visual Studio não consegue encontrar todas as NuGet referências para seus projetos. Isso ocorre porque os blueprints exigem dependências que devem ser recuperadas. NuGet Quando novos projetos são criados, o Visual Studio extrai apenas referências locais e não referências remotas de NuGet. Para corrigir NuGet erros: clique com o botão direito do mouse nas referências e escolha Restaurar pacotes.

  1. No Visual Studio, expanda o menu Arquivo, expanda Novo e escolha Projeto.

  2. Na caixa de diálogo Novo projeto, verifique se as caixas suspensas Idioma, Plataforma e Tipo de projeto estão definidas como “Tudo...” e insira aws lambda no campo Pesquisar.

  3. Selecione o modelo AWS Lambda com testes (.NET Core - C#).

  4. Clique em Avançar para abrir a caixa de diálogo Configurar seu novo projeto.

  5. Na caixa de diálogo Configurar seu novo projeto, insira ImageRekognition "" como Nome e preencha os campos restantes de acordo com sua preferência. Escolha o botão Criar para prosseguir até a caixa de diálogo Selecionar blueprint.

  6. Na caixa de diálogo Selecionar esquema, escolha o blueprint Detectar rótulos de imagem e, em seguida, escolha Concluir para criar o projeto do Visual Studio.

    nota

    Esse esquema fornece o código para escutar eventos do Amazon S3 e usa o Amazon Rekognition para detectar rótulos e adicioná-los ao objeto do S3 como tags.

Revisando arquivos de projeto

As seções a seguir examinam esses arquivos de projeto:

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

Dentro do Function.cs arquivo, o primeiro segmento do código é o atributo assembly, localizado na parte superior do arquivo. Por padrão, o Lambda só aceita parâmetros de entrada e tipos de tipo de retorno. System.IO.Stream Você deve registrar um serializador para usar classes digitadas para parâmetros de entrada e tipos de retorno. O atributo assembly registra o serializador Lambda JSON, que é Newtonsoft.Json usado para converter fluxos em classes digitadas. Você pode definir o serializador no nível de assembly ou método.

Veja a seguir um exemplo do 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))]

A classe tem dois construtores. O primeiro é um construtor padrão usado quando o Lambda invoca a função. Esse construtor cria os clientes de serviços Amazon S3 e Amazon Rekognition. O construtor também recupera AWS as credenciais desses clientes da função do IAM que você atribui à função ao implantá-la. A AWS região dos clientes é definida como a região em que sua função Lambda está sendo executada. Neste esquema, você só quer adicionar tags ao objeto Amazon S3 se o serviço Amazon Rekognition tiver um nível mínimo de confiança sobre o rótulo. Esse construtor verifica a variável de ambiente MinConfidence para determinar o nível de confiança aceitável. Você pode definir essa variável de ambiente ao implantar a função do Lambda.

Veja a seguir um exemplo do primeiro construtor de classe em: 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}"); } }

O exemplo a seguir demonstra como o segundo construtor pode ser utilizado para testes. O projeto de teste configura seus próprios clientes S3 e Rekognition e os transmite:

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

Veja a seguir um exemplo do FunctionHandler método dentro do Function.cs arquivo.

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 é o método que o Lambda chamará depois de construir a instância. O parâmetro de entrada é do tipo S3Event, e não um Stream. Você pode fazer isso por causa do serializador JSON do Lambda registrado. O S3Event contém todas as informações sobre o evento acionado no Amazon S3. A função percorre todos os objetos do S3 que fizeram parte do evento e pede ao Rekognition para detectar rótulos. Depois que os rótulos forem detectados, eles serão adicionados como tags ao objeto do S3.

nota

O código contém chamadas paraConsole.WriteLine(). Quando a função está sendo executada no Lambda, todas as chamadas são Console.WriteLine() redirecionadas para o Amazon Logs. CloudWatch

2. aws-lambda-tools-defaults.json

O aws-lambda-tools-defaults.json arquivo contém valores padrão que o blueprint definiu para preencher previamente alguns dos campos no assistente de implantação. Também é útil para definir opções de linha de comando para integração com a CLI do.NET Core.

Para acessar a integração da CLI do.NET Core, navegue até o diretório do projeto da função e digite. dotnet lambda help

nota

O manipulador da função indica qual método o Lambda deve chamar em resposta à função invocada. O formato desse campo é:<assembly-name>::<full-type-name>::<method-name>. O namespace deve ser incluído com o nome do tipo.

Implantar a função

O procedimento a seguir descreve como implantar sua função Lambda.

  1. No Solution Explorer, clique com o botão direito do mouse no projeto Lambda e escolha Publish to AWS Lambda para abrir a janela Upload to. AWS Lambda

    nota

    Os valores predefinidos são recuperados do aws-lambda-tools-defaults.json arquivo.

  2. AWS Lambda Na janela Carregar para, insira um nome no campo Nome da função e escolha o botão Avançar para avançar até a janela Detalhes avançados da função.

    nota

    Este exemplo usa o nome da funçãoImageRekognition.

  3. Na janela Advanced Function Details, selecione uma função do IAM que permita que seu código acesse seus recursos do Amazon S3 e do Amazon Rekognition.

    nota

    Se você estiver acompanhando esse exemplo, selecione a AWSLambda_FullAccess função.

  4. Defina MinConfidence a variável de ambiente como 60 e escolha Carregar para iniciar o processo de implantação. O processo de publicação é concluído quando a visualização Função é exibida no AWS Explorer.

  5. Após uma implantação bem-sucedida, configure o Amazon S3 para enviar seus eventos para sua nova função navegando até a guia Fontes de eventos.

  6. Na guia Fontes de eventos, escolha o botão Adicionar e, em seguida, selecione o bucket do Amazon S3 para se conectar à sua função Lambda.

    nota

    O bucket deve estar na mesma AWS região da sua função Lambda.

Testar a função do

Agora que a função está implantada e um bucket do S3 está configurado como uma fonte de eventos para ele, abra o navegador de buckets do S3 no AWS Explorer para o bucket selecionado por você. Em seguida, faça upload de algumas imagens.

Quando o upload estiver concluído, você poderá confirmar se a função foi executada observando os logs na visualização da função. Ou clique com o botão direito do mouse no navegador de buckets e escolha Properties (Propriedades). Na guia Tags, você pode visualizar as tags que foram aplicadas ao objeto.