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
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). Para ver un ejemplo de AWS CLI, consulte Análisis de un vídeo con la AWS Command Line Interface.
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 a StartLabelDetection.
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 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.
Solicitud de StartLabelDetection
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 conMinConfidence
, 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", } }
Respuesta de la operación GetLabelDetection
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 entradaSortBy
paraGetLabelDetection
. Si la etiqueta aparece varias veces en el vídeo, habrá varias instancias del elemento (LabelDetection). El orden de clasificación predeterminado esTIMESTAMP
, mientras que el orden de clasificación secundario esNAME
. -
Información de etiqueta: el elemento de matriz
LabelDetection
contiene un objeto (Label), 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 objetosLabel
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 estructurasStartTimestampMillis
,EndTimestampMillis
yDurationMillis
, 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 porSEGMENTS
, lo que agrega los resultados en un intervalo de tiempo. Si se agrega porSEGMENTS
, 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 entradaMaxResults
paraGetLabelDetection
. Si existen más resultados queMaxResults
,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. -
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 porGetLabelDetection
.
El siguiente es un ejemplo de respuesta GetLabelDetection en formato JSON con agregación 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 } }
El siguiente es un ejemplo de respuesta GetLabelDetection en formato JSON con agregación por SEGMENTS:
{ "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 } }
Transformación de la respuesta de GetLabelDetection
Al recuperar los resultados con la operación de la API GetLabelDetection, 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 JSON que se encuentra en la sección anterior muestra la forma actual de la respuesta de API de GetLabelDetection.
En el siguiente ejemplo, se muestra la respuesta anterior de la API de GetLabelDetection:
{ "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