En este artículo, utilizaremos la biblioteca python de mediapipe para detectar puntos de referencia de rostros y manos. Usaremos un modelo holístico de las soluciones de mediapipe para detectar todos los puntos de referencia de la cara y la mano. También veremos cómo podemos acceder a diferentes puntos de referencia de la cara y las manos que se pueden usar para diferentes aplicaciones de visión por computadora, como detección de lenguaje de señas, detección de somnolencia, etc.
Bibliotecas requeridas
- Mediapipe es una biblioteca multiplataforma desarrollada por Google que proporciona increíbles soluciones de aprendizaje automático listas para usar para tareas de visión artificial.
- La biblioteca OpenCV en python es una biblioteca de visión por computadora que se usa ampliamente para el análisis de imágenes, el procesamiento de imágenes, la detección, el reconocimiento, etc.
Instalación de bibliotecas necesarias
pip install opencv-python mediapipe msvc-runtime
A continuación se muestra el enfoque paso a paso para la detección de puntos de referencia de cara y mano
PASO-1: Importe todas las bibliotecas necesarias. En nuestro caso, solo se requieren dos bibliotecas.
Python3
# Import Libraries import cv2 import time import mediapipe as mp
PASO 2: Inicialización del modelo holístico y herramientas de dibujo para detectar y dibujar puntos de referencia en la imagen.
Python3
# Grabbing the Holistic Model from Mediapipe and # Initializing the Model mp_holistic = mp.solutions.holistic holistic_model = mp_holistic.Holistic( min_detection_confidence=0.5, min_tracking_confidence=0.5 ) # Initializing the drawng utils for drawing the facial landmarks on image mp_drawing = mp.solutions.drawing_utils
Veamos los parámetros del modelo holístico:
Holistic( static_image_mode=False, model_complexity=1, smooth_landmarks=True, min_detection_confidence=0.5, min_tracking_confidence=0.5 )
- static_image_mode: se utiliza para especificar si las imágenes de entrada deben tratarse como imágenes estáticas o como una transmisión de video. El valor predeterminado es Falso.
- model_complexity: se utiliza para especificar la complejidad del modelo de punto de referencia de pose: 0, 1 o 2. A medida que la complejidad del modelo aumenta, la precisión del punto de referencia y la latencia aumentan. El valor predeterminado es 1.
- smooth_landmarks: este parámetro se usa para reducir la fluctuación en la predicción al filtrar puntos de referencia de pose en diferentes imágenes de entrada. El valor por defecto es verdadero.
- min_detection_confidence: Se utiliza para especificar el valor mínimo de confianza con el que se debe considerar exitosa la detección del modelo de detección de personas. Puede especificar un valor en [0.0,1.0]. El valor predeterminado es 0,5.
- min_tracking_confidence: Se utiliza para especificar el valor mínimo de confianza con el que se debe considerar exitosa la detección del modelo de seguimiento de hitos. Puede especificar un valor en [0.0,1.0]. El valor predeterminado es 0,5.
PASO-3: Detección de puntos de referencia de cara y mano de la imagen. El modelo holístico procesa la imagen y produce puntos de referencia para la cara, la mano izquierda, la mano derecha y también detecta la pose del
- Captura los cuadros continuamente desde la cámara usando OpenCV.
- Convierta la imagen BGR en una imagen RGB y haga predicciones utilizando un modelo holístico inicializado.
- Las predicciones realizadas por el modelo holístico se guardan en la variable de resultados desde la que podemos acceder a los puntos de referencia utilizando results.face_landmarks, results.right_hand_landmarks, results.left_hand_landmarks respectivamente.
- Dibuje los puntos de referencia detectados en la imagen utilizando la función draw_landmarks de herramientas de dibujo.
- Muestre la imagen resultante.
Python3
# (0) in VideoCapture is used to connect to your computer's default camera capture = cv2.VideoCapture(0) # Initializing current time and precious time for calculating the FPS previousTime = 0 currentTime = 0 while capture.isOpened(): # capture frame by frame ret, frame = capture.read() # resizing the frame for better view frame = cv2.resize(frame, (800, 600)) # Converting the from from BGR to RGB image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Making predictions using holistic model # To improve performance, optionally mark the image as not writable to # pass by reference. image.flags.writable = False results = holistic_model.process(image) image.flags.writable = True # Converting back the RGB image to BGR image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # Drawing the Facial Landmarks mp_drawing.draw_landmarks( image, results.face_landmarks, mp_holistic.FACE_CONNECTIONS, mp_drawing.DrawingSpec( color=(255,0,255), thickness=1, circle_radius=1 ), mp_drawing.DrawingSpec( color=(0,255,255), thickness=1, circle_radius=1 ) ) # Drawing Right hand Land Marks mp_drawing.draw_landmarks( image, results.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS ) # Drawing Left hand Land Marks mp_drawing.draw_landmarks( image, results.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS ) # Calculating the FPS currentTime = time.time() fps = 1 / (currentTime-previousTime) previousTime = currentTime # Displaying FPS on the image cv2.putText(image, str(int(fps))+" FPS", (10, 70), cv2.FONT_HERSHEY_COMPLEX, 1, (0,255,0), 2) # Display the resulting image cv2.imshow("Facial and Hand Landmarks", image) # Enter key 'q' to break the loop if cv2.waitKey(5) & 0xFF == ord('q'): break # When all the process is done # Release the capture and destroy all windows capture.release() cv2.destroyAllWindows()
El modelo holístico produce 468 puntos de referencia de cara, 21 puntos de referencia de mano izquierda y 21 puntos de referencia de mano derecha. Se puede acceder a los puntos de referencia individuales especificando el índice del punto de referencia requerido. Ejemplo: resultados.left_hand_landmarks.landmark[0]. Puede obtener el índice de todos los puntos de referencia individuales utilizando el siguiente código:
Python3
# Code to access landmarks for landmark in mp_holistic.HandLandmark: print(landmark, landmark.value) print(mp_holistic.HandLandmark.WRIST.value)
HandLandmark.WRIST 0 HandLandmark.THUMB_CMC 1 HandLandmark.THUMB_MCP 2 HandLandmark.THUMB_IP 3 HandLandmark.THUMB_TIP 4 HandLandmark.INDEX_FINGER_MCP 5 HandLandmark.INDEX_FINGER_PIP 6 HandLandmark.INDEX_FINGER_DIP 7 HandLandmark.INDEX_FINGER_TIP 8 HandLandmark.MIDDLE_FINGER_MCP 9 HandLandmark.MIDDLE_FINGER_PIP 10 HandLandmark.MIDDLE_FINGER_DIP 11 HandLandmark.MIDDLE_FINGER_TIP 12 HandLandmark.RING_FINGER_MCP 13 HandLandmark.RING_FINGER_PIP 14 HandLandmark.RING_FINGER_DIP 15 HandLandmark.RING_FINGER_TIP 16 HandLandmark.PINKY_MCP 17 HandLandmark.PINKY_PIP 18 HandLandmark.PINKY_DIP 19 HandLandmark.PINKY_TIP 20 0
PRODUCCIÓN:
Publicación traducida automáticamente
Artículo escrito por venugopalkadamba y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA