Analizar la transmisión de vídeos con los procesadores de transmisión de Amazon Rekognition Video - Amazon Rekognition

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.

Analizar la transmisión de vídeos con los procesadores de transmisión de Amazon Rekognition Video

El análisis de un streaming de vídeo comienza iniciando un procesador de streaming Amazon Rekognition Video y transmitiendo vídeo a Amazon Rekognition Video. Un procesador de streaming Amazon Rekognition Video le permite iniciar, detener y administrar procesadores de streaming. Crea un procesador de streaming llamando a CreateStreamProcessor. Los parámetros de solicitud incluyen los nombres de recursos de Amazon (ARN) para la transmisión de vídeo de Kinesis, la transmisión de datos de Kinesis y el identificador de la colección que se utiliza para reconocer rostros en el vídeo en streaming. También incluye el nombre que especifica para el procesador de streaming.

Comienza a procesar un vídeo llamando a la operación . Para obtener la información de estado de un procesador de streaming, llame a DescribeStreamProcessor. Otras operaciones que puede llamar son StopStreamProcessor para detener un procesador de streaming y DeleteStreamProcessor para eliminar un procesador de streaming. Para obtener una lista de los procesadores de streaming en su cuenta, llame a ListStreamProcessors.

Después de que el procesador de streaming comienza a ejecutarse, transmita el vídeo en Amazon Rekognition Video a través del streaming de vídeo de Kinesis que especificó enCreateStreamProcessor. Uso del SDK de Kinesis Video StreamsPutMediapara enviar vídeo a la transmisión de vídeo de Kinesis. Para ver un ejemplo, consulte PutMedia API Example.

Para obtener más información sobre cómo la aplicación puede consumir los resultados de análisis de Amazon Rekognition Video, consulteLeer resultados de análisis de vídeo en streaming.

Creación del procesador de secuencias de Amazon Rekognition Video

Antes de poder analizar un vídeo en streaming, cree un procesador de streaming Amazon Rekognition Video (CreateStreamProcessor). El procesador de streaming contiene información sobre el streaming de datos de Kinesis y el streaming de vídeo de Kinesis. También contiene el identificador de la colección que contiene los rostros que desea reconocer en el vídeo de streaming de entrada. Además especifica un nombre para el procesador de streaming. A continuación, se muestra un ejemplo de JSON para la solicitud CreateStreamProcessor.

{ "Name": "streamProcessorForCam", "Input": { "KinesisVideoStream": { "Arn": "arn:aws:kinesisvideo:us-east-1:nnnnnnnnnnnn:stream/inputVideo" } }, "Output": { "KinesisDataStream": { "Arn": "arn:aws:kinesis:us-east-1:nnnnnnnnnnnn:stream/outputData" } }, "RoleArn": "arn:aws:iam::nnnnnnnnnnn:role/roleWithKinesisPermission", "Settings": { "FaceSearch": { "CollectionId": "collection-with-100-faces", "FaceMatchThreshold": 85.5 } } }

A continuación se muestra un ejemplo de respuesta de CreateStreamProcessor.

{ “StreamProcessorArn”: “arn:aws:rekognition:us-east-1:nnnnnnnnnnnn:streamprocessor/streamProcessorForCam” }

Temas

    Etiquetado del procesador de secuencias de Amazon Rekognition Video

    Puede identificar, organizar, buscar y filtrar los procesadores de streaming de Amazon Rekognition mediante etiquetas. Cada etiqueta es una marca que consta de una clave y un valor definidos por el usuario.

    Agregar etiquetas a un nuevo procesador de secuencias

    También puede añadir etiquetas a un procesador de streaming a medida que lo cree utilizando laCreateStreamProcessor. Especifique una o varias etiquetas en laTagsparámetro de entrada de matriz. A continuación, se muestra un ejemplo de JSON para laCreateStreamProcessorsolicitud con etiquetas.

    { "Name": "streamProcessorForCam", "Input": { "KinesisVideoStream": { "Arn": "arn:aws:kinesisvideo:us-east-1:nnnnnnnnnnnn:stream/inputVideo" } }, "Output": { "KinesisDataStream": { "Arn": "arn:aws:kinesis:us-east-1:nnnnnnnnnnnn:stream/outputData" } }, "RoleArn": "arn:aws:iam::nnnnnnnnnnn:role/roleWithKinesisPermission", "Settings": { "FaceSearch": { "CollectionId": "collection-with-100-faces", "FaceMatchThreshold": 85.5 }, "Tags": { "Dept": "Engineering", "Name": "Ana Silva Carolina", "Role": "Developer" } }

    Incorporación de etiquetas a un procesador de streaming existente

    Para añadir una o más etiquetas a un procesador de streaming existente, utilice laTagResource. Especifique el nombre de recurso de Amazon (ARN) del procesador de streaming (ResourceArn) y las etiquetas (Tags) que desea agregar. En el ejemplo siguiente, se muestra cómo añadir dos etiquetas.

    aws rekognition tag-resource --resource-arn resource-arn \ --tags '{"key1":"value1","key2":"value2"}'
    nota

    Si no conoce el nombre de recurso de Amazon del procesador de secuencias, puede utilizar elDescribeStreamProcessor.

    Lista de etiquetas en un procesador de secuencias

    Para enumerar las etiquetas asociadas con un procesador de streaming de, utilice laListTagsForResourcey especificar el ARN del procesador de secuencias (ResourceArn). La respuesta es un mapa de las claves y los valores de las etiquetas que se asocian al procesador de streaming especificado.

    aws rekognition list-tags-for-resource --resource-arn resource-arn

    La salida muestra una lista de etiquetas adjuntas al procesador de secuencias:

    { "Tags": { "Dept": "Engineering", "Name": "Ana Silva Carolina", "Role": "Developer" } }

    Eliminar etiquetas de un procesador de secuencias

    Para eliminar una o varias etiquetas de un procesador de streaming de, utilice laUntagResource. Especifique el ARN del modelo (ResourceArn) y las teclas de etiqueta (Tag-Keys) que desea eliminar.

    aws rekognition untag-resource --resource-arn resource-arn \ --tag-keys '["key1","key2"]'

    Si lo desea, puede especificar claves de etiqueta en este formato:

    --tag-keys key1,key2

    Inicio del procesador de secuencias de Amazon Rekognition Video

    Se comienza a analizar el vídeo en streaming llamando a StartStreamProcessor con el nombre del procesador de streaming que especificó en CreateStreamProcessor. A continuación, se muestra un ejemplo de JSON para la solicitud StartStreamProcessor.

    { "Name": "streamProcessorForCam" }

    Si el procesador de streaming comienza correctamente, se devuelve una respuesta HTTP 200, junto con un cuerpo JSON vacío.

    Uso de procesadores de transmisión (ejemplo de Java V2)

    El siguiente código de ejemplo muestra cómo llamar a diversas operaciones de procesador, comoCreateStreamProcessoryStartStreamProcessor, utilizando elAWSSDK for Java versión 2.

    Este código se toma de laAWSDocumentación de ejemplos del SDK de repositorio de GitHub. Ver el ejemplo completoaquí.

    public static void listStreamProcessors(RekognitionClient rekClient) { ListStreamProcessorsRequest request = ListStreamProcessorsRequest.builder() .maxResults(15) .build(); ListStreamProcessorsResponse listStreamProcessorsResult = rekClient.listStreamProcessors(request); //List all stream processors (and state) returned from Rekognition. for (StreamProcessor streamProcessor : listStreamProcessorsResult.streamProcessors()) { System.out.println("StreamProcessor name - " + streamProcessor.name()); System.out.println("Status - " + streamProcessor.status()); } } private static void describeStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) { DescribeStreamProcessorRequest streamProcessorRequest = DescribeStreamProcessorRequest.builder() .name(StreamProcessorName) .build(); DescribeStreamProcessorResponse describeStreamProcessorResult = rekClient.describeStreamProcessor(streamProcessorRequest); // Display the results. System.out.println("Arn - " + describeStreamProcessorResult.streamProcessorArn()); System.out.println("Input kinesisVideo stream - " + describeStreamProcessorResult.input().kinesisVideoStream().arn()); System.out.println("Output kinesisData stream - " + describeStreamProcessorResult.output().kinesisDataStream().arn()); System.out.println("RoleArn - " + describeStreamProcessorResult.roleArn()); System.out.println( "CollectionId - " + describeStreamProcessorResult.settings().faceSearch().collectionId()); System.out.println("Status - " + describeStreamProcessorResult.status()); System.out.println("Status message - " + describeStreamProcessorResult.statusMessage()); System.out.println("Creation timestamp - " + describeStreamProcessorResult.creationTimestamp()); System.out.println("Last update timestamp - " + describeStreamProcessorResult.lastUpdateTimestamp()); } private static void startSpecificStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) { try { StartStreamProcessorRequest streamProcessorRequest = StartStreamProcessorRequest.builder() .name(StreamProcessorName) .build(); rekClient.startStreamProcessor(streamProcessorRequest); System.out.println("Stream Processor " + StreamProcessorName + " started."); } catch (RekognitionException e) { System.out.println(e.getMessage()); System.exit(1); } } private static void processCollection(RekognitionClient rekClient, String StreamProcessorName, String kinInputStream, String kinOutputStream, String collectionName, String role ) { try { KinesisVideoStream videoStream = KinesisVideoStream.builder() .arn(kinInputStream) .build(); KinesisDataStream dataStream = KinesisDataStream.builder() .arn(kinOutputStream) .build(); StreamProcessorOutput processorOutput = StreamProcessorOutput.builder() .kinesisDataStream(dataStream) .build(); StreamProcessorInput processorInput = StreamProcessorInput.builder() .kinesisVideoStream(videoStream) .build(); FaceSearchSettings searchSettings = FaceSearchSettings.builder() .faceMatchThreshold(75f) .collectionId(collectionName) .build() ; StreamProcessorSettings processorSettings = StreamProcessorSettings.builder() .faceSearch(searchSettings) .build(); CreateStreamProcessorRequest processorRequest = CreateStreamProcessorRequest.builder() .name(StreamProcessorName) .input(processorInput) .output(processorOutput) .roleArn(role) .settings(processorSettings) .build(); CreateStreamProcessorResponse response = rekClient.createStreamProcessor(processorRequest); System.out.println("The ARN for the newly create stream processor is "+response.streamProcessorArn()); } catch (RekognitionException e) { System.out.println(e.getMessage()); System.exit(1); } } private static void deleteSpecificStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) { rekClient.stopStreamProcessor(a->a.name(StreamProcessorName)); rekClient.deleteStreamProcessor(a->a.name(StreamProcessorName)); System.out.println("Stream Processor " + StreamProcessorName + " deleted."); }

    Uso de procesadores de transmisión (ejemplo de Java V1)

    El siguiente código de ejemplo muestra cómo llamar a diversas operaciones de procesador, comoCreateStreamProcessoryStartStreamProcessor, utilizando Java V1. El ejemplo incluye una clase de administrador de procesador de streaming (StreamManager) que proporciona métodos para llamar a operaciones de procesador de streaming. La clase de inicio (Starter) crea un objeto StreamManager y llama a diversas operaciones.

    Para configurar el ejemplo:

    1. Establezca los valores de los campos de miembro de la clase Starter a los valores que desee.

    2. En la función de clase Starter main, quite el comentario de la llamada de función que desee.

    Clase Starter

    //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.) // Starter class. Use to create a StreamManager class // and call stream processor operations. package com.amazonaws.samples; import com.amazonaws.samples.*; public class Starter { public static void main(String[] args) { String streamProcessorName="Stream Processor Name"; String kinesisVideoStreamArn="Kinesis Video Stream Arn"; String kinesisDataStreamArn="Kinesis Data Stream Arn"; String roleArn="Role Arn"; String collectionId="Collection ID"; Float matchThreshold=50F; try { StreamManager sm= new StreamManager(streamProcessorName, kinesisVideoStreamArn, kinesisDataStreamArn, roleArn, collectionId, matchThreshold); //sm.createStreamProcessor(); //sm.startStreamProcessor(); //sm.deleteStreamProcessor(); //sm.deleteStreamProcessor(); //sm.stopStreamProcessor(); //sm.listStreamProcessors(); //sm.describeStreamProcessor(); } catch(Exception e){ System.out.println(e.getMessage()); } } }

    Clase StreamManager

    //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.) // Stream manager class. Provides methods for calling // Stream Processor operations. package com.amazonaws.samples; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.CreateStreamProcessorRequest; import com.amazonaws.services.rekognition.model.CreateStreamProcessorResult; import com.amazonaws.services.rekognition.model.DeleteStreamProcessorRequest; import com.amazonaws.services.rekognition.model.DeleteStreamProcessorResult; import com.amazonaws.services.rekognition.model.DescribeStreamProcessorRequest; import com.amazonaws.services.rekognition.model.DescribeStreamProcessorResult; import com.amazonaws.services.rekognition.model.FaceSearchSettings; import com.amazonaws.services.rekognition.model.KinesisDataStream; import com.amazonaws.services.rekognition.model.KinesisVideoStream; import com.amazonaws.services.rekognition.model.ListStreamProcessorsRequest; import com.amazonaws.services.rekognition.model.ListStreamProcessorsResult; import com.amazonaws.services.rekognition.model.StartStreamProcessorRequest; import com.amazonaws.services.rekognition.model.StartStreamProcessorResult; import com.amazonaws.services.rekognition.model.StopStreamProcessorRequest; import com.amazonaws.services.rekognition.model.StopStreamProcessorResult; import com.amazonaws.services.rekognition.model.StreamProcessor; import com.amazonaws.services.rekognition.model.StreamProcessorInput; import com.amazonaws.services.rekognition.model.StreamProcessorOutput; import com.amazonaws.services.rekognition.model.StreamProcessorSettings; public class StreamManager { private String streamProcessorName; private String kinesisVideoStreamArn; private String kinesisDataStreamArn; private String roleArn; private String collectionId; private float matchThreshold; private AmazonRekognition rekognitionClient; public StreamManager(String spName, String kvStreamArn, String kdStreamArn, String iamRoleArn, String collId, Float threshold){ streamProcessorName=spName; kinesisVideoStreamArn=kvStreamArn; kinesisDataStreamArn=kdStreamArn; roleArn=iamRoleArn; collectionId=collId; matchThreshold=threshold; rekognitionClient=AmazonRekognitionClientBuilder.defaultClient(); } public void createStreamProcessor() { //Setup input parameters KinesisVideoStream kinesisVideoStream = new KinesisVideoStream().withArn(kinesisVideoStreamArn); StreamProcessorInput streamProcessorInput = new StreamProcessorInput().withKinesisVideoStream(kinesisVideoStream); KinesisDataStream kinesisDataStream = new KinesisDataStream().withArn(kinesisDataStreamArn); StreamProcessorOutput streamProcessorOutput = new StreamProcessorOutput().withKinesisDataStream(kinesisDataStream); FaceSearchSettings faceSearchSettings = new FaceSearchSettings().withCollectionId(collectionId).withFaceMatchThreshold(matchThreshold); StreamProcessorSettings streamProcessorSettings = new StreamProcessorSettings().withFaceSearch(faceSearchSettings); //Create the stream processor CreateStreamProcessorResult createStreamProcessorResult = rekognitionClient.createStreamProcessor( new CreateStreamProcessorRequest().withInput(streamProcessorInput).withOutput(streamProcessorOutput) .withSettings(streamProcessorSettings).withRoleArn(roleArn).withName(streamProcessorName)); //Display result System.out.println("Stream Processor " + streamProcessorName + " created."); System.out.println("StreamProcessorArn - " + createStreamProcessorResult.getStreamProcessorArn()); } public void startStreamProcessor() { StartStreamProcessorResult startStreamProcessorResult = rekognitionClient.startStreamProcessor(new StartStreamProcessorRequest().withName(streamProcessorName)); System.out.println("Stream Processor " + streamProcessorName + " started."); } public void stopStreamProcessor() { StopStreamProcessorResult stopStreamProcessorResult = rekognitionClient.stopStreamProcessor(new StopStreamProcessorRequest().withName(streamProcessorName)); System.out.println("Stream Processor " + streamProcessorName + " stopped."); } public void deleteStreamProcessor() { DeleteStreamProcessorResult deleteStreamProcessorResult = rekognitionClient .deleteStreamProcessor(new DeleteStreamProcessorRequest().withName(streamProcessorName)); System.out.println("Stream Processor " + streamProcessorName + " deleted."); } public void describeStreamProcessor() { DescribeStreamProcessorResult describeStreamProcessorResult = rekognitionClient .describeStreamProcessor(new DescribeStreamProcessorRequest().withName(streamProcessorName)); //Display various stream processor attributes. System.out.println("Arn - " + describeStreamProcessorResult.getStreamProcessorArn()); System.out.println("Input kinesisVideo stream - " + describeStreamProcessorResult.getInput().getKinesisVideoStream().getArn()); System.out.println("Output kinesisData stream - " + describeStreamProcessorResult.getOutput().getKinesisDataStream().getArn()); System.out.println("RoleArn - " + describeStreamProcessorResult.getRoleArn()); System.out.println( "CollectionId - " + describeStreamProcessorResult.getSettings().getFaceSearch().getCollectionId()); System.out.println("Status - " + describeStreamProcessorResult.getStatus()); System.out.println("Status message - " + describeStreamProcessorResult.getStatusMessage()); System.out.println("Creation timestamp - " + describeStreamProcessorResult.getCreationTimestamp()); System.out.println("Last update timestamp - " + describeStreamProcessorResult.getLastUpdateTimestamp()); } public void listStreamProcessors() { ListStreamProcessorsResult listStreamProcessorsResult = rekognitionClient.listStreamProcessors(new ListStreamProcessorsRequest().withMaxResults(100)); //List all stream processors (and state) returned from Rekognition for (StreamProcessor streamProcessor : listStreamProcessorsResult.getStreamProcessors()) { System.out.println("StreamProcessor name - " + streamProcessor.getName()); System.out.println("Status - " + streamProcessor.getStatus()); } } }

    Transmisión de vídeo en Amazon Rekognition Video

    Para transmitir vídeo en Amazon Rekognition Video, utilice el SDK de Amazon Kinesis Video Streams para crear y utilizar una transmisión de vídeo de Kinesis. LaPutMediaoperación escribe datos de vídeofragmentsen una transmisión de vídeo de Kinesis que consume Amazon Rekognition Video. Cada fragmento de datos de vídeo suele tener una longitud de 2 a 10 segundos y contiene una secuencia autónoma de fotogramas de vídeo. Amazon Rekognition Video admite vídeos cifrados en H.264, que pueden tener tres tipos de fotogramas (I, B y P). Para obtener más información, consulte Inter Frame. El primer fotograma del fragmento debe ser un I-frame. Un I-frame se puede decodificar de forma independientes de cualquier otro fotograma.

    A medida que los datos de vídeo llegan a la transmisión de vídeo de Kinesis, Kinesis Video Streams asigna un número único al fragmento. Para ver un ejemplo, consulte PutMedia API Example.