使用锻炼监测Ultralytics YOLOv8
通过姿势估算监测锻炼 Ultralytics YOLOv8通过实时准确地跟踪关键的身体地标和关节,增强了运动评估功能。这项技术可提供有关锻炼姿势的即时反馈、跟踪锻炼程序并测量性能指标,从而优化用户和教练的训练课程。
观看: 使用Ultralytics YOLOv8 监测锻炼情况 | 俯卧撑、引体向上、腹肌锻炼
锻炼监测的优势?
- 优化性能:根据监测数据定制锻炼计划,以获得更好的效果。
- 实现目标:跟踪和调整健身目标,以取得可衡量的进展。
- 个性化:根据个人数据定制锻炼计划,提高效率。
- 健康意识:及早发现表明存在健康问题或训练过度的模式。
- 知情决策:以数据为依据,做出调整常规和设定现实目标的决定。
真实世界的应用
锻炼监测 | 锻炼监测 |
---|---|
俯卧撑计数 | 引体向上计数 |
锻炼监测示例
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()
支持
支持 "俯卧撑"、"引体向上 "和 "腹肌锻炼"。
关键点地图
论据 AIGym
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
kpts_to_check |
list |
None |
三个关键点索引列表,用于计算特定的锻炼,之后是关键点地图 |
line_thickness |
int |
2 |
绘制线条的厚度。 |
view_img |
bool |
False |
显示图像的标志。 |
pose_up_angle |
float |
145.0 |
向上 "姿势的角度阈值。 |
pose_down_angle |
float |
90.0 |
俯卧 "姿势的角度阈值。 |
pose_type |
str |
pullup |
要检测的姿势类型 ('pullup ', pushup , abworkout , squat ). |
论据 model.predict
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
source |
str |
'ultralytics/assets' |
图像或视频的源目录 |
conf |
float |
0.25 |
检测对象置信度阈值 |
iou |
float |
0.7 |
NMS 的 "相交大于结合"(IoU)阈值 |
imgsz |
int or tuple |
640 |
图像尺寸标量或(高,宽)列表,即(640,480) |
half |
bool |
False |
使用半精度 (FP16) |
device |
None or str |
None |
设备上运行,即cuda device=0/1/2/3 或 device=cpu |
max_det |
int |
300 |
每幅图像的最大检测次数 |
vid_stride |
bool |
False |
视频帧速率跨度 |
stream_buffer |
bool |
False |
缓冲所有流媒体帧(真)或返回最新帧(假) |
visualize |
bool |
False |
可视化模型特征 |
augment |
bool |
False |
对预测源进行图像增强 |
agnostic_nms |
bool |
False |
不分等级的 NMS |
classes |
list[int] |
None |
按类别筛选结果,即 classes=0,或 classes=[0,2,3] |
retina_masks |
bool |
False |
使用高分辨率分割掩膜 |
embed |
list[int] |
None |
返回给定层的特征向量/嵌入值 |
论据 model.track
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
source |
im0 |
None |
图像或视频的源目录 |
persist |
bool |
False |
帧与帧之间的持久轨迹 |
tracker |
str |
botsort.yaml |
跟踪方法 "bytetrack "或 "botsort |
conf |
float |
0.3 |
置信度阈值 |
iou |
float |
0.5 |
借据阈值 |
classes |
list |
None |
按类别筛选结果,即 classes=0,或 classes=[0,2,3] |
verbose |
bool |
True |
显示物体跟踪结果 |
常见问题
如何使用Ultralytics YOLOv8 监控我的锻炼?
要使用Ultralytics YOLOv8 监测锻炼情况,可以利用姿势估计功能实时跟踪和分析关键的身体地标和关节。这样,您就可以收到有关锻炼姿势、重复次数和衡量性能指标的即时反馈。您可以先使用所提供的示例代码进行俯卧撑、引体向上或腹肌锻炼,如图所示:
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()
有关进一步的自定义和设置,请参阅文档中的AIGym部分。
使用Ultralytics YOLOv8 进行锻炼监测有什么好处?
使用Ultralytics YOLOv8 进行锻炼监测有几大好处:
- 优化性能:根据监测数据定制锻炼计划,可以取得更好的效果。
- 实现目标:轻松跟踪和调整健身目标,取得可衡量的进展。
- 个性化:根据个人数据定制锻炼计划,达到最佳效果。
- 健康意识:及早发现表明潜在健康问题或过度训练的模式。
- 知情决策:以数据为依据做出决策,调整常规工作,制定切实可行的目标。
您可以观看YouTube 视频演示,了解这些优势的实际效果。
Ultralytics YOLOv8 在检测和跟踪演习方面的准确性如何?
Ultralytics YOLOv8 由于具有最先进的姿态估计功能,它在检测和跟踪运动方面非常准确。它能准确跟踪关键的身体地标和关节,提供有关运动形式和性能指标的实时反馈。该模型的预训练权重和稳健架构确保了高精度和高可靠性。有关真实世界的示例,请查看文档中的真实世界应用部分,其中展示了俯卧撑和引体向上计数。
我可以使用Ultralytics YOLOv8 来定制锻炼程序吗?
是的,Ultralytics YOLOv8 可以改编成定制的锻炼程序。""是的。 AIGym
类支持不同的姿势类型,如 "俯卧撑"、"引体向上 "和 "腹肌锻炼"。您可以指定关键点和角度来检测特定的练习。下面是一个设置示例:
from ultralytics import solutions
gym_object = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="squat",
kpts_to_check=[6, 8, 10],
)
有关设置参数的更多详情,请参阅 论据 AIGym
部分。这种灵活性使您可以监控各种练习,并根据自己的需要定制例程。
如何使用Ultralytics YOLOv8 保存锻炼监控输出?
要保存运动监控输出,可以修改代码,加入一个视频写入器,保存处理过的帧。下面是一个例子:
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()
此设置可将监控视频写入输出文件。有关详情,请参阅 "使用保存输出进行锻炼监控"部分。
创建于 2023-12-02,更新于 2024-07-05
作者:glenn-jocher(12)、ambitious-octopus(1)、IvorZhu331(1)、RizwanMunawar(4)