visao computacional

Capturar região de interesse com OpenCV

Já vimos em outros artigos como fazer o reconhecimento facial cadastrando pessoas conhecidas. Com apenas isso, já são inúmeras as aplicações. Por exemplo, o não reconhecimento de uma pessoa em um ambiente residencial pode ser considerado uma detecção de anomalia; pode se tratar de um furto (quando sozinho) ou um roubo (se acompanhado de um morador do imóvel). Mas e se for uma visita familiar ou de amigos? Para fazer um cadastro assim, podemos adicionar uma face ao capturar região de interesse com OpenCV, de diversas formas.

Sugiro primeiramente a leitura dos artigos relacionados a reconhecimento facial. Os artigos mais flexíveis para essa implementação são:

Tem um artigo com OpenFace nesse link, mas para adicionar uma nova pessoa não é tão flexível.

Capturar região de interesse com OpenCV

região de interesse

Esse é o primeiro passo. Essa seleção pode ser feita através de um vídeo gravado ou uma streaming, bastando implementar uma pequena porção de código:

O nome da imagem a ser salva pode ser baseada em um índice de uma base de suspeitos (para ambientes públicos onde, nesse caso, não pode ser tratado como anomaly detection porque pessoas estranhas em ambiente público é um padrão), ou uma base de exceções, para cadastro de familiares. Em ambos os casos, será necessário implementar um pouco de código (mais comum, não tendo relação com CV ou IA) para salvar a imagem em um diretório local, então treiná-lo. Quando eu postar um projeto completo, demonstro essa parte.

No exemplo, utilizei uma imagem disponível localmente, mas poderia vir de uma câmera IP, webcam ou de uma análise de vídeo de segurança, no caso de cadastro de suspeitos em ambientes públicos:

Não reparem o código de fundo, estou fazendo um OCR para RG e CNH, talvez eu faça uma demonstração em breve.

Após selecionar a região de interesse, será necessário pressionar Enter. O selectROI está disponível na API de tracking do OpenCV, cuja documentação se encontra nesse link.

Tem um tutorial bacana do PyImageSearch que mostra outra maneira de fazer a captura da região de interesse, mas o retângulo só será visível ao final da seleção. Posteriormente, utiliza-se a tecla ‘C’ do teclado para fazer a captura.

O código fica um pouco mais complicado, necessitando de diversas alterações para flexibilizar a implementação em uma situação como a proposta nesse artigo. Apenas para ilustrar (e caso queira experimentar também):

Esse segundo código utilizei em um projeto que atuei por 6 meses e foi um dos componentes que integrou um sistema com mais de 20 mil linhas de código Python, apenas na parte de OpenCVn (tive que escrever sozinho, infelizmente). Acredite, em uma implementação adequada é muito útil, vou dispondo por partes até integrar um sistema completo.

Até a próxima!