Giám sát tập luyện bằng cách sử dụng Ultralytics YOLOv8 🚀
Theo dõi tập luyện thông qua ước tính tư thế với Ultralytics YOLOv8 Tăng cường đánh giá tập thể dục bằng cách theo dõi chính xác các mốc và khớp cơ thể chính trong thời gian thực. Công nghệ này cung cấp phản hồi tức thì về hình thức tập thể dục, theo dõi thói quen tập luyện và đo lường các chỉ số hiệu suất, tối ưu hóa các buổi đào tạo cho người dùng và huấn luyện viên.
Xem: Giám sát tập luyện bằng cách sử dụng Ultralytics YOLOv8 | Chống đẩy, kéo lên, tập luyện cơ bụng
Ưu điểm của giám sát tập luyện?
- Tối ưu hóa hiệu suất: Điều chỉnh các bài tập dựa trên dữ liệu theo dõi để có kết quả tốt hơn.
- Thành tựu mục tiêu: Theo dõi và điều chỉnh mục tiêu tập thể dục để có tiến độ có thể đo lường được.
- Cá nhân: Kế hoạch tập luyện tùy chỉnh dựa trên dữ liệu cá nhân để đạt hiệu quả.
- Nhận thức về sức khỏe: Phát hiện sớm các mô hình cho thấy các vấn đề sức khỏe hoặc tập luyện quá sức.
- Quyết định sáng suốt: Các quyết định dựa trên dữ liệu để điều chỉnh thói quen và thiết lập các mục tiêu thực tế.
Ứng dụng trong thế giới thực
Giám sát tập luyện | Giám sát tập luyện |
---|---|
Đếm chống đẩy | Đếm PullUps |
Ví dụ giám sát tập luyện
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Hỗ trợ
Hỗ trợ "chống đẩy", "pullup" và "abworkout"
Bản đồ KeyPoints
Lập luận set_args
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
kpts_to_check |
list |
None |
Danh sách ba chỉ số chính, để đếm bài tập cụ thể, tiếp theo là Bản đồ điểm chính |
view_img |
bool |
False |
Hiển thị khung với số đếm |
line_thickness |
int |
2 |
Tăng độ dày của giá trị đếm |
pose_type |
str |
pushup |
Tư thế cần được theo dõi, pullup và abworkout Cũng được hỗ trợ |
pose_up_angle |
int |
145 |
Giá trị Pose Up Angle |
pose_down_angle |
int |
90 |
Giá trị Pose Down Angle |
Lập luận model.predict
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Thư mục nguồn cho hình ảnh hoặc video |
conf |
float |
0.25 |
Ngưỡng tin cậy đối tượng để phát hiện |
iou |
float |
0.7 |
giao điểm trên ngưỡng hợp nhất (IoU) cho NMS |
imgsz |
int or tuple |
640 |
Kích thước hình ảnh dưới dạng vô hướng hoặc danh sách (h, w), tức là (640, 480) |
half |
bool |
False |
sử dụng độ chính xác một nửa (FP16) |
device |
None or str |
None |
thiết bị để chạy, tức là thiết bị cuda = 0/1/2/3 hoặc thiết bị = CPU |
max_det |
int |
300 |
Số lần phát hiện tối đa trên mỗi hình ảnh |
vid_stride |
bool |
False |
Sải bước tốc độ khung hình video |
stream_buffer |
bool |
False |
đệm tất cả các khung hình phát trực tuyến (True) hoặc trả về khung hình gần đây nhất (False) |
visualize |
bool |
False |
Trực quan hóa các tính năng của mô hình |
augment |
bool |
False |
Áp dụng tăng cường hình ảnh cho các nguồn dự đoán |
agnostic_nms |
bool |
False |
NMS bất khả tri lớp |
classes |
list[int] |
None |
Lọc kết quả theo lớp, tức là lớp = 0 hoặc lớp = [0,2,3] |
retina_masks |
bool |
False |
Sử dụng mặt nạ phân đoạn có độ phân giải cao |
embed |
list[int] |
None |
Trả về các vectơ / nhúng tính năng từ các lớp đã cho |
Lập luận model.track
Tên | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
source |
im0 |
None |
Thư mục nguồn cho hình ảnh hoặc video |
persist |
bool |
False |
Các rãnh liên tục giữa các khung hình |
tracker |
str |
botsort.yaml |
Phương pháp theo dõi 'bytetrack' hoặc 'botsort' |
conf |
float |
0.3 |
Ngưỡng tin cậy |
iou |
float |
0.5 |
Ngưỡng IOU |
classes |
list |
None |
Lọc kết quả theo lớp, tức là lớp = 0 hoặc lớp = [0,2,3] |
verbose |
bool |
True |
Hiển thị kết quả theo dõi đối tượng |