Pré-requisitos: detecção de rosto usando dlib e openCV

Neste artigo, usaremos o processamento de imagem para detectar e contar o número de rostos. Não devemos obter todas as características do rosto. Em vez disso, o objetivo é obter a caixa delimitadora por meio de alguns métodos, ou seja, as coordenadas do rosto na imagem, dependendo das diferentes áreas cobertas pelo número de coordenadas, número de faces que serão calculadas.

Bibliotecas necessárias:

  • A  biblioteca OpenCV em python é uma biblioteca de visão computacional, usada principalmente para processamento de imagem, processamento e análise de vídeo, reconhecimento e detecção facial, etc.
  • A biblioteca Dlib  em python contém o detector de pontos de referência facial pré-treinado, que é usado para detectar as coordenadas (x, y) que mapeiam para estruturas faciais no rosto.
  • Numpy  é um pacote de processamento de array de propósito geral. Ele fornece um objeto de array multidimensional de alto desempenho e ferramentas para trabalhar com esses arrays.

Abaixo está a abordagem passo a passo para contar o número de faces:

Etapa 1: importe as bibliotecas necessárias. 

import cv2 
import numpy as np 
import dlib 

Etapa 2:  Abra a câmera padrão para capturar faces e use  a  biblioteca dlib para obter as coordenadas.

cap = cv2.VideoCapture(0) 
detector = dlib.get_frontal_face_detector() 

Etapa 3: conte o número de faces.

  • Capture os quadros continuamente.
  • Converta os quadros em tons de cinza (não é necessário).
  • Pegue um iterador  ie  inicialize-o para zero.
  • Cada vez que você obtém as coordenadas da estrutura da face no quadro, aumente o iterador em 1.
  • Trace a caixa ao redor de cada rosto detectado junto com sua contagem de rosto.
while True: 
  
    
    ret, frame = cap.read() 
    frame = cv2.flip(frame, 1) 
  
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    faces = detector(gray) 
  
    
    i = 0
    for face in faces: 
        x, y = face.left(), face.top() 
        x1, y1 = face.right(), face.bottom() 
        cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2) 
        i = i+1
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10), 
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) 
        print(face, i) 
  
    
    cv2.imshow('frame', frame) 

Etapa 4: termine o loop.

if cv2.waitKey(1) & 0xFF == ord('q'): 
    break

Etapa 5: limpar as janelas.

cap.release() 
cv2.destroyAllWindows() 

Abaixo está o programa completo da abordagem acima:

import cv2 
import numpy as np 
import dlib 
  
  
cap = cv2.VideoCapture(0) 
  
  
detector = dlib.get_frontal_face_detector() 
  
  
while True: 
  
    
    ret, frame = cap.read() 
    frame = cv2.flip(frame, 1) 
  
    
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    faces = detector(gray) 
  
    
    i = 0
    for face in faces: 
        x, y = face.left(), face.top() 
        x1, y1 = face.right(), face.bottom() 
        cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2) 
        i = i+1
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10), 
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) 
        print(face, i) 
  
    
    cv2.imshow('frame', frame) 
  
    
    if cv2.waitKey(1) & 0xFF == ord('q'): 
        break
  
  
cap.release() 
cv2.destroyAllWindows() 

Resultado: