Python: reconocimiento facial y de manos con MediaPipe Holistic

¿Qué es MediaPipe?  

La detección de objetos es uno de los casos de uso más importantes y populares en el dominio de la visión artificial. Varios modelos de detección de objetos se utilizan en todo el mundo para sus aplicaciones de casos de uso particulares. Muchos de estos modelos se han utilizado como una solución independiente para una sola tarea de visión artificial con su propia aplicación fija. Combinar varias de estas tareas en una única solución integral, en tiempo real, es exactamente lo que hace MediaPipe.

MediaPipe es un marco de aprendizaje automático multiplataforma de código abierto que se utiliza para crear canalizaciones de aprendizaje automático aplicadas complejas y multimodales. Se puede usar para crear modelos de aprendizaje automático de vanguardia, como detección de rostros, seguimiento de múltiples manos, detección y seguimiento de objetos, y muchos más. MediaPipe básicamente actúa como un mediador para manejar la implementación de modelos para sistemas que se ejecutan en cualquier plataforma, lo que ayuda al desarrollador a concentrarse más en experimentar con modelos que en el sistema.

 Posibilidades con MediaPipe:

  1. Detección y seguimiento de poses humanas Seguimiento de poses del cuerpo humano de alta fidelidad, que infiere un mínimo de 25 puntos de referencia 2D de la parte superior del cuerpo a partir de fotogramas de video RGB
  2. Face Mesh 468 puntos de referencia faciales en 3D con compatibilidad con varias caras
  3. Seguimiento de manos 21 puntos de referencia en 3D con compatibilidad con varias manos, basado en un modelo de puntos de referencia de mano y detección de palma de alto rendimiento
  4. Seguimiento holístico Seguimiento simultáneo y semánticamente consistente de 33 poses, 21 por mano y 468 puntos de referencia faciales
  5. Segmentación del cabello Recoloración del cabello súper realista en tiempo real
  6. Detección y seguimiento de objetos Detección y seguimiento de objetos en el video en una sola canalización
  7. Detección de rostros Detector de rostros ultraligero con 6 puntos de referencia y compatibilidad con múltiples rostros
  8. Seguimiento del iris y estimación de la profundidad Seguimiento preciso del iris humano y estimación de la profundidad métrica sin hardware especializado. Realiza un seguimiento de los puntos de referencia del iris, la pupila y el contorno de los ojos.
  9. Detección de objetos 3D Detección y estimación de poses 3D de objetos cotidianos como zapatos y sillas

MediaPipe holístico:

Mediapipe Holistic es una de las canalizaciones que contiene componentes optimizados de rostros, manos y poses que permiten un seguimiento holístico, lo que permite que el modelo detecte simultáneamente poses de manos y cuerpos junto con puntos de referencia faciales. uno de los usos principales de MediaPipe holístico es detectar rostros y manos y extraer puntos clave para pasar a un modelo de visión por computadora.

Detecta rostros y manos usando Holistic y extrae puntos clave

El siguiente fragmento de código es una función para acceder a la entrada de imágenes desde la cámara web del sistema utilizando el marco OpenCV, detectar puntos de referencia faciales y de manos y extraer puntos clave.

Python3

'''
Install dependencies
pip install opencv-python
pip install mediapipe
'''
# Import packages
import cv2
import mediapipe as mp
 
#Build Keypoints using MP Holistic
mp_holistic = mp.solutions.holistic # Holistic model
mp_drawing = mp.solutions.drawing_utils # Drawing utilities
 
def mediapipe_detection(image, model):
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # COLOR CONVERSION BGR 2 RGB
    image.flags.writable = False                  # Image is no longer writable
    results = model.process(image)                 # Make prediction
    image.flags.writable = True                   # Image is now writable
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # COLOR CONVERSION RGB 2 BGR
    return image, results
   
def draw_landmarks(image, results):
    mp_drawing.draw_landmarks(
      image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS) # Draw face connections
    mp_drawing.draw_landmarks(
      image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS) # Draw pose connections
    mp_drawing.draw_landmarks(
      image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS) # Draw left hand connections
    mp_drawing.draw_landmarks(
      image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS) # Draw right hand connections
     
def draw_styled_landmarks(image, results):
    # Draw face connections
    mp_drawing.draw_landmarks(
      image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS,
      mp_drawing.DrawingSpec(color=(80,110,10), thickness=1, circle_radius=1),
      mp_drawing.DrawingSpec(color=(80,256,121), thickness=1, circle_radius=1))
    # Draw pose connections
    mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_holistic.POSE_CONNECTIONS,
                             mp_drawing.DrawingSpec(color=(80,22,10), thickness=2, circle_radius=4),
                             mp_drawing.DrawingSpec(color=(80,44,121), thickness=2, circle_radius=2)
                             )
    # Draw left hand connections
    mp_drawing.draw_landmarks(image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS,
                             mp_drawing.DrawingSpec(color=(121,22,76), thickness=2, circle_radius=4),
                             mp_drawing.DrawingSpec(color=(121,44,250), thickness=2, circle_radius=2)
                             )
    # Draw right hand connections 
    mp_drawing.draw_landmarks(image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS,
                             mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=4),
                             mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2)
                             )
#Main function
cap = cv2.VideoCapture(0)
# Set mediapipe model
with mp_holistic.Holistic(min_detection_confidence=0.5, min_tracking_confidence=0.5) as holistic:
    while cap.isOpened():
 
        # Read feed
        ret, frame = cap.read()
 
        # Make detections
        image, results = mediapipe_detection(frame, holistic)
        print(results)
         
        # Draw landmarks
        draw_styled_landmarks(image, results)
 
        # Show to screen
        cv2.imshow('OpenCV Feed', image)
 
        # Break gracefully
        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

Puntos de referencia que se pueden detectar con Mediapipe Holistic

1. Plantea puntos de referencia

Crédito: MediaPipe

2. Puntos de referencia de la mano

Crédito: MediaPipe

3. Puntos de referencia de la cara

Imagen generada usando la función mediapipe publicada arriba y trazada en un plano gráfico usando matplotlib. Fuente: Autor

Publicación traducida automáticamente

Artículo escrito por support3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *