Blog
Detección de Marcas Faciales I
- Publicado por: Rafael Fernandez
- Categoría: Blog DLib OpenCV Procesamiento de Imagenes
-En esta parte del curso te mostramos un código que sirve para detectar las marcas faciales.
-Igualmente, citaremos el código y te mostraremos sus resultados.
Las marcas faciales dicen mucho de una persona. Ellas nos ayudan a transmitir sentimientos, nos ayudan en la comunicación verbal y no verbal. Las marcas faciales de una cara son expresiones que nos hablan de sentimientos, acciones, pensamientos e indudablemente son datos que podemos analizar.
Detección de Marcas Faciales con Python
Hoy presentamos un código simple pero que nos servirá de base para futuros algoritmos. En este código seremos capaces de reconocer 67 puntos faciales agrupados en partes de una cara como pueden ser:
- Boca
- Cejas (derecha e izquierda)
- Ojos (derechos e izquierdo)
- Nariz
- Mandibula
Aquí podéis ver el resultado del código en formato gif con la cara de nuestr@ amig@ Tremkel

Requisitos para correr el algoritmo
- cv2 (librería openCV)
- dlib (Un juego de herramientas para hacer aplicaciones de learning machine y analisis de datos para el mundo real)
- numpy
- archivo : shape_predictor_68_face_landmarks.dat (lo puedes descargar desde este link)
Código Python para Detección de Marcas Faciales
from imutils import face_utils
import numpy as np
import imutils
import dlib
import cv2
PREDICTOR_PATH = "shape_predictor_68_face_landmarks.dat"
# Inicializa el detector de cara de dlib (HOG-based) y luego crea
# El factor predictivo de la marca facial
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(PREDICTOR_PATH)
# Cargar la imagen de entrada, redimensiona y la convierte a escala de grises
image = cv2.imread('Tremkel.jpg')
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detectar caras en la imagen en escala de grises
rects = detector(gray, 1)
# ciclo sobre las detecciones de la cara
for (i, rect) in enumerate(rects):
# Determinar las marcas faciales para la región de la cara, luego
# Convertir el punto de referencia (x, y) - coordina a un array NumPy
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)
# ciclo sobre las partes de la cara individualmente
for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items():
# Clonar la imagen original para que podamos dibujar en ella, entonces
# Mostrar el nombre de la parte de la cara en la imagen
clone = image.copy()
cv2.putText(clone, name, (10, 90), cv2.FONT_HERSHEY_SIMPLEX,0.9, (0, 0, 255), 2)
# Sobre el subconjunto de marcas faciales, dibuja la
# Parte de la cara específica
for (x, y) in shape[i:j]:
cv2.circle(clone, (x, y), 2, (53, 104, 45), -1)
# Extraer el ROI de la región de la cara como una imagen separada
(x, y, w, h) = cv2.boundingRect(np.array([shape[i:j]]))
roi = image[y:y + h, x:x + w]
roi = imutils.resize(roi, width=250, inter=cv2.INTER_CUBIC)
# muestra la parte particular de la cara
cv2.imshow("ROI", roi)
cv2.imshow("Image", clone)
cv2.waitKey(0)
# Visualizar todas las marcas faciales con una superposición transparente
output = face_utils.visualize_facial_landmarks(image, shape)
cv2.imshow("Image", output)
cv2.waitKey(0)
El código se compone de 3 ciclos for donde se:
- Detectan las marcas faciales
- Determinan las partes de la cara de cada región
- Clona la imagen original para que podamos dibujar en ella y mostrar el nombre de la parte de la cara en la imagen
Una vez ejecutado el algoritmo pulsa intro para graficar las diferentes partes de la cara
No olvidéis cambiar la imágen en la línea 16 y de tener en una misma carpeta la imagen, el código y el archivo shape_predictor_68_face_landmarks.dat
➡ Continúa aprendiendo en nuestro curso de Dlib y OpenCV:
[…] el artículo de Detección de Marcas Faciales I vimos como podemos facilmente detectar los puntos faciales de la boca, nariz, cejas y ojos en una […]
[…] Share Tweet Google+ Email Prev Article Next Article […]
[…] Detección de Marcas Faciales I […]