Saltar al contenido

Seguimiento de entrenamientos mediante Ultralytics YOLOv8

Monitorizar los entrenamientos mediante la estimaci贸n de la postura con Ultralytics YOLOv8 mejora la evaluaci贸n del ejercicio mediante el seguimiento preciso de puntos de referencia corporales y articulaciones clave en tiempo real. Esta tecnolog铆a proporciona informaci贸n instant谩nea sobre la forma del ejercicio, realiza un seguimiento de las rutinas de entrenamiento y mide las m茅tricas de rendimiento, optimizando las sesiones de entrenamiento tanto para los usuarios como para los entrenadores.



Observa: Seguimiento de entrenamientos con Ultralytics YOLOv8 | Flexiones, Pullups, Entrenamientos de abdominales

驴Ventajas de la monitorizaci贸n de entrenamientos?

  • Rendimiento optimizado: Adapta los entrenamientos en funci贸n de los datos de seguimiento para obtener mejores resultados.
  • Consecuci贸n de objetivos: Controla y ajusta los objetivos de forma f铆sica para conseguir un progreso medible.
  • Personalizaci贸n: Planes de entrenamiento personalizados basados en datos individuales para mayor eficacia.
  • Conciencia de la salud: Detecci贸n precoz de patrones que indiquen problemas de salud o sobreentrenamiento.
  • Decisiones informadas: Decisiones basadas en datos para ajustar las rutinas y establecer objetivos realistas.

Aplicaciones en el mundo real

Seguimiento de los entrenamientos Seguimiento de los entrenamientos
Conteo de flexiones Conteo de PullUps
Conteo de flexiones Conteo de PullUps

Ejemplo de seguimiento de entrenamientos

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)

cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()
Ayuda

Compatible con "flexiones", "tracciones" y "ejercicios abdominales".

Mapa de KeyPoints

keyPoints Orden Ultralytics YOLOv8  Pose

Argumentos AIGym

Nombre Tipo Por defecto Descripci贸n
kpts_to_check list None Lista del 铆ndice de tres puntos clave, para contar un entrenamiento espec铆fico, seguido del Mapa de puntos clave
line_thickness int 2 Grosor de las l铆neas trazadas.
view_img bool False Bandera para mostrar la imagen.
pose_up_angle float 145.0 Umbral de 谩ngulo para la postura "arriba".
pose_down_angle float 90.0 Umbral de 谩ngulo para la postura "hacia abajo".
pose_type str pullup Tipo de pose a detectar ('pullup', pushup, abworkout, squat).

Argumentos model.predict

Nombre Tipo Por defecto Descripci贸n
source str 'ultralytics/assets' directorio fuente de im谩genes o v铆deos
conf float 0.25 umbral de confianza del objeto para la detecci贸n
iou float 0.7 umbral de intersecci贸n sobre uni贸n (IoU) para NMS
imgsz int or tuple 640 tama帽o de la imagen como escalar o lista (h, w), por ejemplo (640, 480)
half bool False utiliza media precisi贸n (FP16)
device None or str None dispositivo en el que se va a ejecutar, es decir, cuda device=0/1/2/3 o device=cpu
max_det int 300 n煤mero m谩ximo de detecciones por imagen
vid_stride bool False velocidad de fotogramas de v铆deo
stream_buffer bool False almacenar en la memoria intermedia todos los fotogramas de la transmisi贸n (Verdadero) o devolver el fotograma m谩s reciente (Falso)
visualize bool False visualizar las caracter铆sticas del modelo
augment bool False aplicar el aumento de imagen a las fuentes de predicci贸n
agnostic_nms bool False NMS de clase agn贸stica
classes list[int] None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
retina_masks bool False utilizar m谩scaras de segmentaci贸n de alta resoluci贸n
embed list[int] None devuelve vectores/incrustaciones de caracter铆sticas de las capas dadas

Argumentos model.track

Nombre Tipo Por defecto Descripci贸n
source im0 None directorio fuente de im谩genes o v铆deos
persist bool False persistencia de pistas entre fotogramas
tracker str botsort.yaml M茅todo de seguimiento 'bytetrack' o 'botsort'
conf float 0.3 Umbral de confianza
iou float 0.5 Umbral del pagar茅
classes list None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
verbose bool True Mostrar los resultados del seguimiento de objetos

PREGUNTAS FRECUENTES

驴C贸mo controlo mis entrenamientos utilizando Ultralytics YOLOv8 ?

Para controlar tus entrenamientos con Ultralytics YOLOv8 , puedes utilizar las funciones de estimaci贸n de la postura para seguir y analizar puntos de referencia corporales y articulaciones clave en tiempo real. Esto te permite recibir informaci贸n instant谩nea sobre la forma de tus ejercicios, contar repeticiones y medir m茅tricas de rendimiento. Puedes empezar utilizando el c贸digo de ejemplo proporcionado para flexiones, dominadas o ejercicios abdominales, como se muestra:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)

cv2.destroyAllWindows()

Para m谩s personalizaci贸n y ajustes, puedes consultar la secci贸n AIGym de la documentaci贸n.

驴Cu谩les son las ventajas de utilizar Ultralytics YOLOv8 para controlar el entrenamiento?

Utilizar Ultralytics YOLOv8 para monitorizar el entrenamiento proporciona varias ventajas clave:

  • Rendimiento optimizado: Al adaptar los entrenamientos en funci贸n de los datos de seguimiento, puedes conseguir mejores resultados.
  • Consecuci贸n de objetivos: Controla y ajusta f谩cilmente los objetivos de forma f铆sica para conseguir un progreso medible.
  • Personalizaci贸n: Consigue planes de entrenamiento personalizados basados en tus datos individuales para una eficacia 贸ptima.
  • Conciencia de la salud: Detecci贸n precoz de patrones que indican posibles problemas de salud o sobreentrenamiento.
  • Decisiones informadas: Toma decisiones basadas en datos para ajustar las rutinas y establecer objetivos realistas.

Puedes ver un v铆deo de demostraci贸n en YouTube para ver estas ventajas en acci贸n.

驴Hasta qu茅 punto es preciso Ultralytics YOLOv8 para detectar y seguir ejercicios?

Ultralytics YOLOv8 es muy preciso en la detecci贸n y el seguimiento de ejercicios gracias a su capacidad de estimaci贸n de la postura de 煤ltima generaci贸n. Puede rastrear con precisi贸n puntos de referencia corporales y articulaciones clave, proporcionando informaci贸n en tiempo real sobre la forma del ejercicio y las m茅tricas de rendimiento. Los pesos preentrenados del modelo y su robusta arquitectura garantizan una gran precisi贸n y fiabilidad. Para ver ejemplos reales, consulta la secci贸n de aplicaciones reales de la documentaci贸n, que muestra el recuento de flexiones y dominadas.

驴Puedo utilizar Ultralytics YOLOv8 para rutinas de entrenamiento personalizadas?

S铆, Ultralytics YOLOv8 puede adaptarse a rutinas de entrenamiento personalizadas. La p谩gina AIGym admite distintos tipos de posturas, como "flexiones", "tracciones" y "ejercicios abdominales". Puedes especificar puntos clave y 谩ngulos para detectar ejercicios espec铆ficos. Aqu铆 tienes un ejemplo de configuraci贸n:

from ultralytics import solutions

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="squat",
    kpts_to_check=[6, 8, 10],
)

Para m谩s detalles sobre la configuraci贸n de los argumentos, consulta el apartado Argumentos AIGym secci贸n. Esta flexibilidad te permite controlar varios ejercicios y personalizar las rutinas en funci贸n de tus necesidades.

驴C贸mo puedo guardar el resultado de la monitorizaci贸n del entrenamiento utilizando Ultralytics YOLOv8 ?

Para guardar la salida de la monitorizaci贸n del entrenamiento, puedes modificar el c贸digo para incluir un grabador de v铆deo que guarde los fotogramas procesados. Aqu铆 tienes un ejemplo:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

Esta configuraci贸n escribe el v铆deo monitorizado en un archivo de salida. Para m谩s detalles, consulta la secci贸n Monitorizaci贸n de entrenamientos con Guardar salida.



Creado 2023-12-02, Actualizado 2024-07-05
Autores: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)

Comentarios