Ultralytics YOLO27:

使用 Ultralytics YOLO26 进行健身训练监测#

Open Workouts Monitoring In Colab

通过姿态估计监测健身训练,借助 Ultralytics YOLO26 实时准确跟踪关键身体标志点和关节,从而提升运动评估效果。这项技术可以即时反馈运动姿势、跟踪训练计划并衡量表现指标,为用户和教练优化训练课程。



Watch: How to Monitor Workout Exercises with Ultralytics YOLO | Squats, Leg Extension, Pushups and More

健身训练监测的优势#

  • 优化表现: 根据监测数据调整训练,以获得更好的效果。
  • 实现目标: 跟踪并调整健身目标,取得可量化的进步。
  • 个性化: 根据个人数据定制训练计划,提升训练效果。
  • 健康意识: 及早发现可能表明健康问题或过度训练的模式。
  • 科学决策: 根据数据调整训练计划并设定切合实际的目标。

实际应用#

健身训练监测健身训练监测
使用姿态估计进行 YOLO 俯卧撑计数使用姿态估计进行 YOLO 引体向上计数
俯卧撑计数引体向上计数

使用 YOLO26 监测健身训练#

AIGym 解决方案运行姿态估计,并通过测量肢体在 up_angledown_angle 阈值之间移动时由三个关键点形成的角度来计算重复次数。使用 kpts 选择要跟踪的运动对应的关键点,然后通过 Python API 或 CLI 在视频上运行该解决方案。

使用 Ultralytics YOLO 进行健身训练监测
# Run a workout example
yolo solutions workout show=True

# Pass a source video
yolo solutions workout source="path/to/video.mp4"

# Use keypoints for pushups
yolo solutions workout kpts="[6, 8, 10]"

关键点图#

YOLO 姿态估计关键点顺序示意图

AIGym 参数#

下面是 AIGym 参数表:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
up_anglefloat145.0“向上”姿态的角度阈值。
down_angleint90“向下”姿态的角度阈值。
kptslist[int]'[6, 8, 10]'用于监控训练的三个关键点索引列表。这些关键点对应肩部、肘部和手腕等身体关节或部位,适用于俯卧撑、引体向上、深蹲和腹部训练等练习。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。

AIGym 解决方案还支持一系列目标跟踪参数:

参数类型默认值描述
trackerstr'botsort.yaml'指定要使用的跟踪算法。内置选项:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.25设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。
ioufloat0.7设置用于过滤重叠检测结果的交并比(IoU)阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定类别。
devicestrNone指定推理设备(例如 cpucuda:00)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。
imgszint or tuple640目标推理图像大小:用于正方形的整数或 (height, width) 对。形状会根据模型步长进行调整。
max_detint300在跟踪前每帧保留的最大检测数,用于限制解决方案在密集场景中处理的对象数量。
quantizeint or strNone推理精度:针对 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其工件和运行时选择的精度下进行计算。它替代了已弃用的 half 标志。

此外,还可以应用以下可视化设置:

参数类型默认值描述
showboolFalse如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。
show_confboolTrue在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。
show_labelsboolTrue在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。

常见问题#

  • 要使用 Ultralytics YOLO26 监测健身训练,你可以利用姿态估计功能实时跟踪和分析关键身体标志点及关节。这样,你就能即时获得运动姿势反馈、计算重复次数并衡量表现指标。你可以先使用以下所示的俯卧撑、引体向上或腹肌训练示例代码:

    import cv2
    
    from ultralytics import solutions
    
    cap = cv2.VideoCapture("path/to/video.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 = solutions.AIGym(
        line_width=2,
        show=True,
        kpts=[6, 8, 10],
    )
    
    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = gym(im0)
    
    cv2.destroyAllWindows()

    如需进一步自定义和设置,请参阅文档中的 AIGym 部分。

  • 使用 Ultralytics YOLO26 进行健身训练监测可以带来以下几个主要好处:

    • 优化表现: 根据监测数据调整训练,你可以获得更好的效果。
    • 实现目标: 轻松跟踪并调整健身目标,取得可量化的进步。
    • 个性化: 根据你的个人数据获取定制训练计划,以达到最佳效果。
    • 健康意识: 及早发现表明潜在健康问题或过度训练的模式。
    • 科学决策: 根据数据调整训练计划并设定切合实际的目标。

    你可以观看 YouTube 视频演示,了解这些优势的实际效果。

  • 得益于先进的姿态估计功能,Ultralytics YOLO26 在检测和跟踪运动方面具有很高的准确度。它可以准确跟踪关键身体标志点和关节,实时提供运动姿势反馈和表现指标。模型的预训练权重和稳健架构确保了较高的精确率和可靠性。如需查看实际示例,请参阅文档中的实际应用部分,其中展示了俯卧撑和引体向上计数。

  • 可以,Ultralytics YOLO26 可适配自定义训练计划。AIGym 类使用 up_angledown_anglekpts 参数检测运动重复次数。你可以指定关键点和角度来检测特定运动。以下是一个设置示例:

    from ultralytics import solutions
    
    gym = solutions.AIGym(
        line_width=2,
        show=True,
        kpts=[6, 8, 10],  # For pushups - can be customized for other exercises
    )

    如需详细了解参数设置,请参阅 Arguments AIGym 部分。这种灵活性让你能够监测各种运动,并根据你的健身目标自定义训练计划。

  • 要保存健身训练监测输出,你可以修改代码,加入用于保存处理后帧的视频写入器。以下是一个示例:

    import cv2
    
    from ultralytics import solutions
    
    cap = cv2.VideoCapture("path/to/video.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 = solutions.AIGym(
        line_width=2,
        show=True,
        kpts=[6, 8, 10],
    )
    
    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = gym(im0)
        video_writer.write(results.plot_im)
    
    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()

    此设置会将监测后的视频写入输出文件,方便你稍后查看训练表现,或将其分享给教练以获取更多反馈。

评论