Cuente el número de caras usando Python – OpenCV

Requisitos previos: Detección de rostros mediante dlib y openCV

En este artículo, utilizaremos el procesamiento de imágenes para detectar y contar el número de rostros. No se supone que obtengamos todas las características de la cara. En cambio, el objetivo es obtener el cuadro delimitador a través de algunos métodos, es decir, las coordenadas de la cara en la imagen, dependiendo de las diferentes áreas cubiertas por el número de coordenadas, el número de caras que se calcularán.

Bibliotecas requeridas:

  • La biblioteca OpenCV  en python es una biblioteca de visión por computadora, utilizada principalmente para procesamiento de imágenes, procesamiento y análisis de video, reconocimiento y detección facial, etc.
  • La biblioteca Dlib  en python contiene el detector de referencias faciales preentrenado, que se usa para detectar las coordenadas (x, y) que se asignan a las estructuras faciales en la cara.
  • Numpy  es un paquete de procesamiento de arrays de propósito general. Proporciona un objeto de array multidimensional de alto rendimiento y herramientas para trabajar con estas arrays.

A continuación se muestra el enfoque paso a paso para contar el número de caras:

Paso 1: importa las bibliotecas requeridas. 

Python3

# Import libraries
import cv2
import numpy as np
import dlib

Paso 2:  abra la cámara predeterminada para capturar rostros y use  la biblioteca dlib  para obtener coordenadas.

Python3

# (0) in VideoCapture is used to
# connect to your computer's default camera
cap = cv2.VideoCapture(0)
# Get the coordinates
detector = dlib.get_frontal_face_detector()

Paso 3: cuenta el número de caras.

  • Captura los fotogramas de forma continua.
  • Convierta los marcos a escala de grises (no es necesario).
  • Tome un iterador  i  e inicialícelo a cero.
  • Cada vez que obtenga las coordenadas de la estructura de la cara en el marco, incremente el iterador en 1.
  • Trace el cuadro alrededor de cada cara detectada junto con su recuento de caras.

Python3

while True:
 
    # Capture frame-by-frame
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)
 
    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)
 
    # Counter to count number of faces
    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)
 
        # Increment the iterartor each time you get the coordinates
        i = i+1
 
        # Adding face number to the box detecting faces
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
        print(face, i)
 
    # Display the resulting frame
    cv2.imshow('frame', frame)

Paso 4: terminar el bucle.

Python3

# Enter key 'q' to break the loop
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

Paso 5: Borrar ventanas.

Python3

# When everything done, release
# the capture and destroy the windows
cap.release()
cv2.destroyAllWindows()

A continuación se muestra el programa completo del enfoque anterior:

Python3

# Import required libraries
import cv2
import numpy as np
import dlib
 
 
# Connects to your computer's default camera
cap = cv2.VideoCapture(0)
 
 
# Detect the coordinates
detector = dlib.get_frontal_face_detector()
 
 
# Capture frames continuously
while True:
 
    # Capture frame-by-frame
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)
 
    # RGB to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)
 
    # Iterator to count faces
    i = 0
    for face in faces:
 
        # Get the coordinates of faces
        x, y = face.left(), face.top()
        x1, y1 = face.right(), face.bottom()
        cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)
 
        # Increment iterator for each face in faces
        i = i+1
 
        # Display the box and faces
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
        print(face, i)
 
    # Display the resulting frame
    cv2.imshow('frame', frame)
 
    # This command let's us quit with the "q" button on a keyboard.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
 
# Release the capture and destroy the windows
cap.release()
cv2.destroyAllWindows()

Producción:

Publicación traducida automáticamente

Artículo escrito por manavgoswami001 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *