Face detection com OpenCV

Algumas pessoas me perguntaram porque o número de posts diminuiu, apesar de ter vários patrocinadores. Bem, material não falta para escrever artigos, mas de fato estou trabalhando intensamente em um projeto que envolve muita, mas muita visão computacional e ao término incluirá inteligência artificial. Isso tem me tomado em média 15 horas por dias e para justificar isso, escrevo hoje esse primeiro artigo introdutório ao OpenCV. Não que eu já saiba alguma coisa, mas como estou iniciando, é mais fácil repassar com simplicidade como introduzir-se nesse mundo, seja em x86, ARM, MIPS etc.

Visão Computacional





Visão computacional é a ciência das máquinas que enxergam. Isso não é exatamente como um olho, porque o olho apenas recebe a imagem e o cérebro processa, depois toma (ou não) uma ação. A visão computacional comporta o funcionamento do olho e a função cerebral de identificação ou reconhecimento. Isso será explicado mais adiante.

A visão computacional é empregada na área medicinal, em jogos, em drones, câmeras de segurança e muito mais. Apesar de não ser um processamento trivial, ela tem sido intensamente utilizada em sistemas embarcados (como nas próprias câmeras de monitoramento) e o Raspberry Pi é um excelente ponto de início para você que é da Internet das coisas.

Eu utilizarei ela intensamente no Onion Omega, uma board MIPS espetacular com um conceito de empilhamento interessantíssimo. Já escrevi a respeito dessa belezinha aqui, aqui e aqui.

Já a segunda versão dessa adorável board está no kickstarter e vai estourar em 2 semanas mais. Olhem o video no site do projeto e veja que fantástica ela é.

Instalação

Não basta o OpenCV instalado e também não há apenas uma maneira de atingir um objetivo. Por conta disso, sendo eu iniciante em OpenCV, posso não dar as melhores dicas a respeito, mas conforme eu somar expertise, escrevo novos tutoriais.

x86

Se você quiser brincar com sua webcam no notebook/desktop, a primeira tarefa é instalar um Linux (porque não escrevo tutoriais para Windows). Depois, instale o pacote python-opencv:

ARM

No Raspberry Pi, o procedimento deverá ser um pouquinho diferente:

Em ambas as plataformas o import é o mesmo. Vou utilizar os exemplos em Python, mas a biblioteca tem o mesmo suporte em C++, inclusive as mesmas chamadas.

Abrir a origem de leitura





Você pode ler uma imagem, um video, um dispositivo de video (webcam) ou uma streaming IP. Essa informação é simples, mas importante ao meu ver, pois no primeiro momento precisei pegar streaming IP e não se encontra exemplos diretos com a mesma facilidade que leitura da webcam.

Para ler de uma imagem é bastante simples:

Até aqui você não fez nada além de carregar a imagem. Para video:

Para abrir webcam, você deve dizer o número do dispositivo de video desse modo:

E para abrir uma streaming de uma câmera IP:

A URL varia conforme a câmera, basta pegar isso no manual ou, se estiver utilizando uma câmera já implementada, olhe na configuração do software de gerenciamento.

Classifiers

Os classificadores são treinamentos armazenados em xml. O OpenCV já vem com alguns classifiers para você inciar a brincadeira. Como nesse artigo vamos fazer a detecção de face, recomendo que pegue esse classificador. Aliás, recomendo que faça um clone do git do OpenCV. No código completo você notará como utilizá-lo.

Você pode criar seus próprios treinamentos para OpenCV e isso mostrarei em outro artigo.

Learning machine





A máquina de aprendizado é como você faz o treinamento para que o OpenCV reaja a um evento como por exemplo, detectar uma mão. Você precisa de uma quantidade meio grande de imagens contendo mãos. Essas imagens são chamadas de “positivos”. Do mesmo modo, você precisará de uma quantidade grande de imagens que não contenham o objeto alvo (a mão). Isso é chamado de “negativo”. A partir daí tem uma série de procedimentos que abordarei em outro artigo.

ROI – Region Of Interest

Se você estiver apenas visualizando a imagem, aplicando histograma, convertendo pra escala de cinza etc, isso não é visão computacional, isso é manipulação de imagem. A região de interesse já é um principio à utilização de visão computacional, sendo a área que você deseja que seja observada (quando limitando a análise do OpenCV a uma área específica) ou a área encontrada (por exemplo) na detecção de face.

Código completo

Agora sem mais delongas, veja como é simples fazer um face detection com OpenCV.

Para sair, simplesmente aperte a letra ‘q’.

O resultado poderia ser melhor, mas só tenho essa cara mesmo:

Face detection
Face detection

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Agregador de Links - Loucuras da Net

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Face detection com OpenCV

Comentários estão encerrados.