Blog
Detección de Marcas Faciales I
- agosto 16, 2017
- Posted by: Rafael Fernandez
- Category: 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
Aqui podeis ver el resultado del codigo en formato gif con la cara de nuestr@ amig@ Tremkel
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
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)
[…] 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 […]