Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO26 监测锻炼#

Open Workouts Monitoring In Colab

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



观看: 如何使用 Ultralytics YOLO 监测健身训练动作 | 深蹲、腿部伸展、俯卧撑等

锻炼监测的优势#

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

实际应用#

锻炼监测锻炼监测
使用姿态估计统计 YOLO 俯卧撑次数使用姿态估计统计 YOLO 引体向上次数
俯卧撑计数引体向上计数

使用 YOLO26 监测锻炼#

AIGym 解决方案会运行姿态估计,并通过测量肢体在 up_angle 和 down_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_anglefloat90.0“向下”姿势的角度阈值。
kptslist[int][6, 8, 10]用于监测锻炼动作的三个关键点索引组成的列表。这些关键点对应身体关节或部位,例如肩部、肘部和手腕,可用于俯卧撑、引体向上、深蹲和腹部锻炼等动作。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用逐帧日志,记录输入形状、类别计数和处理速度。跟踪调用本身始终不会输出日志。

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

参数类型默认值说明
trackerstr'tracktrack.yaml'指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。
conffloat0.25设置检测的置信度阈值;较低的值允许跟踪更多物体,但可能会包含误检。
ioufloat0.7设置用于筛除重叠检测结果的交并比 (IoU) 阈值。
classeslistNone按类别索引筛选结果。例如,classes=[0, 2, 3] 只跟踪指定类别。
devicestrNone指定推理设备(例如 cpu、cuda:0 或 0)。用户可以选择 CPU、特定 GPU 或其他计算设备来运行模型。
imgszint or tuple640目标推理图像尺寸:正方形图像使用整数,或使用 (height, width) 对。图像尺寸会调整为模型步幅的整数倍。
max_detint300跟踪前每帧保留的最大检测数量,用于限制解决方案在密集场景中处理的物体数量。
quantizeint or strNone推理精度:对于 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/未设置 (FP32);其他格式则采用其模型文件和运行时选择的精度。替代已弃用的 half 标志。

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

参数类型默认值说明
showboolFalse如果 True,则在窗口中显示带标注的图像或视频。适用于在开发或测试期间即时查看结果。
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)
    
    cap.release()
    cv2.destroyAllWindows()

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

  • 使用 Ultralytics YOLO26 进行锻炼监测有以下几项主要好处:

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

    你可以观看 YouTube 视频演示,了解这些优势如何发挥作用。

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

  • 可以,Ultralytics YOLO26 可以适配自定义锻炼计划。AIGym 类通过 up_angle、down_angle 和 kpts 参数检测锻炼重复次数。你可以指定关键点和角度,以检测特定锻炼。下面是一个配置示例:

    from ultralytics import solutions
    
    gym = solutions.AIGym(
        line_width=2,
        show=True,
        kpts=[6, 8, 10],  # 用于俯卧撑,也可以自定义为其他锻炼
    )

    如需详细了解如何设置参数,请参阅参数 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()

    此配置会将监测视频写入输出文件,方便你之后回顾锻炼表现,或分享给教练以获取更多反馈。

评论