Lendo os resultados da análise de streaming de vídeo - Amazon Rekognition

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

Lendo os resultados da análise de streaming de vídeo

Você pode usar a biblioteca de cliente do Amazon Kinesis Data Streams para consumir os resultados da análise que são enviados para o stream de saída do Amazon Kinesis Data Streams. Para obter mais informações, consulte Ler dados de um Kinesis Data Stream. O Amazon Rekognition Video coloca um registro de quadro JSON para cada quadro analisado no stream de saída do Kinesis. O Amazon Rekognition Video não analisa cada quadro que é passado para ele pelo stream de vídeo do Kinesis.

Um registro de quadro enviado para um fluxo de dados do Kinesis contém informações sobre em qual fragmento de stream de vídeo do Kinesis o quadro está, onde o quadro está no fragmento e faces que são reconhecidas no quadro. Ele também inclui informações de status para o processador de fluxo. Para ter mais informações, consulte Referência: Registro de reconhecimento facial do Kinesis.

A biblioteca do Amazon Kinesis Video Streams Parser contém exemplos de testes que consomem os resultados do Amazon Rekognition Video e os integram ao stream de vídeo original do Kinesis. Para ter mais informações, consulte Exibindo resultados do Rekognition com o Kinesis Video Streams localmente.

O Amazon Rekognition Video transmite informações de análise do Amazon Rekognition Video para o fluxo de dados do Kinesis. Veja a seguir um exemplo de JSON para um único registro.

{ "InputInformation": { "KinesisVideo": { "StreamArn": "arn:aws:kinesisvideo:us-west-2:nnnnnnnnnnnn:stream/stream-name", "FragmentNumber": "91343852333289682796718532614445757584843717598", "ServerTimestamp": 1510552593.455, "ProducerTimestamp": 1510552593.193, "FrameOffsetInSeconds": 2 } }, "StreamProcessorInformation": { "Status": "RUNNING" }, "FaceSearchResponse": [ { "DetectedFace": { "BoundingBox": { "Height": 0.075, "Width": 0.05625, "Left": 0.428125, "Top": 0.40833333 }, "Confidence": 99.975174, "Landmarks": [ { "X": 0.4452057, "Y": 0.4395594, "Type": "eyeLeft" }, { "X": 0.46340984, "Y": 0.43744427, "Type": "eyeRight" }, { "X": 0.45960626, "Y": 0.4526856, "Type": "nose" }, { "X": 0.44958648, "Y": 0.4696949, "Type": "mouthLeft" }, { "X": 0.46409217, "Y": 0.46704912, "Type": "mouthRight" } ], "Pose": { "Pitch": 2.9691637, "Roll": -6.8904796, "Yaw": 23.84388 }, "Quality": { "Brightness": 40.592964, "Sharpness": 96.09616 } }, "MatchedFaces": [ { "Similarity": 88.863960, "Face": { "BoundingBox": { "Height": 0.557692, "Width": 0.749838, "Left": 0.103426, "Top": 0.206731 }, "FaceId": "ed1b560f-d6af-5158-989a-ff586c931545", "Confidence": 99.999201, "ImageId": "70e09693-2114-57e1-807c-50b6d61fa4dc", "ExternalImageId": "matchedImage.jpeg" } } ] } ] }

No exemplo de JSON, observe:

  • InputInformation— Informações sobre o stream de vídeo do Kinesis usado para transmitir vídeo para o Amazon Rekognition Video. Para ter mais informações, consulte InputInformation.

  • StreamProcessorInformation— Informações de status do processador de streaming de vídeo Amazon Rekognition Video. O único valor possível para o campo Status é RUNNING. Para ter mais informações, consulte StreamProcessorInformation.

  • FaceSearchResponse— Contém informações sobre rostos no streaming de vídeo que correspondem aos rostos na coleção de entrada. FaceSearchResponsecontém um DetectedFace objeto, que é uma face que foi detectada no quadro de vídeo analisado. Para cada face detectada, a matriz MatchedFaces contém uma matriz de objetos de faces correspondentes (MatchedFace) encontradas na coleção de entrada, juntamente com uma pontuação de semelhança.

Mapeando o stream de vídeo do Kinesis para o fluxo de dados do Kinesis

Talvez você queira mapear os quadros do stream de vídeo do Kinesis para os quadros analisados que são enviados para o fluxo de dados do Kinesis. Por exemplo, durante a exibição de um streaming de vídeo, você pode querer exibir caixas ao redor das faces de pessoas reconhecidas. As coordenadas da caixa delimitadora são enviadas como parte do Registro de Reconhecimento Facial do Kinesis para o fluxo de dados do Kinesis. Para exibir a caixa delimitadora corretamente, você precisa mapear as informações de tempo enviadas com o Kinesis Face Recognition Record com os quadros correspondentes no stream de vídeo de origem do Kinesis.

A técnica usada para mapear o stream de vídeo do Kinesis para o fluxo de dados do Kinesis depende se você está transmitindo mídia ao vivo (como um vídeo ao vivo) ou se você está transmitindo mídia arquivada (como um vídeo armazenado).

Mapeamento quando você está transmitindo mídia ao vivo

Para mapear um quadro de stream de vídeo do Kinesis para um quadro de fluxo de dados do Kinesis
  1. Defina o parâmetro FragmentTimeCodeType de entrada da PutMediaoperação comoRELATIVE.

  2. Chame PutMedia para entregar mídia ao vivo no stream de vídeo do Kinesis.

  3. Ao receber um registro de reconhecimento facial do Kinesis do fluxo de dados do Kinesis, armazene os valores de ProducerTimestamp e FrameOffsetInSeconds do campo KinesisVideo.

  4. Calcule o carimbo de data/hora que corresponde ao quadro do stream de vídeo do Kinesis adicionando os valores de FrameOffsetInSeconds e do campo ProducerTimestamp juntos.

Mapeando quando você está transmitindo mídia arquivada

Para mapear um quadro de stream de vídeo do Kinesis para um quadro de fluxo de dados do Kinesis
  1. Ligue PutMediapara entregar mídia arquivada ao stream de vídeo do Kinesis.

  2. Quando você receber um objeto Acknowledgement da resposta da operação PutMedia, armazene o valor do campo FragmentNumber do campo Payload (Carga). FragmentNumber é o número do fragmento para o cluster do MKV.

  3. Ao receber um Kinesis Face Recognition Record do fluxo de dados do Kinesis, armazene o valor do campo FrameOffsetInSeconds no campo KinesisVideo.

  4. Calcule o mapeamento usando os valores FragmentNumber e FrameOffsetInSeconds que você armazenou nas etapas 2 e 3. FrameOffsetInSeconds é o deslocamento no fragmento com o FragmentNumber específico que é enviado para o fluxo de dados do Amazon Kinesis. Para obter mais informações sobre como obter os quadros de vídeo para um determinado número de fragmento, consulte Mídia arquivada do Amazon Kinesis Video Streams.