Detecção Facial com Python e OpenCV

Olá, hoje irei mostrar um exemplo extremamente simples para fazer a detecção facial em uma imagem utilizando Python e OpenCV (para saber como instalar o OpenCV clique aqui). Para se ter uma ideia da simplicidade do código, tirando os comentários e quebras de linha o código tem apenas 17 linhas.

Talk is Cheap

Ok, Ok, vamos ao código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Importa o OpenCV
import cv2

# Define o caminho para o classificador, neste caso Haar Cascade
caminho_classificador = "haarcascade_frontalface_default.xml"
# Define o caminho para a imagem
caminho_imagem = "imagem.jpg"
# Caso a image e/ou o classificador nao estejam na mesma pasta do arquivo 
# fonte eh preciso informar o caminho completo "C:\\Users\\..."

# Cria o classificador
classificador = cv2.CascadeClassifier(caminho_classificador)

# Le a imagem
imagem = cv2.imread(caminho_imagem)

# Converte a imagem para escala de cinza
cinza = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

# Detecta as faces na imagem
faces = classificador.detectMultiScale(
    cinza,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

# Desenha um retangulo para cada face encontrada
for (x, y, w, h) in faces:
    cv2.rectangle(imagem, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Mostra a imagem (colorida) com os retangulos desenhados nas faces
cv2.imshow("Faces found", imagem)
# Aguarda tecla para fechar a janela
cv2.waitKey(0)

 

O resultado do código foi o seguinte:

Rage Against the Machine

Rage Against the Machine

O código está todo comentado para facilitar o entendimento.

Os arquivos XML para o classificador podem ser encontrados no seguinte link: https://github.com/Itseez/opencv/tree/master/data

Segue uma breve descrição sobre os parâmetros da função detectMultiScale():

  • scaleFactor  – Parâmetro especificando o quanto o tamanho da imagem é reduzido em cada escala da imagem.
  • minNeighbors – Parâmetro especificando quantos vizinhos cada retângulo candidato deve ter para retê-lo.
  • minSize – Tamanho mínimo possível do objeto. Objetos menores do que isto são ignorados.

 

Como é possível ver, é realmente muito simples e divertido brincar com identificação e reconhecimento facial utilizando Python e OpenCV.

Enfim, qualquer dúvida ou sugestão é só comentar aqui em baixo.

 

Fonte: https://realpython.com/blog/python/face-recognition-with-python/

4 opiniões sobre “Detecção Facial com Python e OpenCV

    • Se não estou enganado, o parâmetro flags era utilizado para os antigos classificadores em cascata da OpenCV. Para os novos classificadores em cascata ela não é mais utilizada e pode ser ignorada/removida. Obs.: esta informação não está bem documentada na documentação da OpenCV.

  1. i just love that you used Rage against the machine photo 🙂 Can we find Zack de la Rocha with that program? lol

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s