Nunca foi tão fácil criar um detector de faces.
Nesse artigo aprenderemos de forma super simples como criar um detector de faces utilizando Python e um framework chamado MTCNN (Multi-task Cascaded Convolutional Networks) que foi proposto no artigo da Universidade de Cornell que tem como base a correlação dos métodos de detecção facial e alinhamento facial.
Utilizaremos a biblioteca Matplotlib para manipular a imagem e conseguir “desenhar” o famoso retângulo verde sobre as faces detectadas.
A ideia aqui é aprendermos a identificar as faces em uma imagem e não aprofundar na biblioteca em sí, porque para que tudo seja “simples” para nós, toda a complexidade está acontecendo por “debaixo dos panos”.
Então, todos os cáuculos, o treinamento, a classificação, regressão, está acontecendo dentro do detector do MTCNN.
O mais importante é que ao final desse artigo você será capaz de implementar esse detector de faces em qualquer aplicação sua. Seja uma API REST, um aplicativo mobile, um serviço de vigilância ou o que quer que seja.
Vamos direto ao ponto que interessa, o código.
Primeiro vamos importar as bibliotecas e a imagem que utilizaremos de base.
from mtcnn import MTCNN
from matplotlib import pyplot
from matplotlib.patches import Rectangleimg = pyplot.imread('pessoas.jpg')
Agora com nossa imagem já carregada, vamos iniciar nosso detector e ver qual o resultado ele trará.
detector = MTCNN()
faces = detector.detect_faces(img)
Agora conseguimos ver qual a saída do modelo.
[
{
'box': [183, 76, 42, 61],
'confidence': 0.9999948740005493,
'keypoints':
{
'left_eye': (200, 98),
'mouth_left': (199, 120),
'mouth_right': (216, 121),
'nose': (212, 110),
'right_eye': (219, 99)
}
},
...
]
Como podemos ver o retorno do nosso detector que está na variável faces contém uma lista de dicionários Python que tem as seguintes informações:
box — coordenadas x1, y1, largura e o comprimento do retângulo.
confidence — probabilidade de ser uma face
keypoints — coordenadas dos principais pontos das face
Com essas informações já conseguimos utilizar a biblioteca Matplotlib para plotar os pontos de interesse, que no caso são as faces que existem na imagem.
O que eu gosto de fazer aqui é criar uma função para facilitar nosso trabalho.
def caixas(imagem, faces):
ax = pyplot.gca()
for face in faces:
x, y, width, height = face['box']
rect = Rectangle((x, y), width, height, color='green', fill=False, lw=2)
ax.add_patch(rect) pyplot.imshow(imagem)
pyplot.savefig('contagem.png')
pyplot.show()
E agora só precisamos passar a imagem e nossa lista de faces:
caixas(img, faces)
Pronto, agora é com você para implementar em suas aplicações.
Espero ter ajudado!
Se gostou, deixe seu comentário abaixo 👇👇👇