- Componentes requeridos
- Instalación de OpenCV en Raspberry Pi
- Cómo detectar las partes de la cara usando dlib
- Programación de la Raspberry Pi para la detección de puntos de referencia faciales
- Prueba del reconocedor de partes faciales
La detección de puntos de referencia faciales es el proceso de detectar varias partes del rostro, como las cejas, los ojos, la nariz, la boca y la mandíbula. Hay muchas aplicaciones que utilizan técnicas de detección de marcas faciales.
Anteriormente construimos un sistema de reconocimiento facial usando OpenCV, hoy usaremos el mismo OpenCV con Raspberry Pi para la detección de puntos de referencia faciales. Se utilizará un módulo detector de puntos de referencia facial previamente entrenado de la biblioteca dlib para detectar la ubicación de las estructuras faciales clave en la cara y se utilizará Python OpenCV para visualizar las partes de la cara detectadas.
Componentes requeridos
Componentes de hardware
- Frambuesa pi 3
- Módulo de cámara Pi
Software y servicios en línea
- OpenCV
- Dlib
- Python3
Antes de continuar con esta Detección de hitos faciales Raspberry Pi 3 , primero, necesitamos instalar OpenCV, imutils, dlib, Numpy y algunas otras dependencias en este proyecto. OpenCV se utiliza aquí para el procesamiento de imágenes digitales. Las aplicaciones más comunes del procesamiento de imágenes digitales son la detección de objetos, el reconocimiento facial y el contador de personas.
Para obtener más información sobre cómo conectar la cámara Pi con Raspberry Pi, siga nuestros tutoriales anteriores.
Instalación de OpenCV en Raspberry Pi
Aquí se utilizará la biblioteca OpenCV para el escáner QR Raspberry Pi. Para instalar OpenCV, primero actualice la Raspberry Pi.
sudo apt-get update
Luego instale las dependencias requeridas para instalar OpenCV en su Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Después de eso, instale OpenCV en Raspberry Pi usando el siguiente comando.
pip3 instalar opencv-contrib-python == 4.1.0.25
Anteriormente usamos OpenCV con Raspberry pi y creamos muchos tutoriales sobre él.
- Instalación de OpenCV en Raspberry Pi usando CMake
- Reconocimiento facial en tiempo real con Raspberry Pi y OpenCV
- Reconocimiento de matrículas mediante Raspberry Pi y OpenCV
- Estimación del tamaño de la multitud con OpenCV y Raspberry Pi
También hemos creado una serie de tutoriales de OpenCV a partir del nivel principiante.
Instalación de imutils : imutils se usa para ejecutar algunas funciones de procesamiento de imágenes necesarias, como traducción, rotación, cambio de tamaño, esqueletización y visualización de imágenes de Matplotlib más fácilmente con OpenCV. Así que instale imutils usando el siguiente comando:
pip3 instalar imutils
Instalación de dlib: dlib es el conjunto de herramientas moderno que contiene algoritmos y herramientas de aprendizaje automático para problemas del mundo real. Utilice el siguiente comando para instalar dlib.
pip3 instalar dlib
Instalación de NumPy : NumPy es la biblioteca central para la computación científica que contiene un poderoso objeto de matriz n-dimensional, proporciona herramientas para integrar C, C ++, etc.
Pip3 instalar numpy
Cómo detectar las partes de la cara usando dlib
Vamos a utilizar el detector de hitos faciales previamente entrenado de la biblioteca dlib para detectar la ubicación de 68 (x, y) -coordenadas que se asignan a las estructuras faciales en la cara. El predictor de hitos faciales dlib se entrena en el conjunto de datos iBUG 300-W. A continuación se muestra una imagen que contiene los índices de las 68 coordenadas:
Programación de la Raspberry Pi para la detección de puntos de referencia faciales
El código Python completo para el reconocimiento de partes faciales con el detector de puntos de referencia facial pre-entrenado de dlib se encuentra al final de la página. Aquí explicamos algunas partes importantes del código para una mejor comprensión.
Entonces, como de costumbre, inicie el código incluyendo todas las bibliotecas requeridas.
from imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Luego, inicialice el objeto de la cámara y establezca la resolución en (640, 480) y la velocidad de fotogramas en 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Ahora, en las siguientes líneas, use el analizador de argumentos para proporcionar la ruta al predictor de hitos faciales.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "ruta del predictor de hitos faciales") args = vars (ap.parse_args ())
En las siguientes líneas, inicialice el detector facial preentrenado del dlib basado en HOG y cargue el predictor de puntos de referencia facial preentrenado.
detector = dlib.get_frontal_face_detector () predictor = dlib.shape_predictor (argumentos)
Luego use la función capture_continuous para comenzar a capturar los cuadros de la cámara Raspberry Pi.
para el fotograma en camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Utilice la tecla 'S' del teclado para capturar un fotograma en particular. Luego cambie el tamaño de la imagen capturada y conviértala a escala de grises.
if clave == ord ("s"): imagen = imutils.resize (imagen, ancho = 400) gris = cv2.cvtColor (imagen, cv2.COLOR_BGR2GRAY)
Utilice la función de detector de la biblioteca dlib para detectar los rostros en la imagen capturada.
rects = detector (gris, 1)
Tome la fotografía en la que se realizó la detección de rostros, determine los puntos de referencia faciales y convierta los 68 puntos en una matriz NumPy. Haz un bucle sobre cada una de las regiones de la cara individualmente.
para (i, rect) en enumerate (rects): shape = predictor (gray, rect) shape = face_utils.shape_to_np (shape)
Luego, tome una copia de la imagen original y úsela para el bucle para dibujar el nombre de la parte de la cara en la imagen. El color del texto será rojo, puede cambiarlo a otro color cambiando los valores RGB.
para (nombre, (i, j)) en face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clon, nombre, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Ahora recorreremos las partes de la cara detectadas y usaremos la función de dibujo de OpenCV para dibujar círculos en estas partes de la cara. Puede seguir este documento OpenCV para obtener más información sobre las funciones de dibujo.
para (x, y) en forma: cv2.circle (clon, (x, y), 1, (0, 0, 255), -1)
Ahora, en las siguientes líneas, extraeremos cada parte de la cara como una imagen separada calculando el cuadro delimitador de las coordenadas de una parte de la cara específica. La imagen extraída cambiará de tamaño a 250 píxeles.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = imagen roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Ahora, en las últimas líneas del código, muestre las partes de la cara con sus nombres y una imagen separada de esa parte. Use la tecla ESC para cambiar la región de la cara.
cv2.imshow ("ROI", roi) cv2.imshow ("Imagen", clon) cv2.waitKey (0)
Prueba del reconocedor de partes faciales
Para probar el proyecto, cree un directorio y navegue hasta él usando los siguientes comandos:
mkdir detector de partes de caras cd detector de partes de caras
Ahora descargue el archivo shape_predictor_68_face_landmarks.dat desde este enlace, y luego extraiga y copie el archivo shape_predictor_68_face_landmarks.dat dentro de esta biblioteca, y luego abra un nuevo archivo llamado detect.py y pegue el código que se proporciona a continuación.
Ahora inicie el código de Python usando el siguiente comando:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Verá una ventana que muestra una vista en vivo desde su cámara. Luego presione la tecla 'S' para seleccionar un fotograma de la transmisión en vivo. Verá puntos rojos en el área de la boca. Use la tecla ESC para ver las otras partes de la cara.
El código Python completo y el video de demostración se muestran a continuación.