Hacer mapeo facial con Dlib y Python es bastante fácil. Además de poder detectar rostros en una imagen o video, a veces es necesario obtener mayor detalle sobre la posición de ojos, nariz o boca. Puedes hacerlo fácilmente con la librería Dlib.
Dlib es un detector facial de puntos de referencia con modelos pre-entrenados, Dlib se usa para estimar la ubicación de 68 coordenadas (x, y) que mapean los puntos faciales en la cara de una persona como la imagen de abajo. Este ejemplo usa un archivo con el modelo pre-entrenado «shape_predictor_68_face_landmarks.dat» que puede guardarse en la misma carpeta del script del ejemplo.
Este ejemplo fue probado en linux debian y adicionalmente tuve que instalar le librería cmake.
sudo pip3 install cmake
Debes asegurarte de importar la siguientes librerías:
sudo pip3 install numpy opencv-python dlib imutils
Y ahora el código:
from imutils import face_utils import dlib import cv2 # Se inicializa primero el detector de rostros (HOG) y después # se agregan los puntos de referencia en el rostro detectado # p = Es la referencia al modelo preentrenado, en este caso en # la misma carpeta que este script p = "shape_predictor_68_face_landmarks.dat" detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor(p) cap = cv2.VideoCapture(0) while True: # Se obtiene la imagen de la webcam _, image = cap.read() # Converting the image to gray scale # Se convierte la imagen a escala de grises gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Se obtienen los rostros de la imagen en la cámara web rects = detector(gray, 0) # Para cada rostro detectado se buscan los puntos de referencia for (i, rect) in enumerate(rects): # Se hace la predicción y se transforma en un arreglo numpy shape = predictor(gray, rect) shape = face_utils.shape_to_np(shape) # Se dibuja en nuestra imagen, todos las coordenadas encontradas (x,y) for (x, y) in shape: cv2.circle(image, (x, y), 2, (0, 255, 0), -1) # Se muestra una ventana con la imagen cv2.imshow("Mapeo de Rostros", image) # La ventana cierra con la tecla Esc k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows() cap.release()
El archivo lo puedes descargar: shape_predictor_68_face_landmarks.dat
Si ejecutas el script podrás ver varios puntos sobre tu rostro:
Esperamos que este ejemplo de cómo hacer el Mapeo facial con Dlib y Python te sea de utilidad.
Más detalle sobre el archivo: https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/
Más ejemplos de Python: https://decodigo.com/python
Más información en inglés: https://geekole.com/face-mapping-with-dlib-and-python/