Skip to content

使用Ultralytics YOLO11进行健身监控

通过Ultralytics YOLO11进行姿态估计的健身监控,能够实时准确追踪关键身体标志点和关节,从而提升运动评估的准确性。这项技术提供即时反馈,追踪健身计划,并测量表现指标,为用户和教练优化训练课程。



观看: 使用Ultralytics YOLO11进行健身监控 | 俯卧撑, 引体向上, 腹部训练

健身监控的优势?

  • 优化表现: 根据监控数据定制训练,以获得更好的效果。
  • 目标达成: 追踪并调整健身目标,实现可衡量的进步。
  • 个性化: 根据个人数据定制训练计划,提高有效性。
  • 健康意识: 早期检测可能的健康问题或过度训练的模式。
  • 明智决策: 基于数据调整训练计划和设定现实目标。

实际应用

健身监控 健身监控
俯卧撑计数 引体向上计数
俯卧撑计数 引体向上计数

健身监控示例

import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "错误读取视频文件"
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(
    model="yolo11n-pose.pt",
    show=True,
    kpts=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("视频帧为空或视频处理已成功完成。")
        break
    im0 = gym.monitor(im0)

cv2.destroyAllWindows()
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "错误读取视频文件"
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(
    show=True,
    kpts=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("视频帧为空或视频处理已成功完成。")
        break
    im0 = gym.monitor(im0)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

关键点映射

关键点顺序 Ultralytics YOLO11 姿态

AIGym参数

名称 类型 默认值 描述
kpts list None 三个关键点索引的列表,用于计数特定健身动作,跟随关键点映射
line_width int 2 绘制的线条的厚度。
show bool False 显示图像的标志。
up_angle float 145.0 'up'姿势的角度阈值。
down_angle float 90.0 'down'姿势的角度阈值。

model.predict 参数

参数 类型 默认值 描述
source str 'ultralytics/assets' 指定推理的数据源。可以是图像路径、视频文件、目录、URL或实时视频流的设备ID。支持多种格式和数据源,适用于不同类型的输入
conf float 0.25 设置检测的最小置信度阈值。置信度低于此阈值的检测对象将被忽略。调整此值有助于减少误报。
iou float 0.7 交并比 (IoU) 用于非极大值抑制 (NMS) 的阈值。较低的值通过消除重叠框来减少检测数量,有助于减少重复。
imgsz int or tuple 640 定义推理的图像尺寸。可以是单个整数 640 用于方形缩放,或 (高度, 宽度) 元组。适当的尺寸可以提高检测的准确性和处理速度。
half bool False 启用半精度 (FP16) 推理,这可以在支持的GPU上加速模型推理,对准确性影响最小。
device str None 指定推理设备(例如,cpu, cuda:00)。允许用户在CPU、特定GPU或其他计算设备之间选择模型执行。
max_det int 300 每张图像允许的最大检测数量。限制模型在一次推理中可以检测到的对象总数,防止在密集场景中输出过多。
vid_stride int 1 视频输入的帧步长。允许跳过视频中的帧以加快处理速度,代价是时间分辨率降低。值为1处理每一帧,较高的值跳过帧。
stream_buffer bool False 确定是否为视频流队列传入帧。如果为 False,旧帧会被丢弃以容纳新帧(优化用于实时应用)。如果为 True,新帧会被缓冲,确保没有帧被跳过,但如果推理FPS低于流FPS,会导致延迟。
visualize bool False 激活推理过程中模型特征的可视化,提供模型“看到”的内容的洞察。有助于调试和模型解释。
augment bool False 启用预测时的测试时间增强 (TTA),可能会提高检测的鲁棒性,但会牺牲推理速度。
agnostic_nms bool False 启用类不可知的非极大值抑制(NMS),合并不同类别的重叠框。在多类别检测场景中,类别重叠常见时非常有用。
classes list[int] None 过滤预测结果为一组类别ID。只有属于指定类别的检测结果会被返回。在多类别检测任务中,专注于相关对象时非常有用。
retina_masks bool False 如果模型可用,使用高分辨率分割掩码。这可以提高分割任务中的掩码质量,提供更精细的细节。
embed list[int] None 指定从中提取特征向量或嵌入的层。对于聚类或相似性搜索等下游任务非常有用。

model.track 参数

参数 类型 默认值 描述
source str None 指定图像或视频的源目录。支持文件路径和URL。
persist bool False 启用帧间对象的持续跟踪,在视频序列中保持ID一致。
tracker str botsort.yaml 指定要使用的跟踪算法,例如 bytetrack.yamlbotsort.yaml
conf float 0.3 设置检测的置信度阈值;较低的值允许更多对象被跟踪,但可能包含误报。
iou float 0.5 设置用于过滤重叠检测的交并比 (IoU) 阈值。
classes list None 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定的类别。
verbose bool True 控制跟踪结果的显示,提供被跟踪对象的视觉输出。

常见问题

如何使用 Ultralytics YOLO11 监控我的锻炼?

要使用 Ultralytics YOLO11 监控您的锻炼,您可以利用姿态估计功能实时跟踪和分析关键身体标志和关节。这使您能够即时获得关于锻炼姿势的反馈,计算重复次数并测量性能指标。您可以从提供的俯卧撑、引体向上或腹部锻炼的示例代码开始:

import cv2

from ultralytics import solutions

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 = 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 video processing has been successfully completed.")
        break
    im0 = gym.monitor(im0)

cv2.destroyAllWindows()

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

使用 Ultralytics YOLO11 进行锻炼监控的好处是什么?

使用 Ultralytics YOLO11 进行锻炼监控提供了几个关键好处:

  • 优化性能: 根据监控数据调整锻炼,可以取得更好的效果。
  • 目标达成: 轻松跟踪和调整健身目标,以实现可衡量的进展。
  • 个性化: 根据您的个人数据获得定制的锻炼计划,以实现最佳效果。
  • 健康意识: 早期检测可能表明潜在健康问题或过度训练的模式。
  • 明智决策: 根据数据驱动做出调整常规和设定现实目标的决策。

您可以观看 YouTube 视频演示 以了解这些好处。

Ultralytics YOLO11 在检测和跟踪锻炼时的准确性如何?

Ultralytics YOLO11 由于其先进的姿态估计能力,在检测和跟踪锻炼时非常准确。它可以准确跟踪关键身体标志和关节,提供关于锻炼姿势和性能指标的实时反馈。模型的预训练权重和稳健架构确保了高 精度 和可靠性。有关实际示例,请查看文档中的 实际应用 部分,展示了俯卧撑和引体向上的计数。

我可以将 Ultralytics YOLO11 用于自定义锻炼程序吗?

是的,Ultralytics YOLO11 可以适应自定义锻炼程序。AIGym 类支持不同的姿态类型,如 "pushup"、"pullup" 和 "abworkout"。您可以指定关键点和角度来检测特定锻炼。以下是一个示例设置:

from ultralytics import solutions

gym = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[6, 8, 10],
)

有关设置参数的更多详细信息,请参阅 参数 AIGym 部分。这种灵活性使您能够监控各种锻炼并根据您的需求自定义程序。

如何使用 Ultralytics YOLO11 保存锻炼监控输出?

要保存锻炼监控输出,您可以修改代码以包含一个视频写入器,该写入器保存处理后的帧。以下是一个示例:

import cv2

from ultralytics import solutions

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 = 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 video processing has been successfully completed.")
        break
    im0 = gym.monitor(im0)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

此设置将监控后的视频写入输出文件。有关更多详细信息,请参阅 使用 Ultralytics YOLO11 进行锻炼监控并保存输出 部分。


📅 Created 10 months ago ✏️ Updated 9 days ago

Comments