2.2 – Reconhecimento de face com Python e OpenCV

Explicação sobre os cascade classifier….

A primeira parte do código é responsável por determinar qual o padrão que deverá ser utilizado na detecção. Foi utilizado o arquivo padrão (haarcascade_frontalface_default.xml) disponível em https://github.com/Itseez/opencv/tree/master/data/haarcascades. O método cv2.CascadeClassifier() é responsável por abrir o classificador.

Em seguida é criada uma instância da webcam e já dentro do laço de repetição é capturada uma imagem da webcam. Na linha 10 é feito um espelhamento da imagem pois ela pode estar vindo invertida (você vira a cabeça para a esquerda mas na imagem capturada a cabeça vira para a direita), sendo uma instrução opcional.

A detecção realmente acontece no uso da função detectMultiScale(). Os parâmetros necessários para esse método são:

  • Esse método espera como parâmetro a imagem onde deve ser procurado a ocorrência do padrão vinculado.
  • O segundo parâmetro define quantos vizinhos cada candidato a retângulo deve ter para ser considerado. Em síntese, quanto maior o valor mais seguro será a identificação da face, evitando marcar coisas que não são faces e que acabam sendo marcadas, também pode fazer uma face verdadeira não ser reconhecida por problemas de iluminação e oclusão parcial.
  • O terceiro e quarto parâmetros especificam mínimo e máximo que um rosto pode ter na captura. Quanto maior for o valor do tamanho mínimo e menor for a relação com o valor máximo, mais rapidamente o algoritmo finalizará o processo, mas em compensação isso definirá o quão próximo ou distante uma pessoa poderá estar da webcam.

A função detectMultiScale() retornará uma lista de retângulos onde foram identificadas faces e nas linhas 21 e 22 é percorrido essa lista e utilizado os parâmetros da detecção para desenhar retângulos que estarão posicionados onde foram identificadas as faces. Como parâmetros para a função cv2.rectangle() é informada a imagem que vai receber o retângulo, o ponto inicial onde o retângulo será desenhado, o ponto final, a cor (com valores para RGB) e a espessura da linha que será desenhada.

import cv2

arqCasc = 'haarcascade_frontalface_default.xml'
faceCascade = cv2.CascadeClassifier(arqCasc)

webcam = cv2.VideoCapture(0)  #instancia o uso da webcam

while True:
    s, imagem = webcam.read() #pega efeticamente a imagem da webcam
    imagem = cv2.flip(imagem,180) #espelha a imagem

    faces = faceCascade.detectMultiScale(
        imagem,
        minNeighbors=5,
        minSize=(30, 30),
	maxSize=(200,200)
    )

    # Desenha um retângulo nas faces detectadas
    for (x, y, w, h) in faces:
        cv2.rectangle(imagem, (x, y), (x+w, y+h), (0, 255, 0), 2)

    cv2.imshow('Video', imagem) #mostra a imagem captura na janela

    #o trecho seguinte é apenas para parar o código e fechar a janela
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

webcam.release() #dispensa o uso da webcam
cv2.destroyAllWindows() #fecha todas a janelas abertas

O final restante do código é responsável por mostrar a captura em uma janela e finalizar o laço de repetição quando for pressionada a letra ‘q’. Ao encerrar o laço de repetição é liberado o uso da webcam e também fechada todas as janelas que foram abertas (no caso do algoritmo, a única janela aberta).

MOSTRAR VÍDEO COM OS RESULTADOS

LINKAR ARTIGO SOBRE DETEÇÃO DE QUALQUER OBJETO

Referências

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

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.