Detecção de objetos com Haar Cascade

Haar Cascade é um modelo de inteligência artificial para detecção de objetos em imagens que está disponibilizado nesse repositório no GitHub:

https://github.com/opencv/opencv/tree/master/data/haarcascades

Repare que no repositório existem diversos modelos cada um treinado para identificar diferentes objetos, como parte frontal do rosto, sorrisos, parte de cima do corpo, olho direito, etc.

images/model_haar.png

Para utilizar este modelo Haar Cascade precisa fazer o download do modelo desejado e colocar na aba lateral do Google Collaboratory

images/google_haar.png

No nosso exemplo iremos utilizar a foto abaixo e o modelo haarcascade_frontalface_default.xml para identificar as faces da imagem.

images/criancas.jpg

Para detectar faces, usaremos o método detectMultiScale e os seus parâmetros:

  • imagem_cinza: imagem em tons de cinza.

  • scaleFactor: escala da imagem para trablharmos a detecção de faces (testes sempre valores maiores do que 1.0.

  • minNeighbors: quantidade mínima em que o algoritmo classificou a região da imagem como sendo uma face.

  • minSize: tamanho mínimo da face para ser aceita na detecção.

 1#Importar a biblioteca necessária
 2import cv2
 3from google.colab.patches import cv2_imshow
 4
 5#Importando a imagem
 6imagem_original = cv2.imread("/content/criancas.jpg")
 7
 8#Converter a imagem em escala de cinza
 9imagem_cinza = cv2.cvtColor(imagem_original, cv2.COLOR_BGR2GRAY)
10
11#Importar o arquivo Haar Cascade
12haar_cascade_face = cv2.CascadeClassifier('/content/haarcascade_frontalface_default.xml')
13
14#Detectando as faces
15faces = haar_cascade_face.detectMultiScale(imagem_cinza,
16                                        scaleFactor=1.09,
17                                        minNeighbors=5,
18                                        minSize=(25,25))

Basicamente, para cada face encontrada temos uma lista com quatro elementos indicando cada posição do retângulo (região da imagem) em que está as faces detectadas:

[posição inicial X, posição inicial Y, largura, altura]

images/info_faces.png
Para finalizar vamos desenhar um retângulo em cada face encontrada usando o método rectangle( ) do OpenCV e seus parâmetros:
  • imagem: nome da imagem original (colorida).

  • posição inicial X e Y (canto superior esquedo do retângulo: (x,y)

  • posição final X e Y (canto inferior direito do retângulo: (x,y)

  • cor: cor da linha

  • grossura: grossura da linha

 1#Desenhar o retângulo
 2for (x,y,largura,altura) in faces:
 3             cv2.rectangle(imagem_original,
 4             (x,y),
 5             (x+largura, y+altura),
 6             (0,255,0),
 7             2)
 8
 9#Visualizar imagem
10cv2_imshow(imagem_original)
images/faces_ret.png