使用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()
关键点映射
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:0 或 0 )。允许用户在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.yaml 或 botsort.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 进行锻炼监控并保存输出 部分。