Reconhecimento de Faces com Python e OpenCV

Como citar esse artigo: VERTULO, Rodrigo. Reconhecimento de Faces com Python e OpenCV. Disponível em: <http://iaacademy.com.br/2020/05/07/reconhecimento-de-faces-com-python-e-opencv/>. Acessado em: 27/09/2020.


Esse algoritmo apresenta a utilização da biblioteca OpenCV em conjunto com a linguagem de programação Python para realizar a identificação de faces em imagens.

É utilizado o algoritmo Haar Cascade com um arquivo XML pré construído (haarcascade_frontalface_alt.xml) e disponível para download no endereço https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml.

A imagem com faces a serem identificadas foi obtida no endereço encontrado aqui. Contudo, você poderá utilizar suas próprias imagens se desejar.

A primeira etapa consiste em importar a biblioteca OpenCV utilizando-se a instrução a segguir.

In [ ]:
import cv2

Agora será preciso carregar a imagem com as faces em uma variável.

In [ ]:
imagem = cv2.imread("rostos.jpeg")

Para otimizar a tarefa de identificação das imagens, o algoritmo deverá trabalhar sobre uma versão em escalas de cinza da imagem. Desse modo, será preciso converter a imagem com as faces para esse padrão de cores.

In [ ]:
imagemCinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

O próximo passo consistirá em carregar o arquivo XML com os dados obtidos por meio de um treinamento prévio para a identificação de faces. Esse arquivo pode ser obtido no endereço informado no início deste documento.

In [ ]:
classificador = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")

Já temos tudo o que é necessário para realizar a tarefa de identificação das faces na imagem escolhida. Para realizar a tarefa de classificação deve-se proceder conforme é mostrado a seguir.

In [ ]:
deteccoes = classificador.detectMultiScale(imagemCinza)

A variável “deteccoes” criada anteriormente é uma lista contendo a localização de cada face identificada. Cada localização é uma lista contendo as posições X e Y de cada retângulo com uma face identificada, bem como a largura e altura de cada um.

Varreremos todos os itens da variável “deteccoes” e efetivamente desenharemos os retângulos que delimitam cada face na versão colorida de nossa imagem.

In [ ]:
for (x, y, l, a) in deteccoes:
    cv2.rectangle(imagem, (x, y), (x + l, y + a), (0, 255, 0), 2)
    

Finalmente podemos exibir a imagem com as faces detectadas.

Como esse código está sendo executado no Google Colab, será preciso utilizar a rotina de exibição de imagens utilizando a implementação feita pelo próprio Google, motivo pelo qual as duas linhas de código mostradas a seguir foram utilizadas.

OBS: Se o script estivesse sendo executado fora do Google Colab, a exibição da imagem deveria ser feita conforme é mostrado abaixo:

cv2.imshow(“Detector de Faces”, imagem) # Abre uma janela com a imagem contendo as faces detectadas

cv2.waitkey(0) # Mantém a janela com a imagem carregada e aguarda o usuário pressionar uma tecla.

cv2.destroyAllWindows() # Depois que o usuário pressiona qualquer tecla, fecha a janela com a imagem e encerra a execução do script.

In [143]:
from google.colab.patches import cv2_imshow
cv2_imshow(imagem)

É possível notar que uma das faces não foi identificada, porém, o resultado obtido foi muito bom com oito das nove faces tendo sido encontradas. Alguns parâmetros da rotina “detectMultiScale” poderiam ser ajustados para tentar obter 100% de identificações, contudo, isso é assunto para um outro artigo.

Sê o primeiro

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *