O blog da AWS

Reconhecimento Facial através de Streaming de Vídeo utilizando RaspberryPi

Por Henrique Souza, Arquiteto de Soluções na AWS

 

Com a evolução de tecnologias de smart cities, ou cidades inteligentes, sistemas de monitoramento de ambiente e vigilância com casos de uso que requerem reconhecimento de pessoas em tempo real, através do uso de câmeras de segurança, tornam-se mais comum e utilizados no dia a dia.

Neste blog post veremos uma solução que integra a aplicação de um modelo de AI/ML para reconhecimento facial em streaming de vídeo que pode ser utilizada em diversos casos de uso, como: reconhecimento de pessoas autorizadas/não-autorizadas em um determinando ambiente, monitoramento de lojas físicas que não possuem funcionários ou caixas, auxílio na área da segurança para reconhecimento de pessoas em locais de grande circulação, ou outros tipos de casos de uso onde o reconhecimento de face é necessário.

 

Visão geral da solução

O diagrama a seguir é uma visão de alto nível da arquitetura da solução inteiramente Serverless, ou seja, sem necessidade de gerenciamento da infraestrutura. O qual iremos monitorar um ambiente com uma câmera de segurança acoplada a um RaspberryPi e o fluxo de frames da câmera estarão sendo enviados para a AWS, realizando todo o pipeline para reconhecimento facial e notificação.

  1. Storage:Componente responsável por conter o bucket referente ao repositório de coleção de faces (dataset com um conjunto de fotos de rostos) a serem reconhecidos (Amazon S3 – Bucket 1) e o Bucket referente ao armazenamento de metadados do Rekognition para futuras auditorias (Amazon S3 – Bucket 2).
  2. Stream Pipeline: Componente responsável pela análise de rostos por frame recebido pelo stream de vídeo através da câmera de segurança e análise dos outputs do Rekognition, para caso tenha algum rosto reconhecido acionar a pipeline de notificação (AWS Lambda – função 1).
  3. Notification Pipeline:Componente responsável pelo processamento de mensagens e acesso a API de algum app de mensageria para notificar o rosto reconhecido (AWS Lambda – função 2).

 

Ao longo deste blog post veremos como construir uma arquitetura serverless para esta solução, mas primeiramente vamos ver quais serão os serviços utilizados:

  1. Amazon Kinesis Video – Serviço de streaming seguro para dispositivos conectados na AWS. Pode ser utilizado para machine learning, analytics, reprodução e outros processamentos, é escalável contando com tudo que for necessário para consumir dados de streaming de vídeo de milhões de dispositivos. O serviço oferece capacidade de armazenamento, segurança (criptografa dados), indexação e acesso por APIs de fáceis manuseio.
  2. Amazon Rekognition – Serviço de análise de vídeo baseado em aprendizado profundo que rastreia pessoas, detecta atividades e reconhece objetos, celebridades e conteúdo impróprio. O Amazon Rekognition Video pode realizar reconhecimento facial em vídeo ao vivo do Amazon Kinesis Video Steams através de um stream
  3. Amazon Kinesis Data Stream – Serviço que facilita o gerenciamento para coleta, processamento e armazenamento de fluxos de dados em qualquer escala. O Data Stream será utilizado para receber os outputs constantes que serão enviados pelo Amazon Rekognition.
  4. AWS Lambda – Serviço de computação serverless orientado a eventos que permitem executar código para praticamente qualquer tipo de aplicação ou serviço de backend, sem provisionar ou gerenciar servidores. Será utilizado para analisar os outputs de reconhecimento facial realizados no stream de vídeo, e assim tomar ações para acionar o pipeline de notificação e armazenar metadados.
  5. Amazon S3 – serviço de armazenamento de objetos que será utilizado para armazenar o dataset com a coleção de faces que serão reconhecidas pelo Amazon Rekognition e um outro bucket para armazenar os metadados e realizar possíveis auditorias.
  6. Amazon SQS– Serviço de filas que terá a responsabilidade de receber e entregar as mensagens para notificação, a cada mensagem recebida, será acionada uma outra AWS Lambda – responsável por acessar a API de um app de mensagerias e publicar a mensagem contida na fila – finalizado este processo, Amazon SQS deleta esta mensagem e processa a próxima.

 

RaspberryPi:

Nesta etapa, iremos configurar seu Raspberry Pi.

Caso você já tenha um cartão microSD com Raspbian, Debian ou Ubuntu OS, instalado, você pode começar por “Instalando as bibliotecas”.

Gravando o sistema operacional no cartão microsSD:

Neste blog post, usaremos o Raspberry Pi OS.

  1. Baixe a imagem do sistema operacional e grave no cartão microSD;
  2. Baixe o Raspberry Pi OS com desktop no site do Raspberry Pi; e
  3. Use um software de gravação como o balenaEtcher para gravar a imagem do sistema operacional baixada em um cartão microSD.

 

Instalando as bibliotecas

Após a inicialização do Raspberry Pi, você pode executar um terminal no Raspberry Pi ou conectar-se via SSH. Todos os comandos abaixo devem ser executados no Raspberry Pi.

Certifique-se de que o terminal exiba algo como pi@raspberrypi ao executá-lo.

Execute os seguintes comandos para atualizar a lista de pacotes e instalar as bibliotecas necessárias para construir o SDK:

1 sudo apt update

2 sudo apt install -y automake build-essential cmake git pkg-config libgstreamer-plugins-base1.0-dev gstreamer1.0-omx-rpi

Se você usa Ubuntu ou Debian em vez de Raspberry Pi OS, remova gstreamer1.0-omx-rpi. Se você usa macOS, instale cmake, gstreamer e gst-plugins-base usando o Homebrew.

 

Configurando Amazon Kinesis Video Streams Producer SDK C++ (Raspberry Pi)

Nesta etapa, você instalará Amazon Kinesis Video Streams Producer SDK C++ em seu Raspberry Pi.

Baixando o SDK

Execute os seguintes comandos no terminal Raspberry Pi:

1 cd

2 git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git

Se você esqueceu de adicionar — recursive ao comando, execute o seguinte comando:

1 cd ~/amazon-kinesis-video-streams-producer-sdk-cpp

2 git submodule update —init

 

Construindo o SDK

O comando a seguir fará download e criará as bibliotecas dependentes. Este comando levará cerca de 10 a 20 minutos para ser concluído:

1 mkdir -p ~/amazon-kinesis-video-streams-producer-sdk-cpp/build

2 cd ~/amazon-kinesis-video-streams-producer-sdk-cpp/build

3 cmake -DBUILD_GSTREAMER_PLUGIN=ON ..

 

Em seguida, execute o seguinte comando para criar o SDK, que levará cerca de 5 a 10 minutos:

1 make

Agora que você configurou o Amazon Kinesis Video Streams Producer SDK C++, vamos implantar o CDK Python para construir toda infraestrutura na AWS.

Building

Acesse o seguinte repositório no GitHub e siga as instruções contidas no ReadMe.md

 

Testando

Com toda infraestrutura construída, vamos testar iniciando um stream da câmera RTSP associada ao seu RaspberryPi, executando o aplicativo de amostra GStreamer RTSP.

O kvs_gstreamer_sample oferece suporte ao envio de vídeo de um URL RTSP (câmera IP). Você pode encontrar o URL RTSP no manual da câmera IP ou na página do produto do fabricante. Altere seu diretório de trabalho atual para o diretório raiz do clone feito na seção Baixando o SDK e acesse o diretório build. Então rode o seguinte comando para iniciar o streaming:

AWS_ACCESS_KEY_ID=YourAccessKeyId AWS_SECRET_ACCESS_KEY=YourSecretAccessKey ./kvs_gstreamer_sample MyVideoStream

Resultado

 

Conclusão

Sem gerenciar o provisionamento de servidores, configuramos uma solução que promove o reconhecimento facial através de um feed de vídeo integrado a um sistema de notificação. Essa solução além de atender diversos casos de uso, como foi citado, simplifica o gerenciamento da solução geral, pois os modelos de reconhecimento facial, já implementados do Amazon Rekognition, são utilizados.

Podendo validar a performance com as análises dos arquivos JSON depositados no bucket de auditoria no Amazon S3, referente as análises feitas pelo Amazon Rekognition. Além de atender requisitos de segurança na comunicação entre as câmeras e o Amazon Kinesis Video, pois ao utilizarmos o SDK, facilitou a criação de um aplicativo no dispositivo que se conecte de forma segura e de maneira confiável ao Kinesis Video Streams. Este cuida de todas as tarefas subjacentes que são necessárias para empacotar os quadros e os fragmentos gerados pelo pipeline de mídia do dispositivo. Também é gerada uma criptografia no lado do servidor, de maneira automática, que está sempre habilitada nos streams de vídeo do Kinesis.

Dessa forma, conclui-se, foi construído uma arquitetura que atende os pilares de Excelência Operacional, Sustentabilidade, Eficiência de Performance e Segurança do AWS Well Architected Framework por se tratar de uma arquitetura serverless, com processo de auditoria do modelo, e confidencialidade e integridade de dados através do uso de criptografia e comunicação segura. Assim, satisfazendo diversos casos de uso que necessitam de reconhecimento facial em tempo real para diversas soluções.

 

Referências:

https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/raspberry-pi.md

https://aws.amazon.com/blogs/machine-learning/easily-perform-facial-analysis-on-live-feeds-by-creating-a-serverless-video-analytics-environment-with-amazon-rekognition-video-and-amazon-kinesis-video-streams/

https://catalog.us-east-1.prod.workshops.aws/kinesis-video-streams/en-US/lab-1

 

 


Sobre o Autor:

Henrique Souza é um Arquiteto de Soluções em Digital Native Business na AWS. Apoiando clientes de todas as regiões do Brasil em suas jornadas de inovação e transformação digital na nuvem.

 

 

 

 

Revisores:

Felipe Brito é arquiteto de soluções na AWS e atua guiando clientes nas melhores práticas de arquitetura na nuvem. Possui experiência com projetos de desenvolvimento de software e Analytics.

 

 

 

 

Ibrahim Cesar é Arquiteto de Soluções na AWS, para o segmento de Enterprise. Builder, atua a mais de 15 anos no mercado de tecnologia, tendo experiência desde o desenvolvimento até a gestão. É entusiasta do Well-Architected Framework como ferramenta para avaliação e melhoria dos projetos na nuvem. Fora do trabalho, é um leitor voraz e participa ativamente de iniciativas open-source e projetos de mentoria.