Inteligencia Artificial

Reconhecimento facial com dlib

Nesse artigo mostrei como utilizar DNN para fazer face detection com OpenCV. Mas que  tal um reconhecimento facial com dlib usando um model com 99.38% de acurácia agora? Essa é molezinha! Trata-se de um projeto entregue praticamente pronto, só precisamos compilar a dlib, que é a única que tem um macete para quem tem CUDA instalado na máquina.

Essa semana tenho andado bastante empolgado com meus estudos de redes neurais e, não por acaso, acabei me deparando com um projeto fantástico, passível de adaptações. Trata-se do face_recognition, um excelente projeto, cujo repositório do projeto está nesse link.

Esse tutorial é para utilizar com Python3 e estou testando e escrevendo a partir de um Ubuntu 18.04.

Reconhecimento facial com dlib

A dlib é a grande sacada aqui. Claro que tem todo o projeto por trás, mas ela é o motor da coisa toda. Para compilá-la, precisamos cumprir com alguns pré-requisitos, mas tudo se resume ao procedimento abaixo:

Se a compilação ocorrer sem problemas, já deve ser possível importar a dlib. Teste assim, se não retornar erro, está ok:

Se teve algum problema, meus mais sinceros sentimentos, mas dê um jeito aí porque você não pode ficar sem esse brinquedo! Por fim, instale o pacote pip para Python3 e já instale o programa para reconhecimento facial com dlib:

Pronto, a instalação está finalizada. Agora vamos ver como usar os programas e alguns dos recursos da biblioteca.

Face detection por linha de comando

Muitas pessoas ainda fazem confusão em relação a isso. Face detection simplesmente detecta um rosto, mas não sabe quem é.  Esse recurso é útil para economizar processamento (ficará clara a razão no próximo artigo), pois detectar uma face requer bem menos processamento que fazer o reconhecimento.

Para detecção facial, utilize o programa face_detection. Por exemplo, tenho um diretório com imagens e quero separar minhas fotos com a família, mas como são muitas fotos, demoraria horas para classificar. Então:

O resultado seria algo como:

Reconhecimento facial com dlib - region

O programa devolve a região da face, podendo-se então recortá-la com a utilização do ImageMagick de forma automática, caso fosse de interesse.

Coloquei um espaço extra pra não ficar grudado na região da detecção.

O programa também permite a execução sobre um diretório de imagens:

As coordenadas são top, direita, base, esquerda.

Acelerando a detecção

Também podemos fazer uso de múltiplas CPUs para acelerar a detecção. Por exemplo:

Face detection com módulo Python

Agora começa a brincadeira para programadores.

Quando terminar a compilação, além de instalar a dlib ainda contaremos com um módulo para programar em Python. Isso facilita muito o uso de visão computacional para quem está iniciando, hum?

Um exemplo simples, fazendo o cropping mais preciso e sem precisar usar shell script:

A compilação foi explicada sem a utilização de CUDA. Ainda assim, é possível utilizar uma CNN para fazer a detecção de face e pode valer a pena se distribuir o processamento em vários núcleos. Para linha de comando:

E dentro do código Python, basta incluir o parâmetro na respectiva linha:

Detectando regiões da face

Olha só que incrível. Se quiser fazer montagens ou ocultar uma parte do rosto (por exemplo, esconder os olhos de uma criança), as referências do posicionamento podem ser pegas com uma linha de Python:

Essa referência foi tirada da imagem desse bonitão aqui:

Reconhecimento facial com dlib - perito forense digital

Se resolver pegar essa imagem, ela foi redimensionada e dará outras dimensões na execução do código agora.

Face recognition por linha de comando

Para fazer reconhecimento facial com dlib por linha de comando é tão simples quanto fazer o face detection. Começando os parâmetros com as opções disponíveis, pode-se (e talvez se deva) passar um número de cpu, da mesma forma que para o face detection.  Outro parâmetro disponível é a tolerância (–tolerance), que é 0.6 por padrão. Pode ser necessário definir um limite para evitar falso-positivo. Uma linha de comando de exemplo seria:

Reconhecimento facial com dlib - command line

Simples e indolor.

Face recognition utilizando o módulo Python

A simplicidade para fazer reconhecimento facial com dlib com Python é a mesma. Quando utilizando em tempo-real, a melhor opção sem sombra de dúvidas é utilizar GPU, mas aí a compilação da dlib muda. Fora isso, podemos também utilizar Python 2.7, que também é outra configuração de compilação.

Para fazer um reconhecimento facial a partir de imagens, utiliza-se algo como isto:

Completamente simples; seleciona modelo, codifica, seleciona alvo, codifica, compara. Só isso!

Reconhecimento facial com dlib a partir da webcam

Para uma brincadeira mais interessante, vou dispor o código para receber como parâmetro uma foto sua, então abre-se a webcam e faz-se o reconhecimento. Tem aplicações interessantes, vou fazer outro artigo a respeito só para mostrar uma delas.

Podemos carregar várias fotos de pessoas diferentes, eu coloquei só 2 minhas mesmo e o resultado é a imagem de destaque desse artigo.

Terei que fazer um vídeo desse material, devo colocar em breve no nosso canal DobitAoByteBrasil no youtube. Deixe seu like na nossa página do facebook, clicando aí no canto superior direito. Se gosta de ver a coisa acontecendo, se inscreva em nosso canal no Youtube, clique no sininho para receber notificações e até a próxima!

 

One comment

Comments are closed.

%d blogueiros gostam disto: