

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 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\_LABELS seja retornado como parte da resposta.

Com `Settings`, você pode filtrar os itens retornados para GENERAL\_LABELS. 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
```