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 |
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
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
Argumento | Tipo | Por defecto | Descripci贸n |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Especifica la fuente de datos para la inferencia. Puede ser una ruta de imagen, un archivo de v铆deo, un directorio, una URL o el ID de un dispositivo para transmisiones en directo. Admite una amplia gama de formatos y fuentes, lo que permite una aplicaci贸n flexible en distintos tipos de entrada. |
conf |
float |
0.25 |
Establece el umbral m铆nimo de confianza para las detecciones. Los objetos detectados con una confianza inferior a este umbral ser谩n descartados. Ajustar este valor puede ayudar a reducir los falsos positivos. |
iou |
float |
0.7 |
Umbral de Intersecci贸n Sobre Uni贸n (IoU) para la Supresi贸n No M谩xima (NMS). Los valores m谩s bajos dan lugar a menos detecciones al eliminar las cajas superpuestas, lo que resulta 煤til para reducir los duplicados. |
imgsz |
int or tuple |
640 |
Define el tama帽o de la imagen para la inferencia. Puede ser un 煤nico n煤mero entero 640 para un redimensionamiento cuadrado o una tupla (alto, ancho). Un tama帽o adecuado puede mejorar la precisi贸n de la detecci贸n y la velocidad de procesamiento. |
half |
bool |
False |
Permite la inferencia de media precisi贸n (FP16), que puede acelerar la inferencia del modelo en las GPU compatibles con un impacto m铆nimo en la precisi贸n. |
device |
str |
None |
Especifica el dispositivo para la inferencia (por ejemplo, cpu , cuda:0 o 0 ). Permite a los usuarios seleccionar entre CPU, un GPU espec铆fico u otros dispositivos de c谩lculo para la ejecuci贸n del modelo. |
max_det |
int |
300 |
N煤mero m谩ximo de detecciones permitidas por imagen. Limita el n煤mero total de objetos que el modelo puede detectar en una sola inferencia, evitando salidas excesivas en escenas densas. |
vid_stride |
int |
1 |
Salto de fotogramas para entradas de v铆deo. Permite saltar fotogramas en los v铆deos para acelerar el procesamiento a costa de la resoluci贸n temporal. Un valor de 1 procesa cada fotograma, valores superiores omiten fotogramas. |
stream_buffer |
bool |
False |
Determina si todos los fotogramas deben almacenarse en la memoria intermedia al procesar secuencias de v铆deo (True ), o si el modelo debe devolver el fotograma m谩s reciente (False ). 脷til para aplicaciones en tiempo real. |
visualize |
bool |
False |
Activa la visualizaci贸n de las caracter铆sticas del modelo durante la inferencia, proporcionando informaci贸n sobre lo que el modelo est谩 "viendo". 脷til para la depuraci贸n y la interpretaci贸n del modelo. |
augment |
bool |
False |
Permite el aumento del tiempo de prueba (TTA) para las predicciones, mejorando potencialmente la robustez de la detecci贸n a costa de la velocidad de inferencia. |
agnostic_nms |
bool |
False |
Activa la Supresi贸n No M谩xima (NMS) agn贸stica de clases, que fusiona las cajas superpuestas de clases diferentes. 脷til en escenarios de detecci贸n multiclase en los que el solapamiento de clases es habitual. |
classes |
list[int] |
None |
Filtra las predicciones a un conjunto de ID de clase. S贸lo se devolver谩n las detecciones que pertenezcan a las clases especificadas. 脷til para centrarse en objetos relevantes en tareas de detecci贸n multiclase. |
retina_masks |
bool |
False |
Utiliza m谩scaras de segmentaci贸n de alta resoluci贸n si est谩n disponibles en el modelo. Esto puede mejorar la calidad de la m谩scara para las tareas de segmentaci贸n, proporcionando detalles m谩s finos. |
embed |
list[int] |
None |
Especifica las capas de las que extraer vectores de caracter铆sticas o incrustaciones. 脷til para tareas posteriores como la agrupaci贸n o la b煤squeda de similitudes. |
Argumentos model.track
Argumento | Tipo | Por defecto | Descripci贸n |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml o botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
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.