

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

# Detectando objetos e conceitos
<a name="labels"></a>

Esta seção fornece informações para detectar rótulos em imagens e vídeos com o Amazon Rekognition Image e o Amazon Rekognition Video. 

 Um rótulo ou tag é um objeto ou conceito (incluindo cenas e ações) encontrado em uma imagem ou vídeo com base em seu conteúdo. Por exemplo, uma imagem de pessoas em uma praia tropical pode conter rótulos como Palmeira (objeto), Praia (cena), Corrida (ação) e Ao ar livre (conceito). 

**Rótulos compatíveis com as operações de detecção de rótulos do Rekognition**
+ Para baixar a lista mais recente de rótulos e caixas delimitadoras de objetos compatíveis com o Amazon Rekognition, clique [aqui](samples/AmazonRekognitionLabels_v3.0.zip). 
+ Para baixar a lista anterior de rótulos e caixas delimitadoras de objetos, clique [aqui](samples/AmazonRekognitionLabels_v2.0.zip). 

**nota**  
O Amazon Rekognition faz previsões binárias de gênero (homem, mulher, menina etc.) com base na aparência física de uma pessoa em uma imagem específica. Esse tipo de previsão não foi projetado para categorizar a identidade de gênero de uma pessoa, e você não deve usar o Amazon Rekognition para fazer essa determinação. Por exemplo, um ator masculino usando uma peruca de cabelos compridos e brincos para um papel pode ser considerado feminino.  
Usar o Amazon Rekognition para fazer previsões binárias de gênero é mais adequado para casos de uso em que estatísticas agregadas de distribuição por gênero precisam ser analisadas sem identificar usuários específicos. Por exemplo, a porcentagem de usuários que são mulheres em comparação com homens em uma plataforma de mídia social.  
Não recomendamos o uso de previsões binárias de gênero para tomar decisões que afetam os direitos, a privacidade ou o acesso de um indivíduo aos serviços.

O Amazon Rekognition devolve etiquetas em inglês. Você pode usar o [Amazon Translate](https://aws.amazon.com/translate/) para traduzir rótulos em inglês para [outros idiomas](https://docs.aws.amazon.com/translate/latest/dg/what-is.html#language-pairs).

O diagrama a seguir mostra a ordem das operações de chamada, dependendo de suas metas de uso das operações do Amazon Rekognition Image ou do Amazon Rekognition Video: 



![\[Diagrama mostrando fluxos de trabalho de análise de imagem e vídeo com processamento de vídeo armazenado e streaming.\]](http://docs.aws.amazon.com/pt_br/rekognition/latest/dg/images/LabelDetectionWorkflow.png)


## Objetos de resposta de rótulos
<a name="labels-details"></a>

### Caixas delimitadoras
<a name="labels-details-bbox"></a>

O Amazon Rekognition Image e o Amazon Rekognition Video podem devolver a caixa delimitadora para rótulos de objetos comuns, como carros, móveis, roupas ou animais de estimação. As informações da caixa delimitadora não são retornadas para rótulos de objetos menos comuns. Você pode usar caixas delimitadoras para encontrar as localizações exatas de objetos em uma imagem, contar instâncias de objetos detectados ou para medir o tamanho de um objeto usando as dimensões da caixa delimitadora. 

Por exemplo, na imagem a seguir, o Amazon Rekognition Image é capaz de detectar a presença de uma pessoa, um skate, carros estacionados e outras informações. O Amazon Rekognition Image também retorna a caixa delimitadora de uma pessoa detectada e de outros objetos detectados, como carros e rodas. 

![\[Pessoa fazendo uma acrobacia de skate entre carros estacionados em uma rua da cidade.\]](http://docs.aws.amazon.com/pt_br/rekognition/latest/dg/images/detect-scenes.jpg)


### Escore de confiança
<a name="labels-details-image-conf-score"></a>

O Amazon Rekognition Video e o Amazon Rekognition Image fornecem uma pontuação percentual da confiança que o Amazon Rekognition tem na precisão de cada rótulo detectado.

### Pais
<a name="labels-details-parents"></a>

O Amazon Rekognition Image e o Amazon Rekognition Video usam uma taxonomia hierárquica de rótulos ancestrais para categorizá-los. Por exemplo, uma pessoa caminhando em uma rua pode ser detectada como um *Pedestre*. O rótulo pai de um *Pedestre* é *Pessoa*. Ambos os rótulos são retornados na resposta. Todos os rótulos ancestrais são retornados e cada rótulo contém uma lista do pai e de outros rótulos ancestrais. Por exemplo, rótulos de avós e bisavós, se existirem. Você pode usar rótulos pai para criar grupos de rótulos relacionados e permitir a consulta de rótulos semelhantes em uma ou mais imagens. Por exemplo, uma consulta para todos os *Veículos* pode retornar um carro de uma imagem e uma moto de outra.

### Categorias
<a name="labels-details-image-categories"></a>

O Amazon Rekognition Image e o Amazon Rekognition Video retornam informações sobre categorias de etiquetas. Os rótulos fazem parte de categorias que agrupam rótulos individuais com base em funções e contextos comuns, como "Veículos e automóveis" e "Alimentos e bebidas". Uma categoria de rótulo pode ser uma subcategoria de uma categoria principal. 

### Aliases
<a name="labels-details-image-aliases"></a>

Além de devolver etiquetas, o Amazon Rekognition Image e o Amazon Rekognition Video retornam quaisquer aliases associados à etiqueta. Os aliases são rótulos com o mesmo significado ou rótulos que são visualmente intercambiáveis com o rótulo principal retornado. Por exemplo, "Cell Phone" é um alias de "Mobile Phone". 

Nas versões anteriores, o Amazon Rekognition Image retornava aliases como "Celular" na mesma lista de nomes de rótulos primários que continha "Dispositivo móvel". Agora, o Amazon Rekognition Image retorna "Celular" em um campo chamado "aliases" e "Dispositivo móvel" na lista de nomes de etiquetas primárias. Se seu aplicativo depende das estruturas retornadas por uma versão anterior do Rekognition, talvez seja necessário transformar a resposta atual retornada pelas operações de detecção de rótulos de imagem ou vídeo na estrutura de resposta anterior, na qual todos os rótulos e aliases são retornados como rótulos primários.

Se você precisar transformar a resposta atual da DetectLabels API (para detecção de rótulos em imagens) na estrutura de resposta anterior, veja o exemplo de código em[Transformando a resposta DetectLabels](labels-detect-labels-image.md#detectlabels-transform-response). 

Se você precisar transformar a resposta atual da GetLabelDetection API (para detecção de rótulos em vídeos armazenados) na estrutura de resposta anterior, veja o exemplo de código em[Transformando a resposta GetLabelDetection](labels-detecting-labels-video.md#getlabeldetection-transform-response).

### Propriedades da imagem
<a name="labels-details-image-properties"></a>

O Amazon Rekognition Image retorna informações sobre a qualidade da imagem (nitidez, brilho e contraste) de toda a imagem. A nitidez e o brilho também são retornados para o primeiro plano e o plano de fundo da imagem. As propriedades da imagem também podem ser usadas para detectar cores dominantes de toda a imagem, primeiro plano, fundo e objetos com caixas delimitadoras.

![\[Imagem de um carro verde em uma rua da cidade, com o carro cercado por uma caixa delimitadora.\]](http://docs.aws.amazon.com/pt_br/rekognition/latest/dg/images/car_bb.png)


 Veja a seguir um exemplo dos ImageProperties dados contidos na resposta de uma DetectLabels operação para a imagem em andamento:

![\[Tabela mostrando cores dominantes e métricas de qualidade de imagem para uma imagem inteira, primeiro plano, plano de fundo e um objeto de exemplo com uma caixa delimitadora.\]](http://docs.aws.amazon.com/pt_br/rekognition/latest/dg/images/image_properties_table.png)


As propriedades da imagem não estão disponíveis para o Amazon Rekognition Video.

### Versão do modelo
<a name="labels-details-image-model-version"></a>

Tanto o Amazon Rekognition Image quanto o Amazon Rekognition Video retornam a versão do modelo de detecção de rótulos usado para detectar rótulos em uma imagem ou vídeo armazenado. 

### Filtros de inclusão e exclusão
<a name="labels-details-filters"></a>

Você pode filtrar os resultados retornados pelas operações de detecção de rótulos do Amazon Rekognition Image e do Amazon Rekognition Video. Filtre os resultados fornecendo critérios de filtragem para rótulos e categorias. Os filtros de etiquetas podem ser inclusivos ou exclusivos. 

Consulte [Detectar rótulos em uma imagem](labels-detect-labels-image.md) para obter mais informações sobre a filtragem dos resultados obtidos com `DetectLabels`.

Consulte [Detectando rótulos em um vídeo](labels-detecting-labels-video.md) para obter mais informações sobre a filtragem dos resultados obtidos por `GetLabelDetection`.

### Classificação e agregação de resultados
<a name="labels-details-sorting-aggregating"></a>

Os resultados obtidos de determinadas operações do Amazon Rekognition Video podem ser classificados e agregados de acordo com registros de data e hora e segmentos de vídeo. Ao recuperar os resultados de um trabalho de Detecção de Rótulos ou Moderação de Conteúdo, com `GetLabelDetection` ou `GetContentModeration` respectivamente, você pode usar os argumentos `AggregateBy` e `SortBy` para especificar como deseja que seus resultados sejam retornados. Você pode usar `SortBy` com `TIMESTAMP` ou `NAME` (nomes de rótulos) e usar `TIMESTAMPS` ou `SEGMENTS` com o AggregateBy argumento.

# Detectar rótulos em uma imagem
<a name="labels-detect-labels-image"></a>

Você pode usar a [DetectLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectLabels.html)operação para detectar rótulos (objetos e conceitos) em uma imagem e recuperar informações sobre as propriedades de uma imagem. As propriedades da imagem incluem atributos como a cor do primeiro plano e do plano de fundo e a nitidez, o brilho e o contraste da imagem. Você pode recuperar apenas os rótulos em uma imagem, apenas as propriedades da imagem ou ambas. Para ver um exemplo, consulte [Analisando imagens armazenadas em um bucket do Amazon S3](images-s3.md).

Os exemplos a seguir usam various AWS SDKs e the AWS CLI to call`DetectLabels`. Para obter informações sobre a resposta da operação `DetectLabels`, consulte [DetectLabels resposta](#detectlabels-response).

**Para detectar rótulos em uma imagem**

1. Se ainda não tiver feito isso:

   1. Crie ou atualize um usuário com permissões `AmazonRekognitionFullAccess` e `AmazonS3ReadOnlyAccess`. Para obter mais informações, consulte [Etapa 1: Configure uma conta da AWS e crie um usuário](setting-up.md#setting-up-iam).

   1. Instale e configure o AWS CLI e AWS SDKs o. Para obter mais informações, consulte [Etapa 2: configurar o AWS CLI e AWS SDKs](setup-awscli-sdk.md).

1. Faça upload de uma imagem que contenha um ou mais objetos, como árvores, casas e barcos, para seu bucket do S3. A imagem deve estar no formato *.jpg* ou *.png*.

   Para obter instruções, consulte [Como fazer upload de objetos no Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) no *Guia do usuário do Amazon Simple Storage Service*.

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

------
#### [ Java ]

   Este exemplo exibe uma lista de rótulos que foram detectados na imagem de entrada. Substitua os valores de `bucket` e `photo` pelos nomes do bucket do Amazon S3 e da imagem usados na etapa 2. 

   ```
   package com.amazonaws.samples;
   import java.util.List;
   
   import com.amazonaws.services.rekognition.model.BoundingBox;
   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.Instance;
   import com.amazonaws.services.rekognition.model.Label;
   import com.amazonaws.services.rekognition.model.Parent;
   import com.amazonaws.services.rekognition.model.S3Object;
   import com.amazonaws.services.rekognition.AmazonRekognition;
   import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
   import com.amazonaws.services.rekognition.model.AmazonRekognitionException;
   
   public class DetectLabels {
   
       public static void main(String[] args) throws Exception {
   
           String photo = "photo";
           String bucket = "bucket";
   
           AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient();
   
           DetectLabelsRequest request = new DetectLabelsRequest()
                   .withImage(new Image().withS3Object(new S3Object().withName(photo).withBucket(bucket)))
                   .withMaxLabels(10).withMinConfidence(75F);
   
           try {
               DetectLabelsResult result = rekognitionClient.detectLabels(request);
               List<Label> labels = result.getLabels();
   
               System.out.println("Detected labels for " + photo + "\n");
               for (Label label : labels) {
                   System.out.println("Label: " + label.getName());
                   System.out.println("Confidence: " + label.getConfidence().toString() + "\n");
   
                   List<Instance> instances = label.getInstances();
                   System.out.println("Instances of " + label.getName());
                   if (instances.isEmpty()) {
                       System.out.println("  " + "None");
                   } else {
                       for (Instance instance : instances) {
                           System.out.println("  Confidence: " + instance.getConfidence().toString());
                           System.out.println("  Bounding box: " + instance.getBoundingBox().toString());
                       }
                   }
                   System.out.println("Parent labels for " + label.getName() + ":");
                   List<Parent> parents = label.getParents();
                   if (parents.isEmpty()) {
                       System.out.println("  None");
                   } else {
                       for (Parent parent : parents) {
                           System.out.println("  " + parent.getName());
                       }
                   }
                   System.out.println("--------------------");
                   System.out.println();
                  
               }
           } catch (AmazonRekognitionException e) {
               e.printStackTrace();
           }
       }
   }
   ```

------
#### [ AWS CLI ]

   Esse exemplo exibe a saída JSON da operação da CLI `detect-labels`. Substitua os valores de `bucket` e `photo` pelos nomes do bucket do Amazon S3 e da imagem usados na etapa 2. Substitua o valor de `profile-name` com o nome do seu perfil de desenvolvedor. 

   ```
   aws rekognition detect-labels --image '{ "S3Object": { "Bucket": "bucket-name", "Name": "file-name" } }' \
   --features GENERAL_LABELS IMAGE_PROPERTIES \
   --settings '{"ImageProperties": {"MaxDominantColors":1}, {"GeneralLabels":{"LabelInclusionFilters":["Cat"]}}}' \
   --profile profile-name \
   --region us-east-1
   ```

   Se você estiver acessando a CLI em um dispositivo Windows, use aspas duplas em vez de aspas simples e escape das aspas duplas internas com barra invertida (ou seja, \$1) para resolver quaisquer erros de analisador que você possa encontrar. Para obter um exemplo, veja o seguinte: 

   ```
   aws rekognition detect-labels --image "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"file-name\"}}" --features GENERAL_LABELS IMAGE_PROPERTIES \
   --settings "{\"GeneralLabels\":{\"LabelInclusionFilters\":[\"Car\"]}}" --profile profile-name --region us-east-1
   ```

------
#### [ Python ]

   Este exemplo exibe os rótulos que foram detectados na imagem de entrada. Na função `main`, substitua os valores de `bucket` e `photo` pelos nomes do bucket e da imagem do Amazon S3 que você usou na Etapa 2. Substitua o valor de `profile_name` na linha que cria a sessão do Rekognition pelo nome do seu perfil de desenvolvedor. 

   ```
   #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(photo, bucket):
   
        session = boto3.Session(profile_name='profile-name')
        client = session.client('rekognition')
   
        response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}},
        MaxLabels=10,
        # Uncomment to use image properties and filtration settings
        #Features=["GENERAL_LABELS", "IMAGE_PROPERTIES"],
        #Settings={"GeneralLabels": {"LabelInclusionFilters":["Cat"]},
        # "ImageProperties": {"MaxDominantColors":10}}
        )
   
        print('Detected labels for ' + photo)
        print()
        for label in response['Labels']:
            print("Label: " + label['Name'])
            print("Confidence: " + str(label['Confidence']))
            print("Instances:")
   
            for instance in label['Instances']:
                print(" Bounding box")
                print(" Top: " + str(instance['BoundingBox']['Top']))
                print(" Left: " + str(instance['BoundingBox']['Left']))
                print(" Width: " + str(instance['BoundingBox']['Width']))
                print(" Height: " + str(instance['BoundingBox']['Height']))
                print(" Confidence: " + str(instance['Confidence']))
                print()
   
            print("Parents:")
            for parent in label['Parents']:
               print(" " + parent['Name'])
   
            print("Aliases:")
            for alias in label['Aliases']:
                print(" " + alias['Name'])
   
                print("Categories:")
            for category in label['Categories']:
                print(" " + category['Name'])
                print("----------")
                print()
   
        if "ImageProperties" in str(response):
            print("Background:")
            print(response["ImageProperties"]["Background"])
            print()
            print("Foreground:")
            print(response["ImageProperties"]["Foreground"])
            print()
            print("Quality:")
            print(response["ImageProperties"]["Quality"])
            print()
   
        return len(response['Labels'])
   
   def main():
       photo = 'photo-name'
       bucket = 'amzn-s3-demo-bucket'
       label_count = detect_labels(photo, bucket)
       print("Labels detected: " + str(label_count))
   
   if __name__ == "__main__":
       main()
   ```

------
#### [ .NET ]

   Este exemplo exibe uma lista de rótulos que foram detectados na imagem de entrada. Substitua os valores de `bucket` e `photo` pelos nomes do bucket do Amazon S3 e da imagem usados na etapa 2. 

   ```
   //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 Amazon.Rekognition;
   using Amazon.Rekognition.Model;
   
   public class DetectLabels
   {
       public static void Example()
       {
           String photo = "input.jpg";
           String bucket = "amzn-s3-demo-bucket";
   
           AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient();
   
           DetectLabelsRequest detectlabelsRequest = new DetectLabelsRequest()
           {
               Image = new Image()
               {
                   S3Object = new S3Object()
                   {
                       Name = photo,
                       Bucket = bucket
                   },
               },
               MaxLabels = 10,
               MinConfidence = 75F
           };
   
           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);
           }
       }
   }
   ```

------
#### [ Ruby ]

   Este exemplo exibe uma lista de rótulos que foram detectados na imagem de entrada. Substitua os valores de `bucket` e `photo` pelos nomes do bucket do Amazon S3 e da imagem usados na etapa 2. 

   ```
      # Add to your Gemfile
      # gem 'aws-sdk-rekognition'
      require 'aws-sdk-rekognition'
      credentials = Aws::Credentials.new(
         ENV['AWS_ACCESS_KEY_ID'],
         ENV['AWS_SECRET_ACCESS_KEY']
      )
      bucket = 'bucket' # the bucket name without s3://
      photo  = 'photo' # the name of file
      client   = Aws::Rekognition::Client.new credentials: credentials
      attrs = {
        image: {
          s3_object: {
            bucket: bucket,
            name: photo
          },
        },
        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
   ```

------
#### [ Node.js ]

   Este exemplo exibe uma lista de rótulos que foram detectados na imagem de entrada. Substitua os valores de `bucket` e `photo` pelos nomes do bucket do Amazon S3 e da imagem usados na etapa 2. Substitua o valor de `profile_name` na linha que cria a sessão do Rekognition pelo nome do seu perfil de desenvolvedor. 

   Se você estiver usando TypeScript definições, talvez seja necessário usar `import AWS from 'aws-sdk'` em vez de`const AWS = require('aws-sdk')`, para executar o programa com o Node.js. Você pode consultar o [AWS SDK para Javascript](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/) para obter mais detalhes. Dependendo de como você configurou suas configurações, talvez você também precise especificar sua região com `AWS.config.update({region:region});`.

   ```
                                   
   // Load the SDK
   var AWS = require('aws-sdk');
   const bucket = 'bucket-name' // the bucketname without s3://
   const photo  = 'image-name' // the name of file
   
   var credentials = new AWS.SharedIniFileCredentials({profile: 'profile-name'});
   AWS.config.credentials = credentials;
   AWS.config.update({region:'region-name'});
   
   const client = new AWS.Rekognition();
   const params = {
     Image: {
       S3Object: {
         Bucket: bucket,
         Name: photo
       },
     },
     MaxLabels: 10
   }
   client.detectLabels(params, function(err, response) {
     if (err) {
       console.log(err, err.stack); // if an error occurred
     } else {
       console.log(`Detected labels for: ${photo}`)
       response.Labels.forEach(label => {
         console.log(`Label:      ${label.Name}`)
         console.log(`Confidence: ${label.Confidence}`)
         console.log("Instances:")
         label.Instances.forEach(instance => {
           let box = instance.BoundingBox
           console.log("  Bounding box:")
           console.log(`    Top:        ${box.Top}`)
           console.log(`    Left:       ${box.Left}`)
           console.log(`    Width:      ${box.Width}`)
           console.log(`    Height:     ${box.Height}`)
           console.log(`  Confidence: ${instance.Confidence}`)
         })
         console.log("Parents:")
         label.Parents.forEach(parent => {
           console.log(`  ${parent.Name}`)
         })
         console.log("------------")
         console.log("")
       }) // for response.labels
     } // if
   });
   ```

------
#### [ Java V2 ]

   Esse código foi retirado do GitHub repositório de exemplos do SDK de AWS documentação. Veja o exemplo completo [aqui](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/rekognition/src/main/java/com/example/rekognition/DetectLabels.java).

   ```
   //snippet-start:[rekognition.java2.detect_labels.import]
   import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
   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 software.amazon.awssdk.services.rekognition.model.S3Object;
   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 = "\n" +
               "Usage: " +
               "   <bucket> <image>\n\n" +
               "Where:\n" +
               "   bucket - The name of the Amazon S3 bucket that contains the image (for example, ,ImageBucket)." +
               "   image - The name of the image located in the Amazon S3 bucket (for example, Lake.png). \n\n";
   
           if (args.length != 2) {
               System.out.println(usage);
               System.exit(1);
           }
   
           String bucket = args[0];
           String image = args[1];
           Region region = Region.US_WEST_2;
           RekognitionClient rekClient = RekognitionClient.builder()
               .region(region)
               .credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
               .build();
   
           getLabelsfromImage(rekClient, bucket, image);
           rekClient.close();
       }
   
       // snippet-start:[rekognition.java2.detect_labels_s3.main]
       public static void getLabelsfromImage(RekognitionClient rekClient, String bucket, String image) {
   
           try {
               S3Object s3Object = S3Object.builder()
                   .bucket(bucket)
                   .name(image)
                   .build() ;
   
               Image myImage = Image.builder()
                   .s3Object(s3Object)
                   .build();
   
               DetectLabelsRequest detectLabelsRequest = DetectLabelsRequest.builder()
                   .image(myImage)
                   .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 e) {
               System.out.println(e.getMessage());
               System.exit(1);
           }
       }
    // snippet-end:[rekognition.java2.detect_labels.main]
   }
   ```

------

   

## DetectLabels solicitação de operação
<a name="detectlabels-request"></a>

A entrada de `DetectLabel` é uma imagem. Neste exemplo de entrada JSON, a imagem de origem é carregada de um bucket do Amazon S3. `MaxLabels` é o número máximo de rótulos a serem retornados na resposta. `MinConfidence` é a confiança mínima que o Amazon Rekognition Image deve ter na precisão da etiqueta detectada para que ela seja retornada na resposta.

Os recursos permitem que você especifique um ou mais recursos da imagem que você deseja retornar, permitindo que você selecione `GENERAL_LABELS` e `IMAGE_PROPERTIES`. A inclusão de `GENERAL_LABELS` retornará os rótulos detectados na imagem de entrada, enquanto a inclusão de `IMAGE_PROPERTIES` permitirá que você acesse a cor e a qualidade da imagem. 

As configurações permitem filtrar os itens devolvidos tanto para os recursos `GENERAL_LABELS` quanto para os recursos `IMAGE_PROPERTIES`. Para etiquetas, você pode usar filtros inclusivos e exclusivos. Você também pode filtrar por rótulo específico, rótulos individuais ou por categoria de rótulo: 
+ LabelInclusionFilters - Permite que você especifique quais rótulos você deseja incluir na resposta.
+ LabelExclusionFilters - Permite que você especifique quais rótulos você deseja excluir da resposta.
+ LabelCategoryInclusionFilters - Permite que você especifique quais categorias de etiquetas você deseja incluir na resposta.
+ LabelCategoryExclusionFilters - Permite que você especifique quais categorias de rótulos você deseja excluir da resposta.

 Você também pode combinar filtros inclusivos e exclusivos de acordo com suas necessidades, excluindo alguns rótulos ou categorias e incluindo outros. 

`IMAGE_PROPERTIES` referem-se às cores dominantes e aos atributos de qualidade de uma imagem, como nitidez, brilho e contraste. Ao detectar `IMAGE_PROPERTIES`, você pode especificar o número máximo de cores dominantes a serem retornadas (o padrão é 10) usando o parâmetro `MaxDominantColors`.

```
{
    "Image": {
        "S3Object": {
            "Bucket": "bucket",
            "Name": "input.jpg"
        }
    },
    "MaxLabels": 10,
    "MinConfidence": 75,
    "Features": [ "GENERAL_LABELS", "IMAGE_PROPERTIES" ],
    "Settings": {
        "GeneralLabels": {
            "LabelInclusionFilters": [<Label(s)>],
            "LabelExclusionFilters": [<Label(s)>],
            "LabelCategoryInclusionFilters": [<Category Name(s)>],
            "LabelCategoryExclusionFilters": [<Category Name(s)>] 
        },
        "ImageProperties": {
            "MaxDominantColors":10
        }
    }
}
```

## DetectLabels resposta
<a name="detectlabels-response"></a>

A resposta de `DetectLabels` é uma matriz de rótulos detectados na imagem e o nível de confiança em que foram detectadas. 

Esta é uma resposta de exemplo de `DetectLabels`. O exemplo de resposta abaixo contém vários atributos retornados para GENERAL\$1LABELS, incluindo:
+ Nome: o nome do rótulo detectado. Neste exemplo, a operação detectou um objeto com o rótulo Celular.
+ Confiança: cada rótulo tem um nível de confiança associado. Neste exemplo, a confiança no rótulo foi de 99,36%.
+ Pais: os rótulos ancestrais de um rótulo detectado. Neste exemplo, o rótulo Celular tem um rótulo principal chamado Telefone.
+ Aliases: informações sobre possíveis aliases para o rótulo. Neste exemplo, a etiqueta Celular tem um possível alias de Celular.
+ Categorias: a categoria de etiqueta à qual a etiqueta detectada pertence. Neste exemplo, é Tecnologia e Computação.

A resposta para rótulos de objetos comuns inclui as informações da caixa delimitadora para a localização do rótulo na imagem de entrada. Por exemplo, o rótulo Pessoa tem uma matriz de instâncias que contém duas caixas delimitadoras. Essas são as localizações de duas pessoas detectadas na imagem.

A resposta também inclui atributos relacionados a IMAGE\$1PROPERTIES. Os atributos apresentados pelo recurso IMAGE\$1PROPERTIES são:
+ Qualidade: informações sobre nitidez, brilho e contraste da imagem de entrada, pontuadas entre 0 e 100. A qualidade é relatada para toda a imagem e para o plano de fundo e primeiro plano da imagem, se disponível. No entanto, o contraste é relatado apenas para a imagem inteira, enquanto a nitidez e o brilho também são relatados para fundo e primeiro plano. 
+  Cor dominante: uma matriz das cores dominantes na imagem. Cada cor dominante é descrita com um nome de cor simplificado, uma paleta de cores CSS, valores RGB e um código hexadecimal. 
+  Primeiro plano: informações sobre as cores, nitidez e brilho dominantes do primeiro plano da imagem de entrada. 
+  Plano de fundo: informações sobre as cores, nitidez e brilho dominantes do fundo da imagem de entrada. 

Quando GENERAL\$1LABELS e IMAGE\$1PROPERTIES são usados juntos como parâmetros de entrada, o Amazon Rekognition Image também retornará as cores dominantes dos objetos com caixas delimitadoras. 

O campo `LabelModelVersion` contém o número da versão do modelo de detecção usado por `DetectLabels`. 

```
{
   
   "Labels": [
        {
            "Name": "Mobile Phone",
            "Parents": [
              { 
                "Name": "Phone" 
              }
            ],
            "Aliases": [
              {
                "Name": "Cell Phone" 
              }
            ], 
            "Categories": [
              {
                "Name": "Technology and Computing"
              }
            ],
            "Confidence": 99.9364013671875,
            "Instances": [
                {
                    "BoundingBox": {
                        "Width": 0.26779675483703613,
                        "Height": 0.8562285900115967,
                        "Left": 0.3604024350643158,
                        "Top": 0.09245597571134567,
                    }
                    "Confidence": 99.9364013671875,
                    "DominantColors": [
                    {
                "Red": 120,
                "Green": 137,
                "Blue": 132,
                "HexCode": "3A7432",
                "SimplifiedColor": "red", 
                "CssColor": "fuscia",    
                "PixelPercentage": 40.10 
                    }       
                        ],
                }
            ]
        }
    ],
    "ImageProperties": {
        "Quality": {
            "Brightness": 40,
            "Sharpness": 40,
            "Contrast": 24,
        },
        "DominantColors": [
            {
                "Red": 120,
                "Green": 137,
                "Blue": 132,
                "HexCode": "3A7432",
                "SimplifiedColor": "red", 
                "CssColor": "fuscia",    
                "PixelPercentage": 40.10 
            }       
        ],
        "Foreground": {
            "Quality": {
                "Brightness": 40,
                "Sharpness": 40,
            },
            "DominantColors": [                
                {                    
                    "Red": 200,
                    "Green": 137,
                    "Blue": 132,
                    "HexCode": "3A7432",
                    "CSSColor": "",
                    "SimplifiedColor": "red", 
                    "PixelPercentage": 30.70             
                }          
            ],   
        }
        "Background": {
            "Quality": {
                "Brightness": 40,
                "Sharpness": 40,
            },
            "DominantColors": [                
                {                    
                    "Red": 200,
                    "Green": 137,
                    "Blue": 132,
                    "HexCode": "3A7432",
                    "CSSColor": "",
                    "SimplifiedColor": "Red", 
                    "PixelPercentage": 10.20              
                }          
            ],   
        }, 
    },
    "LabelModelVersion": "3.0"
}
```

## Transformando a resposta DetectLabels
<a name="detectlabels-transform-response"></a>

Ao usar a DetectLabels API, talvez você precise que a estrutura de resposta imite a estrutura de resposta da API mais antiga, na qual tanto os rótulos principais quanto os aliases estavam contidos na mesma lista. 

Veja a seguir um exemplo da resposta atual da API de [DetectLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectLabels.html):

```
"Labels": [
        {
            "Name": "Mobile Phone",
            "Confidence": 99.99717712402344,
            "Instances": [],
            "Parents": [
                { 
                "Name": "Phone" 
                }
             ],
            "Aliases": [
                {
                "Name": "Cell Phone" 
                }
             ]
        }
 ]
```

O exemplo a seguir mostra a resposta anterior da [DetectLabels](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectLabels.html)API:

```
"Labels": [
        {
            "Name": "Mobile Phone",
            "Confidence": 99.99717712402344,
            "Instances": [],
            "Parents": [
                {
                "Name": "Phone" 
                }
             ]
         },
         {
            "Name": "Cell Phone",
            "Confidence": 99.99717712402344,
            "Instances": [],
            "Parents": [
                { 
                "Name": "Phone" 
                }
             ]
         },
]
```

Se necessário, você pode transformar a resposta atual para seguir o formato da resposta mais antiga. Você pode usar o código de exemplo a seguir para transformar a resposta mais recente da API na estrutura de resposta da API anterior:

------
#### [ Python ]

O exemplo de código a seguir demonstra como transformar a resposta atual da DetectLabels API. No exemplo de código abaixo, você pode substituir o valor *EXAMPLE\$1INFERENCE\$1OUTPUT* de pela saída de uma DetectLabels operação que você executou.

```
from copy import deepcopy

LABEL_KEY = "Labels"
ALIASES_KEY = "Aliases"
INSTANCE_KEY = "Instances"
NAME_KEY = "Name"

#Latest API response sample
EXAMPLE_INFERENCE_OUTPUT = {
    "Labels": [
        {
            "Name": "Mobile Phone",
            "Confidence": 97.530106,
            "Categories": [
                {
                    "Name": "Technology and Computing"
                }
            ],
            "Aliases": [
                {
                    "Name": "Cell Phone"
                }
            ],
            "Instances":[
                {
                    "BoundingBox":{
                        "Height":0.1549897,
                        "Width":0.07747964,
                        "Top":0.50858885,
                        "Left":0.00018205095
                    },
                    "Confidence":98.401276
                }
            ]
        },
        {
            "Name": "Urban",
            "Confidence": 99.99982,
            "Categories": [
                "Colors and Visual Composition"
            ]
        }
    ]
}

def expand_aliases(inferenceOutputsWithAliases):

    if LABEL_KEY in inferenceOutputsWithAliases:
        expandInferenceOutputs = []
        for primaryLabelDict in inferenceOutputsWithAliases[LABEL_KEY]:
            if ALIASES_KEY in primaryLabelDict:
                for alias in primaryLabelDict[ALIASES_KEY]:
                    aliasLabelDict = deepcopy(primaryLabelDict)
                    aliasLabelDict[NAME_KEY] = alias[NAME_KEY]
                    del aliasLabelDict[ALIASES_KEY]
                    if INSTANCE_KEY in aliasLabelDict:
                        del aliasLabelDict[INSTANCE_KEY]
                    expandInferenceOutputs.append(aliasLabelDict)

        inferenceOutputsWithAliases[LABEL_KEY].extend(expandInferenceOutputs)

    return inferenceOutputsWithAliases


if __name__ == "__main__":

    outputWithExpandAliases = expand_aliases(EXAMPLE_INFERENCE_OUTPUT)
    print(outputWithExpandAliases)
```

Abaixo está um exemplo da resposta transformada:

```
#Output example after the transformation
{
    "Labels": [
        {
            "Name": "Mobile Phone",
            "Confidence": 97.530106,
            "Categories": [
                {
                    "Name": "Technology and Computing"
                }
            ],
            "Aliases": [
                {
                    "Name": "Cell Phone"
                }
            ],
            "Instances":[
                {
                    "BoundingBox":{
                        "Height":0.1549897,
                        "Width":0.07747964,
                        "Top":0.50858885,
                        "Left":0.00018205095
                    },
                    "Confidence":98.401276
                }
            ]
        },
        {
            "Name": "Cell Phone",
            "Confidence": 97.530106,
            "Categories": [
                {
                    "Name": "Technology and Computing"
                }
            ],
            "Instances":[]
        },
        {
            "Name": "Urban",
            "Confidence": 99.99982,
            "Categories": [
                "Colors and Visual Composition"
            ]
        }
    ]
}
```

------

# Detectando rótulos em um vídeo
<a name="labels-detecting-labels-video"></a>

O Amazon Rekognition Video pode detectar rótulos (objetos e conceitos) e a hora em que um rótulo é detectado em um vídeo. Para obter um exemplo de código do SDK, consulte [Análise de um vídeo armazenado em um bucket do Amazon S3 com Java ou Python (SDK)](video-analyzing-with-sqs.md). Para obter um AWS CLI exemplo, consulte[Analisando um vídeo com o AWS Command Line Interface](video-cli-commands.md).

A detecção de rótulos do Amazon Rekognition Video é uma operação assíncrona. Para iniciar a detecção de rótulos em um vídeo, ligue [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartlabelDetection.html). 

O Amazon Rekognition Video publica o status de conclusão da análise de vídeo em um tópico do Amazon Simple Notification Service. Se a análise do vídeo for bem-sucedida, chame [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) para obter os rótulos detectados. Para obter informações sobre como chamar as operações da API de análise de vídeo, consulte [Chamando as operações de vídeo do Amazon Rekognition Video](api-video.md). 

## StartLabelDetection Solicitação
<a name="getlabeldetection-operation-request"></a>

O exemplo a seguir é uma solicitação para a operação `StartLabelDetection`. Você fornece à operação `StartLabelDetection` um vídeo armazenado em um bucket do Amazon S3. No exemplo de solicitação JSON, o bucket do Amazon S3 e o nome do vídeo são especificados com `MinConfidence`, `Features`, `Settings`, e `NotificationChannel`.

`MinConfidence` é a confiança mínima que o Amazon Rekognition Video deve ter na precisão do rótulo detectado, ou de uma caixa delimitadora de instância (se detectada), para que ele seja retornado na resposta.

Com `Features`, você pode especificar que deseja que GENERAL\$1LABELS seja retornado como parte da resposta.

Com `Settings`, você pode filtrar os itens retornados para GENERAL\$1LABELS. Para etiquetas, você pode usar filtros inclusivos e exclusivos. Você também pode filtrar por rótulo específico, rótulos individuais ou por categoria de rótulo: 
+ `LabelInclusionFilters`: usado para especificar quais rótulos você deseja incluir na resposta 
+ `LabelExclusionFilters`: usado para especificar quais rótulos você deseja excluir da resposta.
+ `LabelCategoryInclusionFilters`: usado para especificar quais categorias de rótulos você deseja incluir na resposta.
+ `LabelCategoryExclusionFilters`: usado para especificar quais categorias de rótulos você deseja excluir da resposta.

Você também pode combinar filtros inclusivos e exclusivos de acordo com suas necessidades, excluindo alguns rótulos ou categorias e incluindo outros.

`NotificationChannel` é o ARN do tópico do Amazon SNS no qual você deseja que o Amazon Rekognition Video publique o status de conclusão da operação de detecção de rótulos. Se você estiver usando a política de permissões `AmazonRekognitionServiceRole`, o tópico do Amazon SNS deverá ter um nome de tópico que comece com Rekognition.

Veja a seguir um exemplo de solicitação `StartLabelDetection` no formato JSON, incluindo filtros:

```
{
    "ClientRequestToken": "5a6e690e-c750-460a-9d59-c992e0ec8638",
    "JobTag": "5a6e690e-c750-460a-9d59-c992e0ec8638",
    "Video": {
        "S3Object": {
            "Bucket": "bucket",
            "Name": "video.mp4" 
         } 
     }, 
     "Features": ["GENERAL_LABELS"],
     "MinConfidence": 75,
     "Settings": {
         "GeneralLabels": {
             "LabelInclusionFilters": ["Cat", "Dog"],
             "LabelExclusionFilters": ["Tiger"],
             "LabelCategoryInclusionFilters": ["Animals and Pets"],
             "LabelCategoryExclusionFilters": ["Popular Landmark"] 
         }
     },
     "NotificationChannel": {
         "RoleArn": "arn:aws:iam::012345678910:role/SNSAccessRole",
         "SNSTopicArn": "arn:aws:sns:us-east-1:012345678910:notification-topic",
     }
}
```

## GetLabelDetection Resposta da operação
<a name="getlabeldetection-operation-response"></a>

O `GetLabelDetection` retorna uma matriz (`Labels`) que contém informações sobre os rótulos detectados no vídeo. A matriz pode ser classificada por hora ou pelo rótulo detectado ao especificar o parâmetro `SortBy`. Você também pode selecionar como os itens de resposta são agregados usando o parâmetro `AggregateBy`. 

O exemplo a seguir é a resposta JSON do `GetLabelDetection`. Na resposta, observe o seguinte:
+ **Ordem de classificação** — A matriz de etiquetas retornadas é classificada por hora. Para classificar por rótulo, especifique `NAME` no parâmetro de entrada `SortBy` para `GetLabelDetection`. Se o rótulo aparecer várias vezes no vídeo, haverá várias instâncias do elemento ([LabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_LabelDetection.html)). A ordem de classificação padrão é `TIMESTAMP`, enquanto a ordem de classificação secundária é `NAME`.
+ **Informações do rótulo**: o elemento da `LabelDetection` matriz contém um objeto ([Label](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Label.html)) que, por sua vez, contém o nome do rótulo e a confiança que o Amazon Rekognition tem na precisão do rótulo detectado. Um objeto `Label` também inclui uma taxonomia hierárquica de rótulos e informações de caixa delimitadora para rótulos comuns. `Timestamp` é a hora em que o rótulo foi detectado, definido como o número de milissegundos decorridos desde o início do vídeo. 

  As informações sobre quaisquer categorias ou aliases associados a uma etiqueta também são retornadas. Para resultados agregados por `SEGMENTS` do vídeo, as estruturas `StartTimestampMillis`, `EndTimestampMillis` e `DurationMillis` são retornadas, definindo a hora de início, a hora de término e a duração de um segmento, respectivamente.
+ **Agregação**: specifica como os resultados são agregados quando retornados. O padrão é agregar por `TIMESTAMPS`. Você também pode optar por agregar por `SEGMENTS`, o que agrega os resultados em uma janela de tempo. Se a agregação for feita por `SEGMENTS`, as informações sobre instâncias detectadas com caixas delimitadoras não serão retornadas. Somente rótulos detectados durante os segmentos são retornados.
+ **Informações de paginação** – O exemplo mostra uma página de informações de detecção de rótulo. Você pode especificar quantos objetos `LabelDetection` retornar no parâmetro de entrada `MaxResults` para `GetLabelDetection`. Se existirem mais resultados além de `MaxResults`, o `GetLabelDetection` retornará um token (`NextToken`) usado para obter a próxima página de resultados. Para obter mais informações, consulte [Obter os resultados da análise do Amazon Rekognition Video](api-video.md#api-video-get).
+ **Informações de vídeo** – a resposta inclui informações sobre o formato do vídeo (`VideoMetadata`) em cada página de informações retornada pelo `GetLabelDetection`.

Veja a seguir um exemplo de GetLabelDetection resposta no formato JSON com agregação por TIMESTAMPS:

```
{  
    "JobStatus": "SUCCEEDED",
    "LabelModelVersion": "3.0",
    "Labels": [
        {
            "Timestamp": 1000,
            "Label": {
                "Name": "Car",
                "Categories": [
                  {
                    "Name": "Vehicles and Automotive"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Automobile"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Vehicle"
                  }
                ],
                "Confidence": 99.9364013671875, // Classification confidence
                "Instances": [    
                    {        
                        "BoundingBox": {            
                            "Width": 0.26779675483703613,
                            "Height": 0.8562285900115967,
                            "Left": 0.3604024350643158,
                            "Top": 0.09245597571134567         
                        },  
                        "Confidence": 99.9364013671875 // Detection confidence     
                    }    
                ]
            }
        },
        {
            "Timestamp": 1000,
            "Label": {
                "Name": "Cup",
                "Categories": [
                  {
                    "Name": "Kitchen and Dining"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Mug"
                  }
                ],
                "Parents": [],
                "Confidence": 99.9364013671875, // Classification confidence
                "Instances": [    
                    {        
                        "BoundingBox": {            
                            "Width": 0.26779675483703613,
                            "Height": 0.8562285900115967,
                            "Left": 0.3604024350643158,
                            "Top": 0.09245597571134567         
                        },  
                        "Confidence": 99.9364013671875 // Detection confidence     
                    }    
                ]
            }
        },
        {
            "Timestamp": 2000,
            "Label": {
                "Name": "Kangaroo",
                "Categories": [
                  {
                    "Name": "Animals and Pets"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Wallaby"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Mammal"
                  }
                ],
                "Confidence": 99.9364013671875,  
                "Instances": [    
                    {        
                        "BoundingBox": {            
                            "Width": 0.26779675483703613,
                            "Height": 0.8562285900115967,
                            "Left": 0.3604024350643158,
                            "Top": 0.09245597571134567,
                        },  
                        "Confidence": 99.9364013671875    
                    }    
                ]
            }
        },
        {
            "Timestamp": 4000,
            "Label": {
                "Name": "Bicycle",
                "Categories": [
                  {
                    "Name": "Hobbies and Interests"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Bike"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Vehicle"
                  }
                ],
                "Confidence": 99.9364013671875,
                "Instances": [    
                    {        
                        "BoundingBox": {            
                            "Width": 0.26779675483703613,
                            "Height": 0.8562285900115967,
                            "Left": 0.3604024350643158,
                            "Top": 0.09245597571134567         
                        },  
                        "Confidence": 99.9364013671875     
                    }    
                ]
            }
        }
    ],
    "VideoMetadata": {
        "ColorRange": "FULL",
        "DurationMillis": 5000,
        "Format": "MP4",
        "FrameWidth": 1280,
        "FrameHeight": 720,
        "FrameRate": 24
    }
}
```

Veja a seguir um exemplo de GetLabelDetection resposta no formato JSON com agregação por SEGMENTOS:

```
{  
    "JobStatus": "SUCCEEDED",
    "LabelModelVersion": "3.0",
    "Labels": [ 
        {
            "StartTimestampMillis": 225,
            "EndTimestampMillis": 3578,
            "DurationMillis": 3353,
            "Label": {
                "Name": "Car",
                "Categories": [
                  {
                    "Name": "Vehicles and Automotive"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Automobile"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Vehicle"
                  }
                ],
                "Confidence": 99.9364013671875 // Maximum confidence score for Segment mode
            }
        },
        {
            "StartTimestampMillis": 7578,
            "EndTimestampMillis": 12371,
            "DurationMillis": 4793,
            "Label": {
                "Name": "Kangaroo",
                "Categories": [
                  {
                    "Name": "Animals and Pets"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Wallaby"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Mammal"
                  }
                ],
                "Confidence": 99.9364013671875
            }
        },
        {
            "StartTimestampMillis": 22225,
            "EndTimestampMillis": 22578,
            "DurationMillis": 2353,
            "Label": {
                "Name": "Bicycle",
                "Categories": [
                  {
                    "Name": "Hobbies and Interests"
                  }
                ],
                "Aliases": [
                  {
                    "Name": "Bike"
                  }
                ],
                "Parents": [
                  {
                    "Name": "Vehicle"
                  }
                ],
                "Confidence": 99.9364013671875
            }
        }
    ],
    "VideoMetadata": {
        "ColorRange": "FULL",
        "DurationMillis": 5000,
        "Format": "MP4",
        "FrameWidth": 1280,
        "FrameHeight": 720,
        "FrameRate": 24
    }
}
```

## Transformando a resposta GetLabelDetection
<a name="getlabeldetection-transform-response"></a>

Ao recuperar resultados com a operação da GetLabelDetection API, talvez você precise que a estrutura de resposta imite a estrutura de resposta da API mais antiga, na qual tanto os rótulos primários quanto os aliases estavam contidos na mesma lista.

O exemplo de resposta JSON encontrado na seção anterior exibe a forma atual da resposta da API de. GetLabelDetection

O exemplo a seguir mostra a resposta anterior da GetLabelDetection API: 

```
{
    "Labels": [
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [],
                "Confidence": 60.51791763305664,
                "Parents": [],
                "Name": "Leaf"
            }
        },
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [],
                "Confidence": 99.53411102294922,
                "Parents": [],
                "Name": "Human"
            }
        },
        {
            "Timestamp": 0,
            "Label": {
                "Instances": [
                    {
                        "BoundingBox": {
                            "Width": 0.11109819263219833,
                            "Top": 0.08098889887332916,
                            "Left": 0.8881205320358276,
                            "Height": 0.9073750972747803
                        },
                        "Confidence": 99.5831298828125
                    },
                    {
                        "BoundingBox": {
                            "Width": 0.1268676072359085,
                            "Top": 0.14018426835536957,
                            "Left": 0.0003282368124928324,
                            "Height": 0.7993982434272766
                        },
                        "Confidence": 99.46029663085938
                    }
                ],
                "Confidence": 99.63411102294922,
                "Parents": [],
                "Name": "Person"
            }
        },
        .
        .   
        .

        {
            "Timestamp": 166,
            "Label": {
                "Instances": [],
                "Confidence": 73.6471176147461,
                "Parents": [
                    {
                        "Name": "Clothing"
                    }
                ],
                "Name": "Sleeve"
            }
        }
        
    ],
    "LabelModelVersion": "2.0",
    "JobStatus": "SUCCEEDED",
    "VideoMetadata": {
        "Format": "QuickTime / MOV",
        "FrameRate": 23.976024627685547,
        "Codec": "h264",
        "DurationMillis": 5005,
        "FrameHeight": 674,
        "FrameWidth": 1280
    }
}
```

Se necessário, você pode transformar a resposta atual para seguir o formato da resposta mais antiga. Você pode usar o código de exemplo a seguir para transformar a resposta mais recente da API na estrutura de resposta da API anterior: 

```
from copy import deepcopy

VIDEO_LABEL_KEY = "Labels"
LABEL_KEY = "Label"
ALIASES_KEY = "Aliases"
INSTANCE_KEY = "Instances"
NAME_KEY = "Name"

#Latest API response sample for AggregatedBy SEGMENTS
EXAMPLE_SEGMENT_OUTPUT = {
    "Labels": [
        {
            "Timestamp": 0,
            "Label":{
                "Name": "Person",
                "Confidence": 97.530106,
                "Parents": [],
                "Aliases": [
                    {
                        "Name": "Human"
                    },
                ],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
            "StartTimestampMillis": 0,
            "EndTimestampMillis": 500666,
            "DurationMillis": 500666
        },
        {
            "Timestamp": 6400,
            "Label": {
                "Name": "Leaf",
                "Confidence": 89.77790069580078,
                "Parents": [
                    {
                        "Name": "Plant"
                    }
                ],
                "Aliases": [],
                "Categories": [
                    {
                        "Name": "Plants and Flowers"
                    }
                ],

            },
            "StartTimestampMillis": 6400,
            "EndTimestampMillis": 8200,
            "DurationMillis": 1800
        },
    ]
}

#Output example after the transformation for AggregatedBy SEGMENTS
EXPECTED_EXPANDED_SEGMENT_OUTPUT = {
    "Labels": [
        {
            "Timestamp": 0,
            "Label":{
                "Name": "Person",
                "Confidence": 97.530106,
                "Parents": [],
                "Aliases": [
                    {
                        "Name": "Human"
                    },
                ],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
            "StartTimestampMillis": 0,
            "EndTimestampMillis": 500666,
            "DurationMillis": 500666
        },
        {
            "Timestamp": 6400,
            "Label": {
                "Name": "Leaf",
                "Confidence": 89.77790069580078,
                "Parents": [
                    {
                        "Name": "Plant"
                    }
                ],
                "Aliases": [],
                "Categories": [
                    {
                        "Name": "Plants and Flowers"
                    }
                ],

            },
            "StartTimestampMillis": 6400,
            "EndTimestampMillis": 8200,
            "DurationMillis": 1800
        },
        {
            "Timestamp": 0,
            "Label":{
                "Name": "Human",
                "Confidence": 97.530106,
                "Parents": [],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
            "StartTimestampMillis": 0,
            "EndTimestampMillis": 500666,
            "DurationMillis": 500666
        },
    ]
}

#Latest API response sample for AggregatedBy TIMESTAMPS
EXAMPLE_TIMESTAMP_OUTPUT = {
    "Labels": [
        {
            "Timestamp": 0,
            "Label": {
                "Name": "Person",
                "Confidence": 97.530106,
                "Instances": [
                    {
                        "BoundingBox": {
                            "Height": 0.1549897,
                            "Width": 0.07747964,
                            "Top": 0.50858885,
                            "Left": 0.00018205095
                        },
                        "Confidence": 97.530106
                    },
                ],
                "Parents": [],
                "Aliases": [
                    {
                        "Name": "Human"
                    },
                ],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
        },
        {
            "Timestamp": 6400,
            "Label": {
                "Name": "Leaf",
                "Confidence": 89.77790069580078,
                "Instances": [],
                "Parents": [
                    {
                        "Name": "Plant"
                    }
                ],
                "Aliases": [],
                "Categories": [
                    {
                        "Name": "Plants and Flowers"
                    }
                ],
            },
        },
    ]
}

#Output example after the transformation for AggregatedBy TIMESTAMPS
EXPECTED_EXPANDED_TIMESTAMP_OUTPUT = {
    "Labels": [
        {
            "Timestamp": 0,
            "Label": {
                "Name": "Person",
                "Confidence": 97.530106,
                "Instances": [
                    {
                        "BoundingBox": {
                            "Height": 0.1549897,
                            "Width": 0.07747964,
                            "Top": 0.50858885,
                            "Left": 0.00018205095
                        },
                        "Confidence": 97.530106
                    },
                ],
                "Parents": [],
                "Aliases": [
                    {
                        "Name": "Human"
                    },
                ],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
        },
        {
            "Timestamp": 6400,
            "Label": {
                "Name": "Leaf",
                "Confidence": 89.77790069580078,
                "Instances": [],
                "Parents": [
                    {
                        "Name": "Plant"
                    }
                ],
                "Aliases": [],
                "Categories": [
                    {
                        "Name": "Plants and Flowers"
                    }
                ],
            },
        },
        {
            "Timestamp": 0,
            "Label": {
                "Name": "Human",
                "Confidence": 97.530106,
                "Parents": [],
                "Categories": [
                    {
                        "Name": "Person Description"
                    }
                ],
            },
        },
    ]
}

def expand_aliases(inferenceOutputsWithAliases):

    if VIDEO_LABEL_KEY in inferenceOutputsWithAliases:
        expandInferenceOutputs = []
        for segmentLabelDict in inferenceOutputsWithAliases[VIDEO_LABEL_KEY]:
            primaryLabelDict = segmentLabelDict[LABEL_KEY]
            if ALIASES_KEY in primaryLabelDict:
                for alias in primaryLabelDict[ALIASES_KEY]:
                    aliasLabelDict = deepcopy(segmentLabelDict)
                    aliasLabelDict[LABEL_KEY][NAME_KEY] = alias[NAME_KEY]
                    del aliasLabelDict[LABEL_KEY][ALIASES_KEY]
                    if INSTANCE_KEY in aliasLabelDict[LABEL_KEY]:
                        del aliasLabelDict[LABEL_KEY][INSTANCE_KEY]
                    expandInferenceOutputs.append(aliasLabelDict)

        inferenceOutputsWithAliases[VIDEO_LABEL_KEY].extend(expandInferenceOutputs)

    return inferenceOutputsWithAliases


if __name__ == "__main__":

    segmentOutputWithExpandAliases = expand_aliases(EXAMPLE_SEGMENT_OUTPUT)
    assert segmentOutputWithExpandAliases == EXPECTED_EXPANDED_SEGMENT_OUTPUT

    timestampOutputWithExpandAliases = expand_aliases(EXAMPLE_TIMESTAMP_OUTPUT)
    assert timestampOutputWithExpandAliases == EXPECTED_EXPANDED_TIMESTAMP_OUTPUT
```

# Detectar rótulos em eventos de streaming de vídeo
<a name="streaming-video-detect-labels"></a>

Você pode usar o Amazon Rekognition Video para detectar rótulos em streaming de vídeo. Para fazer isso, você cria um processador de streaming ([CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html)) para iniciar e gerenciar a análise do streaming de vídeo. 

O Amazon Rekognition Video usa o Amazon Kinesis Video Streams para receber e processar um fluxo de vídeo. Ao criar o processador de streaming, você escolhe o que deseja que o processador de stream detecte. Você pode escolher pessoas, pacotes e animais de estimação, ou pessoas e pacotes. Os resultados da análise são enviados para seu bucket do Amazon S3 e nas notificações do Amazon SNS. Observe que o Amazon Rekognition Video detecta a presença de uma pessoa no vídeo, mas não detecta se a pessoa é uma pessoa específica. Para pesquisar um rosto de uma coleção em um vídeo de streaming, consulte [Pesquisando faces em uma coleção em um vídeo de streaming](collections-streaming.md). 

Para usar o Amazon Rekognition Video com streaming de vídeo, seu aplicativo exige o seguinte:
+ Um stream de vídeo do Kinesis para enviar streaming de vídeo para o Amazon Rekognition Video. Para obter mais informações, consulte o [Guia do desenvolvedor do Amazon Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html). 
+ Um processador de stream do Amazon Rekognition Video para gerenciar a análise do streaming de vídeo. Para obter mais informações, consulte [Visão geral das operações do processador de stream do Amazon Rekognition Video](streaming-video.md#using-rekognition-video-stream-processor).
+ Um bucket do Amazon S3. O Amazon Rekognition Video publica a saída da sessão no bucket do S3. A saída inclui o quadro da imagem em que uma pessoa ou objeto de interesse foi detectado pela primeira vez. Você deve ser o proprietário do bucket do S3.
+ Um tópico do Amazon SNS para o qual o Amazon Rekognition Video publica alertas inteligentes e um resumo. end-of-session

**Topics**
+ [Configurando seus recursos do Amazon Rekognition Video e do Amazon Kinesis](streaming-labels-setting-up.md)
+ [Chamar operações de detecção de rótulo para eventos de streaming de vídeo](streaming-labels-detection.md)

# Configurando seus recursos do Amazon Rekognition Video e do Amazon Kinesis
<a name="streaming-labels-setting-up"></a>

 Os procedimentos a seguir descrevem as etapas a serem seguidas para provisionar o fluxo de vídeo do Kinesis e outros recursos usados para detectar rótulos em um streaming de vídeo.

## Pré-requisitos
<a name="streaming-video-prerequisites"></a>

Para executar esse procedimento, AWS SDK para Java deve estar instalado. Para obter mais informações, consulte [Comece a usar o Amazon Rekognition](getting-started.md). A conta da AWS que você usa exige permissões de acesso à API do Amazon Rekognition. Para obter mais informações, consulte [Ações definidas pelo Amazon Rekognition](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions) no *Guia do usuário do IAM*. 

**Para detectar rótulos em um stream de vídeo (AWS SDK)**

1. Crie um bucket do Amazon S3. Anote o nome do bucket e os prefixos de chave que você queira usar. Você usa essas informações posteriormente.

1. Crie um tópico do Amazon SNS. Você pode usá-lo para receber notificações quando um objeto de interesse for detectado pela primeira vez no stream de vídeo. Anote o nome de recurso da Amazon (ARN) para o tópico. Para obter mais informações, consulte [Criar um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) no guia do desenvolvedor do Amazon SNS.

1. Assine um endpoint no tópico do Amazon SNS. Para obter mais informações, consulte [Assinatura de um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) no guia do desenvolvedor do Amazon SNS.

1. [Crie um stream de vídeo do Kinesis](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html) e anote o nome de recurso da Amazon (ARN) do stream.

1. Se você ainda não o fez, crie um perfil de serviço do IAM para dar ao Amazon Rekognition Video acesse aos seus streams de vídeo do Kinesis, ao seu bucket do S3 e ao seu tópico do Amazon SNS. Para obter mais informações, consulte [Fornecendo acesso para processadores de fluxo de detecção de rótulos](#streaming-labels-giving-access).

Em seguida, você pode [criar o processador de fluxo de detecção de rótulos](streaming-labels-detection.md#streaming-video-create-labels-stream-processor) e [iniciar o processador de fluxo](streaming-labels-detection.md#streaming-video-start-labels-stream-processor) usando o nome de processador de fluxo que você escolheu.

**nota**  
Inicie o processador de stream somente depois de verificar se você pode ingerir mídia no stream de vídeo do Kinesis. 

## Orientação e configuração da câmera
<a name="streaming-labels-camera-setup"></a>

Os eventos de streaming de vídeo do Amazon Rekognition Video podem oferecer suporte a todas as câmeras compatíveis com o Kinesis Video Streams. Para obter melhores resultados, recomendamos colocar a câmera entre 0 e 45 graus do chão. A câmera precisa estar na posição vertical canônica. Por exemplo, se houver uma pessoa na moldura, a pessoa deve estar orientada verticalmente e a cabeça da pessoa deve estar mais alta na moldura do que os pés.

## Fornecendo acesso para processadores de fluxo de detecção de rótulos
<a name="streaming-labels-giving-access"></a>

Você usa uma função de serviço AWS Identity and Access Management (IAM) para dar ao Amazon Rekognition Video acesso de leitura aos streams de vídeo do Kinesis. Para fazer isso, use os perfis do IAM para dar ao Amazon Rekognition Video acesso ao seu bucket do Amazon S3 e a um tópico do Amazon SNS.

Você pode criar uma política de permissões que permita ao Amazon Rekognition Video acessar um tópico existente do Amazon SNS, um bucket do Amazon S3 e um stream de vídeo do Kinesis. Para obter um step-by-step procedimento usando o AWS CLI, consulte[AWS CLI comandos para configurar uma função IAM de detecção de rótulos](#streaming-labels-giving-access-cli). 

**Para dar ao Amazon Rekognition Video acesso a recursos para detecção de rótulos**

1. [ Crie uma nova política de permissões com o editor de políticas IAM JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor) e use a política a seguir. Substitua `kvs-stream-name` pelo nome do stream de vídeo do Kinesis, `topicarn` pelo nome do recurso da Amazon (ARN) do tópico do Amazon SNS que você deseja usar e `bucket-name` pelo nome do bucket do Amazon S3.

1. [Crie um perfil de serviço do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console) ou atualize um perfil de serviço do IAM existente. Use as informações a seguir para criar o perfil de serviço do IAM:

   1. Escolha **Rekognition** como o nome de serviço.

   1. Escolha **Rekognition** para o caso de uso da função de serviço.

   1. Anexe a política de permissões que você criou na etapa 1.

1. Anote o ARN da função de serviço. Você precisa dele para criar o processador de stream antes de realizar operações de análise de vídeo.

1. (Opcional) Se você usar sua própria AWS KMS chave para criptografar dados enviados ao seu bucket do S3, deverá adicionar a seguinte declaração com a função do IAM. (Esse é o perfil do IAM criado para a política de chave, que corresponde à chave gerenciada pelo cliente que você deseja usar.)

   ```
       
               {
                          "Sid": "Allow use of the key by label detection Role",
                          "Effect": "Allow",
                          "Principal": {
                              "AWS": "arn:aws:iam:::role/REPLACE_WITH_LABEL_DETECTION_ROLE_CREATED"
                          },
                          "Action": [
                              "kms:Decrypt",
                              "kms:GenerateDataKey*"
                          ],
                          "Resource": "*"
               }
   ```

## AWS CLI comandos para configurar uma função IAM de detecção de rótulos
<a name="streaming-labels-giving-access-cli"></a>

Se você ainda não o fez, configure e configure o AWS CLI com suas credenciais.

Insira os comandos a seguir no AWS CLI para configurar uma função do IAM com as permissões necessárias para a detecção de rótulos.

1. `export IAM_ROLE_NAME=labels-test-role`

1. `export AWS_REGION=us-east-1`

1. Crie um arquivo de política de relacionamento de confiança (por exemplo, assume-role-rekognition .json) com o conteúdo a seguir.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "rekognition.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. `aws iam create-role --role-name $IAM_ROLE_NAME --assume-role-policy-document file://path-to-assume-role-rekognition.json --region $AWS_REGION`

1. `aws iam attach-role-policy --role-name $IAM_ROLE_NAME --policy-arn "arn:aws:iam::aws:policy/service-role/AmazonRekognitionServiceRole" --region $AWS_REGION`

1. Se o nome do tópico do SNS com o qual você deseja receber notificações não começar com o prefixo AmazonRekognition "”, adicione a seguinte política:

   `aws iam attach-role-policy --role-name $IAM_ROLE_NAME --policy-arn "arn:aws:iam::aws:policy/AmazonSNSFullAccess" --region $AWS_REGION`

1. Se você usa sua própria chave do AWS KMS para criptografar dados enviados para seu bucket do Amazon S3, atualize a política de chave da chave gerenciada pelo cliente que você deseja usar.

   1. Crie um arquivo kms\$1key\$1policy.json que contenha o seguinte conteúdo:

      ```
      {
      "Sid": "Allow use of the key by label detection Role",
      "Effect": "Allow",
      "Principal": {
      "AWS": "arn:aws:iam:::role/REPLACE_WITH_IAM_ROLE_NAME_CREATED"
      },
      "Action": [
      "kms:Encrypt",
      "kms:GenerateDataKey*"
      ],
      "Resource": "*"
      }
      ```

   1. `export KMS_KEY_ID=labels-kms-key-id`. Substitua KMS\$1KEY\$1ID pelo ID da chave KMS que você criou.

   1. `aws kms put-key-policy --policy-name default --key-id $KMS_KEY_ID --policy file://path-to-kms-key-policy.json`

# Chamar operações de detecção de rótulo para eventos de streaming de vídeo
<a name="streaming-labels-detection"></a>

O Amazon Rekognition Video pode detectar pessoas ou objetos relevantes em um streaming de vídeo e notificar você quando eles forem detectados. Ao criar um processador de stream de detecção de etiquetas, escolha quais etiquetas você deseja que o Amazon Rekognition Video detecte. Podem ser pessoas, pacotes e animais de estimação, ou pessoas, pacotes e animais de estimação. Escolha somente os rótulos específicos que você deseja detectar. Dessa forma, os únicos rótulos relevantes criam notificações. Você pode configurar opções para determinar quando armazenar informações de vídeo e, em seguida, fazer um processamento adicional com base nos rótulos detectados no quadro.

Depois de configurar seus recursos, o processo para detectar rótulos em um streaming de vídeo é o seguinte:

1. Crie o processador de stream

1. Inicie o processador de streaming

1. Se um objeto de interesse for detectado, você receberá uma notificação do Amazon SNS para a primeira ocorrência de cada objeto de interesse.

1. O processador de stream é interrompido quando o tempo especificado em `MaxDurationInSeconds` é concluído.

1. Você recebe uma notificação final do Amazon SNS com um resumo do evento.

1. O Amazon Rekognition Video publica um resumo detalhado da sessão em seu bucket do S3.

**Topics**
+ [Criação do processador de stream de detecção de rótulos do Amazon Rekognition Video](#streaming-video-create-labels-stream-processor)
+ [Iniciando o processador de fluxo de detecção de rótulos do Amazon Rekognition Video](#streaming-video-start-labels-stream-processor)
+ [Analisando os resultados da detecção de etiquetas](#streaming-video-labels-stream-processor-results)

## Criação do processador de stream de detecção de rótulos do Amazon Rekognition Video
<a name="streaming-video-create-labels-stream-processor"></a>

Antes de poder analisar um streaming de vídeo, você cria um processador de streaming de vídeo Amazon Rekognition Video (). [CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html)

Se você quiser criar um processador de fluxo para detectar rótulos de interesse e pessoas, forneça como entrada um fluxo de vídeo do Kinesis (`Input`), informações de bucket do Amazon S3 (`Output`) e um ARN de tópico do Amazon SNS (`StreamProcessorNotificationChannel`). Você também pode fornecer um ID de chave KMS para criptografar os dados enviados para seu bucket do S3. Você especifica o que deseja detectar `Settings`, como pessoas, pacotes e pessoas, ou animais de estimação, pessoas e pacotes. Você também pode especificar em que parte do quadro você deseja que o Amazon Rekognition monitore com `RegionsOfInterest`. Veja a seguir um exemplo de JSON para a solicitação `CreateStreamProcessor`.

```
{
  "DataSharingPreference": { "OptIn":TRUE
  },
  "Input": {
    "KinesisVideoStream": {
      "Arn": "arn:aws:kinesisvideo:us-east-1:nnnnnnnnnnnn:stream/muh_video_stream/nnnnnnnnnnnnn"
    }
  },
  "KmsKeyId": "muhkey",
  "Name": "muh-default_stream_processor",
  "Output": {
    "S3Destination": {
      "Bucket": "s3bucket",
      "KeyPrefix": "s3prefix"
    }
  },
  "NotificationChannel": {
    "SNSTopicArn": "arn:aws:sns:us-east-2:nnnnnnnnnnnn:MyTopic"
  },
  "RoleArn": "arn:aws:iam::nnnnnnnnn:role/Admin",
  "Settings": {
    "ConnectedHome": {
      "Labels": [
        "PET"
      ]
    "MinConfidence": 80
    }
  },
  "RegionsOfInterest": [
    {
      "BoundingBox": {
        "Top": 0.11,
        "Left": 0.22,
        "Width": 0.33,
        "Height": 0.44
      }
    },
    {
      "Polygon": [
        {
          "X": 0.11,
          "Y": 0.11
        },
        {
          "X": 0.22,
          "Y": 0.22
        },
        {
          "X": 0.33,
          "Y": 0.33
        }
      ]
    }
  ]
}
```

Observe que você pode alterar o valor `MinConfidence` ao especificar o `ConnectedHomeSettings` para o processador de stream. `MinConfidence` é um valor numérico que varia de 0 a 100 que indica a certeza do algoritmo sobre suas previsões. Por exemplo, uma notificação `person` com um valor de confiança de 90 significa que o algoritmo tem certeza absoluta de que a pessoa está presente no vídeo. Um valor de confiança de 10 indica que pode haver uma pessoa. Você pode definir o valor `MinConfidence` desejado de sua escolha entre 0 e 100, dependendo da frequência com que deseja ser notificado. Por exemplo, se você quiser ser notificado somente quando o Rekognition tiver certeza absoluta de que há um pacote no quadro do vídeo, você pode definir de `MinConfidence` para 90.

Por padrão, `MinConfidence ` está definido como 50. Se quiser otimizar o algoritmo para maior precisão, você pode definir `MinConfidence` como maior que 50. Em seguida, você recebe menos notificações, mas cada notificação é mais confiável. Se você quiser otimizar o algoritmo para uma maior recuperação, defina `MinConfidence` como menor que 50 para receber mais notificações. 

## Iniciando o processador de fluxo de detecção de rótulos do Amazon Rekognition Video
<a name="streaming-video-start-labels-stream-processor"></a>

Inicie a análise de streaming de vídeo chamando [StartStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartStreamProcessor.html) com o nome do processador de fluxo que você especificou em `CreateStreamProcessor`. Ao executar a operação `StartStreamProcessor` em um processador de fluxo de detecção de etiquetas, você insere as informações de início e término para determinar o tempo de processamento.

Quando você inicia o processador de stream, o estado do processador de stream de detecção de etiquetas muda das seguintes formas:

1. Quando você liga `StartStreamProcessor`, o estado do processador de fluxo de detecção de rótulos vai de `STOPPED` ou `FAILED` para `STARTING`.

1. Enquanto o processador de fluxo de detecção de etiquetas é executado, ele permanece em `STARTING`.

1. Quando o processador de fluxo de detecção de etiquetas termina de funcionar, o estado se torna `STOPPED` ou `FAILED`.

O `StartSelector` especifica o ponto de partida no stream do Kinesis para iniciar o processamento. Você pode usar o carimbo de data/hora do produtor KVS ou o número do fragmento KVS. Para obter mais informações, consulte [Fragmento](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_Fragment.html).

**nota**  
Se você usar o carimbo de data/hora do KVS Producer, deverá inserir a hora em milissegundos.

O `StopSelector` especifica quando parar de processar o fluxo. Você pode especificar um tempo máximo para processar o vídeo. O padrão é uma duração máxima de 10 segundos. Observe que o tempo real de processamento pode ser um pouco maior do que a duração máxima, dependendo do tamanho dos fragmentos individuais do KVS. Se a duração máxima tiver sido atingida ou excedida no final de um fragmento, o tempo de processamento será interrompido. 

Veja a seguir um exemplo de JSON para a solicitação `StartStreamProcessor`.

```
{
   "Name": "string",
   "StartSelector": {
     "KVSStreamStartSelector": { 
         "KVSProducerTimestamp": 1655930623123
      },
        "StopSelector": {
            "MaxDurationInSeconds": 11
      }
   }
}
```

Se o processador de stream for iniciado com sucesso, uma resposta HTTP 200 será retornada. Um corpo JSON vazio está incluído.

## Analisando os resultados da detecção de etiquetas
<a name="streaming-video-labels-stream-processor-results"></a>

Há três maneiras pelas quais o Amazon Rekognition Video publica notificações de um processador de fluxo de detecção de etiquetas: notificações do Amazon SNS para eventos de detecção de objetos, uma notificação end-of-session do Amazon SNS para um resumo e um relatório detalhado do bucket do Amazon S3. 
+ Notificações do Amazon SNS para eventos de detecção de objetos. 

  Se rótulos forem detectados no stream de vídeo, você receberá notificações do Amazon SNS para eventos de detecção de objetos. O Amazon Rekognition publica uma notificação na primeira vez em que uma pessoa ou objeto de interesse é detectado no stream de vídeo. As notificações incluem informações como o tipo de rótulo detectado, a confiança e um link para a imagem do herói. Eles também incluem uma imagem recortada da pessoa ou objeto detectado e um carimbo de data e hora da detecção. A notificação tem o seguinte formato:

  ```
  {"Subject": "Rekognition Stream Processing Event",
      "Message": {    
          "inputInformation": {
              "kinesisVideo": {
                  "streamArn": string
              }
          },
          "eventNamespace": {
              "type": "LABEL_DETECTED"
          },
          "labels": [{
              "id": string,
              "name": "PERSON" | "PET" | "PACKAGE",
              "frameImageUri": string,
              "croppedImageUri": string,
              "videoMapping": {
                  "kinesisVideoMapping": {
                      "fragmentNumber": string,
                      "serverTimestamp": number,
                      "producerTimestamp": number,
                      "frameOffsetMillis": number
                  }
              },
              "boundingBox": {
                  "left": number,
                  "top": number,
                  "height": number,
                  "width": number
              }
          }],
          "eventId": string,
          "tags": {
              [string]: string
          },
          "sessionId": string,
          "startStreamProcessorRequest": object
      }
  }
  ```
+ Resumo do Amazon SNS. end-of-session

  Você também recebe uma notificação do Amazon SNS quando a sessão de processamento do stream é concluída. Essa notificação lista os metadados da sessão. Isso inclui detalhes como a duração do fluxo que foi processado. A notificação tem o seguinte formato:

  ```
  {"Subject": "Rekognition Stream Processing Event",
      "Message": {
          "inputInformation": {
              "kinesisVideo": {
                  "streamArn": string,
                  "processedVideoDurationMillis": number
              }
          },
          "eventNamespace": {
              "type": "STREAM_PROCESSING_COMPLETE"
          },
          "streamProcessingResults": {
              "message": string
          },
          "eventId": string,
          "tags": {
              [string]: string
          },
          "sessionId": string,
          "startStreamProcessorRequest": object
      }
  }
  ```
+ Relatório do bucket do Amazon S3.

  O Amazon Rekognition Video publica resultados de inferência detalhados de uma operação de análise de vídeo no bucket do Amazon S3 que é fornecido na operação `CreateStreamProcessor`. Esses resultados incluem molduras de imagem em que um objeto de interesse ou pessoa foi detectado pela primeira vez. 

  Os quadros estão disponíveis no S3 no seguinte caminho: ObjectKeyPrefix//StreamProcessorNameSessionId/*service\$1determined\$1unique\$1path*. Nesse caminho, **LabelKeyPrefix**é um argumento opcional fornecido pelo cliente, **StreamProcessorName**é o nome do recurso do processador de stream e **SessionId**é uma ID exclusiva para a sessão de processamento de stream. Substitua-os de acordo com sua situação.

# Detectar rótulos personalizados
<a name="labels-detecting-custom-labels"></a>

Os Amazon Rekognition Custom Labels podem identificar objetos e cenas em imagens que são específicas para suas necessidades comerciais, como logotipos ou peças de máquinas de engenharia. Para obter mais informações, consulte [O que são Amazon Rekognition Custom Labels?](https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/what-is.html) no *Guia do desenvolvedor do Amazon Rekognition Custom Labels*.