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