Analisar uma imagem carregada de um sistema de arquivos local - Amazon Rekognition

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á.

Analisar uma imagem carregada de um sistema de arquivos local

As operações do Amazon Rekognition Image podem analisar imagens que são fornecidas como bytes de imagem ou imagens armazenadas em um bucket do Amazon S3.

Estes tópicos fornecem exemplos de fornecimento de bytes de imagens para as operações da API Amazon Rekognition Image usando um arquivo carregado de um sistema de arquivos local. Você passa bytes de imagem para uma operação da API Amazon Rekognition usando o parâmetro de entrada Image. Dentro de Image, você especifica a propriedade Bytes para passar bytes de imagem codificados em base64.

Os bytes de imagem passados para uma operação da API do Amazon Rekognition usando o parâmetro de entrada Bytes devem ser codificados em base64. Os SDKs da AWS que esses exemplos usam codificam imagens em base64 automaticamente. Não é necessário codificar bytes de imagem antes de chamar uma operação da API Amazon Rekognition. Para ter mais informações, consulte Especificações de imagem.

Nesta solicitação JSON de exemplo de DetectLabels, os bytes da imagem de origem são passados no parâmetro de entrada Bytes.

{ "Image": { "Bytes": "/9j/4AAQSk....." }, "MaxLabels": 10, "MinConfidence": 77 }

Os exemplos a seguir usam diversos SDKs da AWS e a AWS CLI para chamar DetectLabels. Para obter informações sobre a resposta da operação DetectLabels, consulte DetectLabels resposta.

Para obter um JavaScript exemplo do lado do cliente, consulte. Usando JavaScript

Para detectar rótulos em uma imagem local
  1. Se ainda não tiver feito isso:

    1. Crie ou atualize um usuário com permissões AmazonRekognitionFullAccess e AmazonS3ReadOnlyAccess. Para ter mais informações, consulte Etapa 1: Configure uma conta da AWS e crie um usuário.

    2. Instale e configure a AWS CLI e os SDKs da AWS. Para ter mais informações, consulte Etapa 2: Configurar a AWS e os AWS CLI SDKs.

  2. Use os exemplos a seguir para chamar a operação DetectLabels.

    Java

    O exemplo de Java a seguir mostra como carregar uma imagem do sistema de arquivos local e detectar rótulos usando a operação detectLabels do SDK da AWS. Altere o valor de photo para o caminho e o nome de arquivo de um arquivo de imagem (formato .jpg ou .png).

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) package aws.example.rekognition.image; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.List; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.AmazonClientException; import com.amazonaws.services.rekognition.model.AmazonRekognitionException; import com.amazonaws.services.rekognition.model.DetectLabelsRequest; import com.amazonaws.services.rekognition.model.DetectLabelsResult; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.Label; import com.amazonaws.util.IOUtils; public class DetectLabelsLocalFile { public static void main(String[] args) throws Exception { String photo="input.jpg"; ByteBuffer imageBytes; try (InputStream inputStream = new FileInputStream(new File(photo))) { imageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream)); } AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); DetectLabelsRequest request = new DetectLabelsRequest() .withImage(new Image() .withBytes(imageBytes)) .withMaxLabels(10) .withMinConfidence(77F); try { DetectLabelsResult result = rekognitionClient.detectLabels(request); List <Label> labels = result.getLabels(); System.out.println("Detected labels for " + photo); for (Label label: labels) { System.out.println(label.getName() + ": " + label.getConfidence().toString()); } } catch (AmazonRekognitionException e) { e.printStackTrace(); } } }
    Python

    O exemplo de AWS SDK para Python a seguir mostra como carregar uma imagem do sistema de arquivos local e chamar a operação detect_labels. Altere o valor de photo para o caminho e o nome de arquivo de um arquivo de imagem (formato .jpg ou .png).

    #Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 def detect_labels_local_file(photo): client=boto3.client('rekognition') with open(photo, 'rb') as image: response = client.detect_labels(Image={'Bytes': image.read()}) print('Detected labels in ' + photo) for label in response['Labels']: print (label['Name'] + ' : ' + str(label['Confidence'])) return len(response['Labels']) def main(): photo='photo' label_count=detect_labels_local_file(photo) print("Labels detected: " + str(label_count)) if __name__ == "__main__": main()
    .NET

    O exemplo a seguir mostra como carregar uma imagem do sistema de arquivos local e detectar rótulos usando a operação DetectLabels. Altere o valor de photo para o caminho e o nome de arquivo de um arquivo de imagem (formato .jpg ou .png).

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) using System; using System.IO; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class DetectLabelsLocalfile { public static void Example() { String photo = "input.jpg"; Amazon.Rekognition.Model.Image image = new Amazon.Rekognition.Model.Image(); try { using (FileStream fs = new FileStream(photo, FileMode.Open, FileAccess.Read)) { byte[] data = null; data = new byte[fs.Length]; fs.Read(data, 0, (int)fs.Length); image.Bytes = new MemoryStream(data); } } catch (Exception) { Console.WriteLine("Failed to load file " + photo); return; } AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); DetectLabelsRequest detectlabelsRequest = new DetectLabelsRequest() { Image = image, MaxLabels = 10, MinConfidence = 77F }; try { DetectLabelsResponse detectLabelsResponse = rekognitionClient.DetectLabels(detectlabelsRequest); Console.WriteLine("Detected labels for " + photo); foreach (Label label in detectLabelsResponse.Labels) Console.WriteLine("{0}: {1}", label.Name, label.Confidence); } catch (Exception e) { Console.WriteLine(e.Message); } } }
    PHP

    O exemplo a seguir do AWS SDK for PHP mostra como carregar uma imagem do sistema de arquivos local e chamar DetectFacesa operação da API. Altere o valor de photo para o caminho e o nome de arquivo de um arquivo de imagem (formato .jpg ou .png).

    <?php //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) require 'vendor/autoload.php'; use Aws\Rekognition\RekognitionClient; $options = [ 'region' => 'us-west-2', 'version' => 'latest' ]; $rekognition = new RekognitionClient($options); // Get local image $photo = 'input.jpg'; $fp_image = fopen($photo, 'r'); $image = fread($fp_image, filesize($photo)); fclose($fp_image); // Call DetectFaces $result = $rekognition->DetectFaces(array( 'Image' => array( 'Bytes' => $image, ), 'Attributes' => array('ALL') ) ); // Display info for each detected person print 'People: Image position and estimated age' . PHP_EOL; for ($n=0;$n<sizeof($result['FaceDetails']); $n++){ print 'Position: ' . $result['FaceDetails'][$n]['BoundingBox']['Left'] . " " . $result['FaceDetails'][$n]['BoundingBox']['Top'] . PHP_EOL . 'Age (low): '.$result['FaceDetails'][$n]['AgeRange']['Low'] . PHP_EOL . 'Age (high): ' . $result['FaceDetails'][$n]['AgeRange']['High'] . PHP_EOL . PHP_EOL; } ?>
    Ruby

    Este exemplo exibe uma lista de rótulos que foram detectados na imagem de entrada. Altere o valor de photo para o caminho e o nome de arquivo de um arquivo de imagem (formato .jpg ou .png).

    #Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) # gem 'aws-sdk-rekognition' require 'aws-sdk-rekognition' credentials = Aws::Credentials.new( ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'] ) client = Aws::Rekognition::Client.new credentials: credentials photo = 'photo.jpg' path = File.expand_path(photo) # expand path relative to the current directory file = File.read(path) attrs = { image: { bytes: file }, max_labels: 10 } response = client.detect_labels attrs puts "Detected labels for: #{photo}" response.labels.each do |label| puts "Label: #{label.name}" puts "Confidence: #{label.confidence}" puts "Instances:" label['instances'].each do |instance| box = instance['bounding_box'] puts " Bounding box:" puts " Top: #{box.top}" puts " Left: #{box.left}" puts " Width: #{box.width}" puts " Height: #{box.height}" puts " Confidence: #{instance.confidence}" end puts "Parents:" label.parents.each do |parent| puts " #{parent.name}" end puts "------------" puts "" end
    Java V2

    Esse código foi retirado do GitHub repositório de exemplos do SDK de AWS documentação. Veja o exemplo completo aqui.

    import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.Image; import software.amazon.awssdk.services.rekognition.model.DetectLabelsRequest; import software.amazon.awssdk.services.rekognition.model.DetectLabelsResponse; import software.amazon.awssdk.services.rekognition.model.Label; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class DetectLabels { public static void main(String[] args) { final String usage = """ Usage: <sourceImage> Where: sourceImage - The path to the image (for example, C:\\AWS\\pic1.png).\s """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String sourceImage = args[0]; Region region = Region.US_EAST_1; RekognitionClient rekClient = RekognitionClient.builder() .region(region) .build(); detectImageLabels(rekClient, sourceImage); rekClient.close(); } public static void detectImageLabels(RekognitionClient rekClient, String sourceImage) { try { InputStream sourceStream = new FileInputStream(sourceImage); SdkBytes sourceBytes = SdkBytes.fromInputStream(sourceStream); // Create an Image object for the source image. Image souImage = Image.builder() .bytes(sourceBytes) .build(); DetectLabelsRequest detectLabelsRequest = DetectLabelsRequest.builder() .image(souImage) .maxLabels(10) .build(); DetectLabelsResponse labelsResponse = rekClient.detectLabels(detectLabelsRequest); List<Label> labels = labelsResponse.labels(); System.out.println("Detected labels for the given photo"); for (Label label : labels) { System.out.println(label.name() + ": " + label.confidence().toString()); } } catch (RekognitionException | FileNotFoundException e) { System.out.println(e.getMessage()); System.exit(1); } } }