

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Detección de etiquetas en un vídeo
<a name="labels-detecting-labels-video"></a>

Amazon Rekognition Video puede detectar etiquetas (objetos y conceptos) y la hora en que se detecta una etiqueta en un vídeo. Para ver un ejemplo de código del SDK, consulte [Análisis de un vídeo almacenado en un bucket de Amazon S3 con Java o Python (SDK)](video-analyzing-with-sqs.md). Para ver un AWS CLI ejemplo, consulte[Analizar un vídeo con el AWS Command Line Interface](video-cli-commands.md).

La detección de etiquetas de Amazon Rekognition Video es una operación asíncrona. Para iniciar la detección de etiquetas en un vídeo, llame [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartlabelDetection.html). 

Amazon Rekognition Video publica el estado de finalización de una operación de análisis de vídeo en un tema de Amazon Simple Notification Service. Si el análisis de vídeo es correcto, llame a [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) para obtener las etiquetas detectadas. Para obtener información sobre cómo llamar a operaciones de la API de análisis de vídeo, consulte [Cómo llamar a las operaciones de Amazon Rekognition Video](api-video.md). 

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

A continuación, se muestra un ejemplo para la operación `StartLabelDetection`. Usted proporciona a la operación `StartLabelDetection` un vídeo almacenado en un bucket de Amazon S3. En la solicitud JSON de ejemplo, se especifican el bucket de Amazon S3 y el nombre del vídeo, junto con`MinConfidence`, `Features`, `Settings` y `NotificationChannel`.

`MinConfidence` es el nivel mínimo de confianza que debe tener Amazon Rekognition Video en la precisión de la etiqueta detectada, o una instancia de cuadro delimitador (si se detecta), para que se devuelva en la respuesta.

Con `Features`, puede especificar que desea que se devuelva GENERAL\_LABELS como parte de la respuesta.

Con `Settings`, puede filtrar los artículos devueltos para GENERAL\_LABELS. Para las etiquetas, puede usar filtros inclusivos y exclusivos. También puede filtrar por etiquetas específicas, etiquetas individuales o por categoría de etiquetas: 
+ `LabelInclusionFilters`: se utiliza para especificar qué etiquetas desea incluir en la respuesta 
+ `LabelExclusionFilters`: se utiliza para especificar qué etiquetas desea excluir de la respuesta.
+ `LabelCategoryInclusionFilters`: se utiliza para especificar qué categorías de etiquetas desea incluir en la respuesta.
+ `LabelCategoryExclusionFilters`: se utiliza para especificar qué categorías de etiquetas desea excluir de la respuesta.

También puede combinar filtros inclusivos y exclusivos según sus necesidades, excluyendo algunas etiquetas o categorías e incluyendo otras.

`NotificationChannel` es el ARN del tema de Amazon SNS en el que desea que Amazon Rekognition Video publique el estado de finalización de la operación de detección de etiquetas. Si utiliza la política de permisos `AmazonRekognitionServiceRole`, el tema de Amazon SNS debe tener un nombre que comience por Rekognition.

El siguiente es un ejemplo de solicitud `StartLabelDetection` en formato JSON, que incluye 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 Respuesta a la operación
<a name="getlabeldetection-operation-response"></a>

`GetLabelDetection` devuelve una matriz (`Labels`) que contiene información sobre las etiquetas detectadas en el vídeo. La matriz se puede ordenar por tiempo o por la etiqueta detectada al especificar el parámetro `SortBy`. También puede seleccionar cómo se agregan los elementos de respuesta mediante el parámetro `AggregateBy`. 

El siguiente ejemplo es la respuesta JSON de `GetLabelDetection`. En la respuesta, tenga en cuenta lo siguiente:
+ **Orden de clasificación**: la matriz de etiquetas devueltas está ordenada por tiempo. Para ordenar por etiqueta, especifique `NAME` en el parámetro de entrada `SortBy` para `GetLabelDetection`. Si la etiqueta aparece varias veces en el vídeo, habrá varias instancias del elemento ([LabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_LabelDetection.html)). El orden de clasificación predeterminado es `TIMESTAMP`, mientras que el orden de clasificación secundario es `NAME`.
+ **Información de etiqueta**: el elemento de matriz `LabelDetection` contiene un objeto ([Label](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Label.html)), que a su vez contiene el nombre de la etiqueta y la confianza que Amazon Rekognition tiene en la precisión de la etiqueta detectada. Los objetos `Label` también contienen una taxonomía jerárquica de etiquetas e información de los cuadros delimitadores de las etiquetas comunes. `Timestamp` es el tiempo de detección de la etiqueta, definido como el número de milisegundos transcurrido desde el comienzo del vídeo. 

  También se devuelve información sobre las categorías o alias asociados a una etiqueta. Para los resultados agregados por vídeo `SEGMENTS`, se devuelven las estructuras `StartTimestampMillis`, `EndTimestampMillis` y `DurationMillis`, que definen la hora de inicio, la hora de finalización y la duración de un segmento, respectivamente.
+ **Agregación**: especifica cómo se agregan los resultados cuando se devuelven. El valor predeterminado es agregar por `TIMESTAMPS`. También puede optar por agregar por `SEGMENTS`, lo que agrega los resultados en un intervalo de tiempo. Si se agrega por `SEGMENTS`, no se devuelve la información sobre las instancias detectadas con recuadros delimitadores. Solo se devuelven las etiquetas detectadas durante los segmentos.
+ **Información de paginación**: el ejemplo muestra una página de información de detección de etiqueta. Puede especificar la cantidad de objetos `LabelDetection` que se van a devolver en el parámetro de entrada `MaxResults` para `GetLabelDetection`. Si existen más resultados que `MaxResults`, `GetLabelDetection` devuelve un token (`NextToken`) que se utiliza para obtener la siguiente página de resultados. Para obtener más información, consulte [Obtención de los resultados del análisis de Amazon Rekognition Video](api-video.md#api-video-get).
+ **Información de vídeo**: la respuesta incluye información acerca del formato de vídeo (`VideoMetadata`) en cada página de información devuelta por `GetLabelDetection`.

El siguiente es un ejemplo de GetLabelDetection respuesta en formato JSON con agregación mediante 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
    }
}
```

El siguiente es un ejemplo de GetLabelDetection respuesta en formato JSON con agregación 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 la GetLabelDetection respuesta
<a name="getlabeldetection-transform-response"></a>

Al recuperar los resultados de la operación de la GetLabelDetection API, es posible que necesite que la estructura de respuesta imite la estructura de respuesta de la API anterior, en la que tanto las etiquetas principales como los alias estaban contenidos en la misma lista.

El ejemplo de respuesta de JSON que se encuentra en la sección anterior muestra la forma actual de la respuesta de la API de. GetLabelDetection

En el siguiente ejemplo, se muestra la respuesta anterior de la 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
    }
}
```

Si es necesario, puede transformar la respuesta actual para que siga el formato de la respuesta anterior. Puede usar el siguiente código de ejemplo para transformar la última respuesta de la API en la estructura de respuesta de la 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
```