68 puntos de referencia faciales con DLIB | Python – OpenCV

Por Administrador

En este post veremos la programación necesaria para extraer 68 puntos del rostro usando la librería dlib. ¡Vamos a por ello!.

CONTENIDO

68 puntos de referencia en el rostro con DLIB en Python

  • Instalación de requerimientos
  • Descargando el predictor de 68 puntos faciales de DLIB
  • ¡Vamos con la programación!

68 puntos de referencia en el rostro con DLIB en Python

Figura 1: Detección de rostro y extracción de 68 puntos faciales con dlib.

Previamente, habíamos visto herramientas como Mediapipe que nos permite obtener un mallado facial de 468 puntos en el rostro. En esta ocasión veremos como obtener 68 con DLIB, pero, ¿por qué?. Seguramente te estás preguntando por qué hablar de DLIB si ya tenemos herramientas como Mediapipe.

Pues bien, DLIB es mucho más antigua y hasta ahora bastante citada en artículos científicos, además de bastante precisa. Puede que te topes con su uso en varios artículos, tutoriales, o incluso módulos que la usen, entre otros. Por ello, vale la pena saber como usarla.

Instalación de requerimientos

A continuación procedemos a usar pip para la instalación de los módulos que necesitamos.

pip install opencv-cotrib-python
pip install imutils
pip install dlib

Si estás en Windows y llegas a obtener un error al querer instalar DLIB, puedes ir al siguiente tutorial para resolverlo: ⚙️Como instalar DLIB en Windows | Python.

Si digitamos pip freeze podremos ver todos los paquetes instalados:

Figura 2: Lista de los módulos instalados.

Si te preguntas de dónde apareció NumPy, ya que no usamos pip install numpy. Esto es porque al momento de instalar OpenCV, este también instala NumPy. 

Descargando el predictor de 68 puntos faciales de DLIB

Para la detección de 68 puntos faciales usando dlib, necesitaremos del predictor. Este no viene con dlib cuando lo instalamos, sino que tendremos que descargarlo. Para ello vamos a: http://dlib.net/files/  

En este link tendremos un listado de archivos. Vamos a bajar todo y elegiremos shape_predictor_68_face_landmarks.dat y se descargará. Este archivo lo ubicamos en la misma carpeta donde estábamos trabajando y lo desempaquetamos. 

¡Vamos con la programación!

Para una explicación más detallada del programa que veremos a continuación, por favor dirígete al video que he preparado en mi canal, en donde explico paso a pasito cada procedimiento efectuado. ¡Anímate a verlo 😉!.

import cv2
import dlib
import imutils

cap = cv2.VideoCapture("video_000.mp4")

# Detector facial
face_detector = dlib.get_frontal_face_detector()
# Predictor de 68 puntos de referencia
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

while True:
     ret, frame = cap.read()
     if ret == False:
          break
     frame = imutils.resize(frame, width=1080)
     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
     coordinates_bboxes = face_detector(gray, 1)
     #print("coordinates_bboxes:", coordinates_bboxes)
     for c in coordinates_bboxes:
          x_ini, y_ini, x_fin, y_fin = c.left(), c.top(), c.right(), c.bottom()
          cv2.rectangle(frame, (x_ini, y_ini), (x_fin, y_fin), (0, 255, 0), 1)

          shape = predictor(gray, c)
          for i in range(0, 68):
               x, y = shape.part(i).x, shape.part(i).y
               cv2.circle(frame, (x, y), 2, (255, 0, 0), -1)
               cv2.putText(frame, str(i + 1), (x, y -5), 1, 0.8, (0, 255, 255), 1)

     cv2.imshow("Frame", frame)
     if cv2.waitKey(1) == 27 & 0xFF:
          break
cap.release()
cv2.destroyAllWindows()

Con este programa podremos detectar rostros y los 68 puntos de referencia en cada uno de ellos, en video. Si lo probamos, obtendremos algo como lo siguiente:

Figura 3: 68 puntos faciales detectados con dlib en Python.

Y bien, esto ha sido todo por el tutorial de hoy. ¡Espero que te haya gustado! 😊 Nos vemos en el siguiente… ¡Qué te vaya súper bien!.

Referencias