O blog da AWS

Calculando o tempo em cena de artistas em séries usando Amazon Rekognition

Por Luiza Hagemann, Rafael Ribeiro Martins e Rafael Werneck
 

Na indústria de mídia e entretenimento (M&E), uma estratégia comum para preencher a grade de programação é reexibir programas que tiveram sucesso na primeira edição. Após os eventos da pandemia de COVID-19, muitas emissoras tiveram suas produções interrompidas por conta de protocolos sanitários, e reprises de séries exibidas anteriormente se tornaram uma alternativa.Na indústria de entretenimento, artistas que aparecem em séries e filmes possuem direitos sobre sua imagem, chamados de direitos conexos. Assim como os direitos autorais ( copyright), os direitos conexos devem ser pagos ao artista sempre que a mídia em que ele aparece for reproduzida. Isso pode ser feito levando-se em conta a obra como um todo, ou de forma proporcional à contribuição do artista. Em uma reprise, os episódios geralmente são editados e cenas inteiras podem ser cortadas para caber em horários diferentes. Isso significa que o tempo do elenco na tela será diferente da versão original do programa. A remuneração do elenco deve então ser ajustada de acordo com o tempo real na tela que foi transmitido.

Para lidar com o recálculo dos direitos conexos, uma emissora costumava ter uma equipe inteira dedicada a assistir à reprise da versão e computar manualmente o tempo de tela usando um cronômetro e planilhas, o que é um processo demorado e propenso a erros. A emissora estava procurando maneiras de automatizar parte desse processo, tornando-o mais rápido e confiável.

Neste artigo, apresentamos uma solução que automatiza o processo de identificação e rastreamento do tempo em tela dos artistas que estrelam qualquer vídeo gravado. O artigo também inclui o código de implementação para facilitar a implantação em sua conta AWS.

Visão geral da solução

Fornecemos uma solução econômica e extensível. Ela utiliza o Amazon Rekognition, um serviço de visão computacional totalmente gerenciado que não requer experiência em aprendizado de máquina para ser usado.

A solução divide o vídeo em segmentos e extrai um frame de cada segmento. Em seguida, são feitos o reconhecimento facial e a detecção de pessoas para identificar artistas voltados para a câmera e marcar artistas não identificados que estão de costas para a câmera nesses frames.

Mostramos no diagrama a seguir a arquitetura da solução.

A arquitetura da solução consiste nos seguintes serviços:

  1. Amazon S3 para armazenar os arquivos de vídeo dos episódios e as imagens dos rostos dos artistas.
  2. AWS Lambda para executar o fluxo de gerenciamento das coleções de faces e do processamento de vídeo.
  3. AWS Step Functions para orquestrar o fluxo de trabalho para processamento de vídeos.
  4. Amazon Rekognition para detectar segmentos de vídeo, detectar pessoas, e realizar reconhecimento facial.
  5. Amazon DynamoDB para armazenar metadados e resultados.

A solução é dividida em duas partes principais:

  1. Gerenciamento da coleção de faces
  2. Fluxo de trabalho para processamento de vídeos

Nós encorajamos você a experimentar a solução. Basta baixar o código-fonte do repositório do GitHub e seguir as instruções de implantação no arquivo README.

Gerenciamento da coleção de faces

Para identificar os artistas que aparecem no vídeo, usamos uma coleção de faces do Amazon Rekognition. Depois de criada a coleção com os rostos de todos os artistas da série, é possível fazer associações entre os rostos que estão na coleção e os que aparecem nos frames que são extraídos do vídeo. Para mais informações, consulte o tutorial: Pesquisando rostos em uma coleção.

A coleção de faces deve ser criada antes da execução do fluxo de trabalho para processamento de vídeos. Cada série deve ter sua própria coleção de faces e o usuário deve seguir as recomendações para imagens de entrada de comparação facial ao criar uma coleção. Recomendamos adicionar pelo menos cinco imagens: uma imagem frontal, uma imagem de perfil (90 graus) de cada lado, e uma imagem em meio-perfil (45 graus) de cada lado. Se o personagem utilizar alguma caracterização com maquiagem ou passar por mudanças drásticas na aparência, elas também podem ser adicionadas à coleção de faces para melhorar a precisão do reconhecimento.

Utilizamos o Amazon S3 e o AWS Lambda para gerenciar a coleção de faces. Sempre que uma nova imagem é gravada no bucket do Amazon S3, um acionador do Amazon S3 invoca uma função Lambda que adiciona a imagem à coleção. Na primeira vez que uma imagem é gravada para uma série, uma nova coleção é criada. Se uma imagem for removida, a função a removerá da coleção. Para mais informações, consulte o tutorial Usar um acionador do Amazon S3 para invocar uma função Lambda e Adicionar faces a uma coleção.

Atualmente, o Amazon Rekognition requere o uso da propriedade ExternalImageIdpara relacionar várias imagens à mesma entidade – que, neste caso, é o artista em um determinado papel. Armazenamos essa propriedade, junto com outros metadados, em uma tabela do DynamoDB através da função Lambda.

Nesta solução aproveitamos a estrutura de pastas do Amazon S3 para armazenar informações sobre a combinação entre artista e o personagem. Caso desejado, também é possível ajustar a solução para que possa se integrar com APIs ou coleções externas já existentes. Neste caso, basta apontar o ExternalImageId para um identificador da sua API.

Para adicionar imagens à coleção de faces, nós as colocamos dentro da pasta de faces em subpastas separadas, uma para cada artista. As subpastas são nomeadas seguindo o padrão Artist_Name-Role_Name. O nome do artista e o nome do papel (personagem) são separados por um traço (-). Os espaços entre o nome e o sobrenome são representados por um sublinhado (_). Os nomes não devem incluir nenhum caractere especial, e devem seguir as convenções de nomenclatura das propriedades do Amazon Rekognition. Veja a seguir um exemplo

Katherine_Franco-Kathy

Depois que todas as fotos forem carregadas na coleção de faces, o fluxo de trabalho para processamento de vídeos poderá ser iniciado.

Fluxo de trabalho para processamento de vídeos

Quando você fizer o upload de um vídeo para a pasta episodes no bucket do Amazon S3, um acionador do Amazon S3 disparará o fluxo de trabalho para processamento de vídeos.

No fluxo de trabalho para processamento de vídeos, primeiro realizamos a segmentação do vídeo. Em seguida, realizamos o reconhecimento facial e a detecção de pessoas para identificar artistas voltados para a câmera, bem como marcar artistas de costas para a câmera. Os resultados finais são armazenados em uma tabela do DynamoDB.

Utilizamos o AWS Step Functions para orquestrar o fluxo de trabalho para processamento de vídeos. O AWS Step Functions é um serviço de orquestração sem servidor que permite definir um fluxo de trabalho de aplicações como uma série de etapas orientadas por eventos. Cada etapa do fluxo de trabalho é chamada de estado. Nesta solução, implementamos os estados do fluxo de trabalho utilizando funções Lambda, com lógica escrita em Python. Abaixo, mostramos uma captura de tela de uma execução de fluxo tirada do console da AWS.

O fluxo é dividido em duas partes principais:

  1. Extração de frames
  2. Processamento de frames

Extração de frames

Durante a etapa Extract Frames Rekognition, segmentamos o vídeo usando o recurso de detecção de tomada do Amazon Rekognition. Consideramos uma tomada como uma série de fotos consecutivas inter-relacionadas extraídas de uma única câmera, representando uma ação contínua no tempo e no espaço. Para mais informações sobre essa funcionalidade, consulte Detecção de tomada.

O Amazon Rekognition permite que o usuário especifique o nível de confiança com o qual as tomadas são detectadas. Um maior nível de confiança gera menos segmentos. Recomendamos usar níveis de confiança maiores que 85%, pois valores menores não entregam uma melhora significativa no desempenho da análise e geram uma grande quantidade de segmentos que são desnecessários para este caso de uso.

A função Lambda usa as operações assíncronas das APIs StartSegmentDetection e GetSegmentDetection para dar início ao processo de segmentação do vídeo e obter os resultados. A detecção de segmentos aceita vídeos armazenados em um bucket do Amazon S3 e retorna um objeto JSON. Veja mais detalhes em Usando a API de segmento do Amazon Rekognition.

O JSON retornado pelo processo de segmentação de vídeo contém o timestamp de início do segmento em relação ao tempo do vídeo. A função Lambda usa a OpenCV, uma biblioteca de visão computacional e processamento de imagens, para extrair os frames (imagens) nesses timestamps, gerando um frame por segmento. Os frames extraídos são armazenados no Amazon S3.

Na etapa Record Job Id, gravamos na tabela do DynamoDB o identificador único do fluxo, o nome e caminho do arquivo de vídeo, e outras informações necessárias para o pós-processamento.

Processamento de frames

Na última parte do fluxo, realizamos o reconhecimento facial e a detecção de pessoas. Cada um dos frames extraídos na etapa anterior é processado através do Amazon Rekognition Image, detectando rostos e pessoas e verificando a correspondência dos rostos encontrados na coleção de faces.

Para cada frame, realizamos uma chamada ao Amazon Rekognition Image para detectar faces e outros rótulos, e salvamos o resultado da análise em uma tabela do DynamoDB. Os frames são processados em paralelo usando o modo Map de processamento de estado do AWS Step Functions, que permite até 40 execuções paralelas. Essa etapa só é concluída com sucesso se cada frame for processado corretamente.

O processamento de um frame inicia com a chamada da API DetectFaces para detectar se existem rostos presentes na imagem. Para verificar a correspondência entre um rosto na imagem e rostos na coleção de faces, é necessário que a imagem analisada contenha no máximo um rosto – caso contrário, o Amazon Rekognition sempre selecionará a maior face na imagem. Como vários artistas podem estar presente em uma mesma cena virados de frente para a câmera, o mais adequado a se fazer é detectar todos os rostos na imagem e fornecer ao Amazon Rekognition uma versão recortada contendo somente a face que está sendo enviada para análise. Para mais detalhes, consulte Detectar e analisar faces.

A API DetectFaces retornará uma lista de retângulos que determinam onde o Amazon Rekognition identificou um rosto. Para cada uma das faces detectadas, recortamos e chamamos a operação da API SearchFacesByImage para identificar se o rosto na imagem recortada corresponde a uma face na coleção de faces. Se sim, armazenamos na tabela do DynamoDB o nome e o papel do artista identificado junto com o retângulo fornecido pelo Amazon Rekognition.

A solução também identifica formas genéricas de pessoas presentes nas imagens, já que em um frame podemos ter alguém de costas para a câmera — e, caso isso aconteça, a presença desse artista ainda deve ser considerada para fins de contagem do tempo em cena. Para detectar pessoas na imagem, usamos a API DetectLabels, que identifica um conjunto definido de categorias em uma imagem. As categorias variam de carros a alimentos e bebidas entre outros. Filtramos a resposta para obter apenas as categorias do tipo Person.

Por último, verificamos se para todas as pessoas detectadas na imagem também foi detectada uma face. Caso haja uma pessoa cuja face não foi identificada, rotulamos a análise como “pessoa não identificada”, o que facilita o pós-processamento da análise.

Consumindo os resultados do fluxo de trabalho para processamento de vídeos

Depois de executado o fluxo de trabalho para processamento de vídeos, todos os registros de artistas identificados e não identificados no vídeo ficam disponíveis em uma tabela do DynamoDB. Cada registro contém o timestamp de início e fim de cada tomada e os delimitadores do retângulo que determina a posição onde a pessoa foi identificada.

Esses resultados disponíveis no DynamoDB podem então ser usados para calcular o tempo total de tela de cada artista no vídeo: basta somar a duração de cada tomada em que o artista aparece. Também é possível usar os resultados para criar uma aplicação que permita uma auditoria e ajuste dos resultados por algum operador. A verificação desses resultados é especialmente importante por conta das pessoas que estão de costas para a câmera e, por isso, não puderam ser identificadas automaticamente.

Para exemplificar como seria esta aplicação, executamos o fluxo de trabalho para processamento de vídeos para Forgive Me Not, um curta-metragem escrito, dirigido e editado por Vu Nguyen e produzido pela Blue Light Pictures. Você pode encontrar o filme original no Vimeo, licenciado sob a licença Creative Commons: By Attribution 3.0. Nenhuma alteração foi feita no conteúdo.

A seguir mostramos uma captura de tela de uma aplicação web que desenvolvemos para um cliente da AWS com os resultados do processamento do curta Forgive Me Not.

Como podemos ver na imagem acima, é possível usar os retângulos e os timestamps dos frames para exibir os resultados. No segmento exibido (oitavo, começando em 0:41), o ator James Burleson foi detectado com sucesso, enquanto a outra artista, que não está de frente para a câmera, não foi. Com a aplicação, um operador pode identifica-la manualmente, editando e aprimorando os resultados.

Se você quiser desenvolver uma aplicação semelhante à da imagem, recomendamos a criação de uma REST API no Amazon API Gateway, um serviço totalmente gerenciado que facilita aos desenvolvedores criar, publicar, manter, monitorar e proteger APIs em qualquer escala. Através da API, pode-se buscar e disponibilizar os dados guardados no DynamoDB para consulta e edição. Uma aplicação web Javascript poderia, então, consultar essa API e exibir os resultados.

Computando tempo em cena e comparando com análise manual

Para entender como nossa solução se compara a uma abordagem totalmente manual, tanto no tempo de análise quanto nos valores obtidos, realizamos duas análises para o curta Forgive Me Not: uma análise totalmente manual, registrando todos os timestamps em que cada artista apareceu e saiu da tela; e uma análise assistida, na qual executamos nosso processamento de vídeo e desempenhamos a função de operador, revisando tags Unknown com o nome do artista correspondente. Também deve ser observado que, se um artista aparecer em uma cena e não tiver sido detectado no momento em que o frame for extraído, ele pode ser adicionado manualmente e ter seu tempo computado no resultado final.

Papel Artista Manual (seg) Assistido (seg)
Kathy Katherine Franco 317 371
Steve James Burleson 270 295
Tommy Dillon Fontana 40 24
Cliente Josh Schewerin 25 28
Jannette Jennifer Pilarcik 58 52
Advogada Lindsay Norman 133 99
Policial Freddy Garcia 75 75
Tempo do operador 1h30 12m

Embora o resultado assistido seja diferente em alguns casos, a abordagem manual é muito propensa a erros e consome muito tempo. Acreditamos que essa ferramenta acelera a análise e produz resultados bastante semelhantes. É também possível adicionar outros recursos que estão fora do escopo da solução como, por exemplo, reconhecimento de voz, para aprimorar ainda mais as análises realizadas.

Conclusão

Neste artigo, explicamos o passo-a-passo da criação de uma arquitetura completa que utiliza serviços de Inteligência Artificial totalmente gerenciados para computar o tempo que um artista passa em cena em um vídeo ou em um conjunto de vídeos. Os principais serviços usados nessa solução foram o Amazon Rekognition e outros componentes serverless, como AWS Lambda, AWS Step Functions, e Amazon DynamoDB.

As empresas de mídia podem utilizar essa solução para automatizar o processo de cálculo de Direitos Conexos durante a reprise de um programa de TV. Essa arquitetura é passível de extensões e melhorias.

A solução inicialmente foi criada para atender a uma demanda crescente da indústria de mídia e entretenimento na região latino-americana. Isso foi realizado como um trabalho da equipe de Prototyping and Cloud Engineering da AWS na América Latina.

Para o código-fonte, consulte o repositório do GitHub. Ele inclui as instruções completas de configuração e implantação.

 


Sobre os autores

Luiza Hagemann é uma Arquiteta de Prototipação no time de Prototyping and Cloud Engineering da AWS Brasil. Ela já trabalhou na indústria de internet como Engenheira de Software, mantendo aplicações de alta escala e disponibilidade.

 

 

 

 

Rafael Ribeiro Martins é um Gerente Técnico de Projetos Sênior na AWS Brasil. Ele ajuda clientes a descobrir a arte do possível na AWS, trabalhando em conjunto em engajamentos de prototipação e inovação. Com mais de 10 anos de experiência em gerenciamento técnico de projetos, ele atualmente foca em projetos relacionados a tecnologias emergentes.

 

 

 

 

Rafael Werneck é um Arquiteto de Prototipação Sênior no time de Prototyping and Cloud Engineering. Anteriormente, trabalhou como Software Development Engineer na Amazon.com.br e no Amazon RDS Performance Insights.