Notas de aprendizaje automático: comprensión de MediaPipe + combinación de OpenCV para la estimación de la pose humana

1. Descripción general de MediaPipe

        MediaPipe proporciona soluciones de ML personalizables, multiplataforma y de código abierto para transmisión en vivo y en directo. MediaPipe es un marco de código abierto desarrollado por Google. Es un marco muy ligero para soluciones de aprendizaje automático multiplataforma que puede ejecutarse en tiempo real en CPU.

        Admite más detección de escenas

        Detección de rostros, malla facial, reconocimiento de gestos, reconocimiento de gestos parciales, estimación de pose humana (se pueden dar coordenadas 3D de 33 puntos clave), detección y seguimiento de objetivos, etc.

         También se admiten los siguientes idiomas: Android iOS C++ Python JS Coral

        Pero no todas las funciones están disponibles en todos los idiomas.

         Para obtener más información , consulte la dirección del documento: Inicio - mediapipe https://google.github.io/mediapipe/

2. Descripción general de la estimación de la postura humana

1. Estimación de pose humana

        La estimación de la pose humana representa el esqueleto gráfico del cuerpo humano. Ayuda a analizar las actividades humanas. Un esqueleto es básicamente un conjunto de coordenadas que describen la pose de una persona. Cada articulación es una coordenada individual llamada punto clave o hito de pose. Las conexiones entre puntos clave se denominan pares.

        Con la estimación de pose, podemos rastrear los movimientos y actividades humanos en el espacio del mundo real. Esto abre una amplia gama de posibilidades de aplicación. Es una técnica poderosa que ayuda a construir aplicaciones complejas de manera muy eficiente.

2. Aplicación de la estimación de la postura humana

(1) Estimación de las actividades humanas

        La estimación de pose se puede usar para rastrear actividades humanas como caminar, correr, dormir, beber. Proporciona información sobre una persona. La estimación de actividad puede mejorar los sistemas de seguridad y vigilancia.

(2) Transferencia de movimiento

        Una de las aplicaciones más interesantes de la estimación de la pose humana es la transferencia de movimiento. Vemos en películas o juegos que los personajes gráficos en 3D mueven sus cuerpos como humanos o animales reales. Mediante el seguimiento de las poses humanas, los gráficos renderizados en 3D se pueden animar con el movimiento del cuerpo humano.

(3) robots

        Para entrenar el movimiento del robot, se puede utilizar la estimación de pose humana. En lugar de programar manualmente el robot para que siga un camino específico, se utiliza un esqueleto de pose humana para entrenar los movimientos de las articulaciones del robot.

(4) Juegos

        Los juegos de realidad virtual o VR son muy populares en estos días. En los juegos de realidad virtual, las poses 3D son estimadas por una o más cámaras y los personajes del juego se mueven de acuerdo con los movimientos humanos.

3. Modelo de estimación de actitudes

        Hay tres tipos principales de modelos de estimación de pose:

        1. Modelo cinemático: Es un modelo basado en huesos que representa el cuerpo humano.

        2. Modelo plano: un modelo plano es un modelo basado en contornos que utiliza los contornos alrededor del cuerpo humano para representar la forma del cuerpo humano.

        3. Modelos de volumen: los modelos de volumen crean una malla 3D del cuerpo humano, que representa la forma y apariencia del cuerpo humano.

4. Categorías de estimación de pose

        1. Estimación de pose 2D: en la estimación de pose 2D, solo se predicen las coordenadas x e y de cada punto de referencia en la imagen. No proporciona ninguna información sobre el ángulo del esqueleto o la rotación u orientación del objeto o instancia del cuerpo.

        2. Estimación de pose 3D: la estimación de pose 3D nos permite predecir la posición en espiral de una persona. Proporciona coordenadas x, y y z para cada punto de referencia. A través de la estimación de poses en 3D, podemos determinar el ángulo de cada articulación del esqueleto humano.

        3. Estimación de la pose del cuerpo rígido: la estimación de la pose del cuerpo rígido también se denomina estimación de la pose 6D. Proporciona toda la información sobre la pose del cuerpo humano y la rotación y orientación de la instancia humana.

        4. Estimación de pose única: en un modelo de estimación de pose única, solo se puede predecir la pose de una persona en una imagen.

        5. Estimación de poses múltiples: en la estimación de poses múltiples, se pueden predecir varias poses humanas simultáneamente en una imagen.

5. El proceso de estimación de pose

        La estimación de poses utiliza principalmente soluciones de aprendizaje profundo para predecir puntos de referencia de poses humanas. Toma una imagen como entrada y proporciona puntos de referencia de pose como salida para cada instancia.

        Hay dos métodos para la estimación de la pose,

        1. Ascendente: en este enfoque, cada instancia de un punto clave específico se predice en la imagen y luego se combina un conjunto de puntos clave en el esqueleto final.

        2. De arriba hacia abajo: en el enfoque de arriba hacia abajo, los objetos/personas se detectan primero en una imagen dada y luego se predicen puntos de referencia en cada instancia de objeto recortado de esa imagen.

6. Algunos modelos populares de estimación de poses

        1. OpenPose: OpenPose es uno de los métodos de estimación de poses humanas para varias personas más populares. Es una detección de múltiples personas en tiempo real de código abierto con puntos clave de alta precisión.

        2. DeepPose: DeepPose utiliza redes neuronales profundas para estimar la pose humana. La arquitectura captura todas las bisagras y uniones en capas convolucionales, seguidas de capas totalmente conectadas para formar parte de estas capas.

        3. PoseNet: PoseNet está construido sobre Tensorflow.js. Es una arquitectura ligera que se ejecuta en dispositivos móviles y navegadores.

Tercero, combinado con OpenCV para la estimación de la pose humana

1. Código de referencia

        MediaPipe usa TensorFlow lite en el backend. Primero se ubica una persona (ROI) dentro del marco usando un detector. Luego, utiliza el marco recortado de ROI como ENTRADA y predice puntos de referencia/puntos clave dentro del ROI. El estimador de poses de mediaPipe detectó un total de 33 puntos clave.

         La estimación de poses de MediaPipe es un único estimador de poses en 3D. Detecta las coordenadas x, y y z de cada punto de referencia. El eje Z es básicamente información sobre la profundidad del punto de referencia. Esto significa la distancia o proximidad del punto de referencia a la cámara en relación con otros puntos de referencia.

        Debido a que la versión de opencv que estoy usando no implementa gui, las imágenes reconocidas se guardan en la carpeta, de lo contrario, se pueden ver en tiempo real.

# TechVidvan Human pose estimator
# import necessary packages

import cv2
import mediapipe as mp

# initialize Pose estimator
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose

pose = mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5)

# create capture object
cap = cv2.VideoCapture('C:\\Users\\xiaomao\\Desktop\\123.mp4')

i = 0
while cap.isOpened():
    # read frame from capture object
    _, frame = cap.read()

    # try:
    # convert the frame to RGB format
    RGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # process the RGB frame to get the result
    results = pose.process(RGB)

    print(results.pose_landmarks)
    # draw detected skeleton on the frame
    mp_drawing.draw_landmarks(
        frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    # show the final output
    cv2.imwrite('C:\\Users\\zyh\\Desktop\\123456\\' + str(i) + '.jpg', frame)
    i = i+1

cap.release()
cv2.destroyAllWindows()

2. Vista previa del resultado

Supongo que te gusta

Origin blog.csdn.net/bashendixie5/article/details/123508782
Recomendado
Clasificación