¿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:
- 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
- Face Mesh 468 puntos de referencia faciales en 3D con compatibilidad con varias caras
- 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
- Seguimiento holístico Seguimiento simultáneo y semánticamente consistente de 33 poses, 21 por mano y 468 puntos de referencia faciales
- Segmentación del cabello Recoloración del cabello súper realista en tiempo real
- Detección y seguimiento de objetos Detección y seguimiento de objetos en el video en una sola canalización
- Detección de rostros Detector de rostros ultraligero con 6 puntos de referencia y compatibilidad con múltiples rostros
- 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.
- 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()