Bỏ qua nội dung

Theo dõi bài tập bằng cách sử dụng Ultralytics YOLO11

Open Workouts Monitoring In Colab

Theo dõi các bài tập thông qua ước tính tư thế với Ultralytics YOLO11 giúp tăng cường đánh giá bài tập bằng cách theo dõi chính xác các điểm mốc và khớp chính của cơ thể theo thời gian thực. Công nghệ này cung cấp phản hồi tức thời về hình thức tập luyện, theo dõi thói quen tập luyện và đo lường số liệu hiệu suất, tối ưu hóa các buổi tập luyện cho cả người dùng và huấn luyện viên.



Đồng hồ: Workouts Monitoring using Ultralytics YOLO11 | Push-ups, Pull-ups, Ab Workouts

Lợi ích của việc theo dõi quá trình tập luyện?

  • Hiệu suất được tối ưu hóa: Điều chỉnh bài tập luyện dựa trên dữ liệu theo dõi để có kết quả tốt hơn.
  • Đạt được mục tiêu: Theo dõi và điều chỉnh mục tiêu thể dục để có tiến triển rõ rệt.
  • Cá nhân hóa: Kế hoạch tập luyện được 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 dấu hiệu cho thấy vấn đề sức khỏe hoặc tập luyện quá sức.
  • Quyết định sáng suốt: Quyết định dựa trên dữ liệu để điều chỉnh thói quen và đặt ra các mục tiêu thực tế.

Ứng dụng trong thế giới thực

Theo dõi tập luyện Theo dõi tập luyện
Đếm PushUp Đếm PullUps
Đếm PushUp Đếm PullUps

Ví dụ về theo dõi bài tập luyện

# Run a workout example
yolo solutions workout show=True

# Pass a source video
yolo solutions workout source="path/to/video/file.mp4"

# Use keypoints for pushups
yolo solutions workout kpts=[6, 8, 10]
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
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init AIGym
gym = solutions.AIGym(
    show=True,  # Display the frame
    kpts=[6, 8, 10],  # keypoints index of person for monitoring specific exercise, by default it's for pushup
    model="yolo11n-pose.pt",  # Path to the YOLO11 pose estimation model file
    # line_width=2,  # Adjust the line width for bounding boxes and text display
)

# Process video
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()

Bản đồ KeyPoints

Đặt hàng keyPoints Ultralytics YOLO11 Tư thế

Lập luận AIGym

Tên Kiểu Mặc định Sự miêu tả
kpts list None Danh sách ba chỉ số điểm chính, để đếm bài tập cụ thể, theo sau là Bản đồ điểm chính
line_width int 2 Độ dày của các đường vẽ.
show bool False Đánh dấu để hiển thị hình ảnh.
up_angle float 145.0 Ngưỡng góc cho tư thế 'lên'.
down_angle float 90.0 Ngưỡng góc cho tư thế 'xuống'.
model str None Đường dẫn đến Ultralytics YOLO Tệp mô hình tư thế

Lập luận model.predict

Lý lẽ Kiểu Mặc định Sự miêu tả
source str 'ultralytics/assets' Chỉ định nguồn dữ liệu để suy luận. Có thể là đường dẫn hình ảnh, tệp video, thư mục, URL hoặc ID thiết bị cho nguồn cấp dữ liệu trực tiếp. Hỗ trợ nhiều định dạng và nguồn, cho phép ứng dụng linh hoạt trên nhiều loại đầu vào khác nhau .
conf float 0.25 Đặt ngưỡng tin cậy tối thiểu cho các phát hiện. Các đối tượng được phát hiện với độ tin cậy dưới ngưỡng này sẽ bị bỏ qua. Điều chỉnh giá trị này có thể giúp giảm các kết quả dương tính giả.
iou float 0.7 Ngưỡng Giao điểm qua Liên hợp (IoU) cho Không triệt tiêu tối đa (NMS). Các giá trị thấp hơn dẫn đến ít phát hiện hơn bằng cách loại bỏ các hộp chồng chéo, hữu ích để giảm trùng lặp.
imgsz int hoặc tuple 640 Xác định kích thước hình ảnh để suy luận. Có thể là một số nguyên duy nhất 640 để thay đổi kích thước hình vuông hoặc một bộ (chiều cao, chiều rộng). Kích thước phù hợp có thể cải thiện khả năng phát hiện sự chính xác và tốc độ xử lý.
half bool False Cho phép suy luận bán chính xác (FP16), có thể tăng tốc suy luận mô hình trên GPU được hỗ trợ với tác động tối thiểu đến độ chính xác.
device str None Chỉ định thiết bị để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng lựa chọn giữa CPU , một cụ thể GPU hoặc các thiết bị tính toán khác để thực hiện mô hình.
batch int 1 Chỉ định kích thước lô để suy luận (chỉ hoạt động khi nguồn là một thư mục, tập tin video hoặc .txt tài liệu). Kích thước lô lớn hơn có thể cung cấp thông lượng cao hơn, rút ngắn tổng thời gian cần thiết cho quá trình suy luận.
max_det int 300 Số lượng phát hiện tối đa được phép trên mỗi hình ảnh. Giới hạn tổng số đối tượng mà mô hình có thể phát hiện trong một suy luận duy nhất, ngăn chặn đầu ra quá mức trong các cảnh dày đặc.
vid_stride int 1 Bước nhảy khung hình cho đầu vào video. Cho phép bỏ qua các khung hình trong video để tăng tốc độ xử lý với chi phí là độ phân giải thời gian. Giá trị 1 xử lý mọi khung hình, giá trị cao hơn bỏ qua các khung hình.
stream_buffer bool False Xác định xem có nên xếp hàng các khung hình đến cho luồng video hay không. Nếu False, old frames get dropped to accommodate new frames (optimized for real-time applications). If `True', queues new frames in a buffer, ensuring no frames get skipped, but will cause latency if inference FPS is lower than stream FPS.
visualize bool False Kích hoạt khả năng trực quan hóa các tính năng của mô hình trong quá trình suy luận, cung cấp thông tin chi tiết về những gì mô hình đang "nhìn thấy". Hữu ích cho việc gỡ lỗi và diễn giải mô hình.
augment bool False Cho phép tăng cường thời gian thử nghiệm (TTA) để dự đoán, có khả năng cải thiện độ mạnh mẽ của phát hiện với cái giá phải trả là tốc độ suy luận.
agnostic_nms bool False Cho phép Non-Maximum Suppression (NMS) không phân biệt lớp, hợp nhất các hộp chồng chéo của các lớp khác nhau. Hữu ích trong các tình huống phát hiện nhiều lớp trong đó sự chồng chéo lớp là phổ biến.
classes list[int] None Lọc các dự đoán thành một tập hợp ID lớp. Chỉ các phát hiện thuộc về các lớp được chỉ định mới được trả về. Hữu ích để tập trung vào các đối tượng có liên quan trong các tác vụ phát hiện nhiều lớp.
retina_masks bool False Trả về mặt nạ phân đoạn có độ phân giải cao. Các mặt nạ trả về (masks.data) sẽ khớp với kích thước hình ảnh gốc nếu được bật. Nếu bị tắt, chúng sẽ có kích thước hình ảnh được sử dụng trong quá trình suy luận.
embed list[int] None Chỉ định các lớp để trích xuất các vectơ đặc điểm hoặc nhúng . Hữu ích cho các tác vụ hạ lưu như phân cụm hoặc tìm kiếm sự tương đồng.
project str None Tên của thư mục dự án nơi đầu ra dự đoán được lưu nếu save được bật.
name str None Tên của lần chạy dự đoán. Được sử dụng để tạo một thư mục con trong thư mục dự án, nơi lưu trữ các đầu ra dự đoán nếu save được bật.

Lập luận model.track

Lý lẽ Kiểu Mặc định Sự miêu tả
source str None Chỉ định thư mục nguồn cho hình ảnh hoặc video. Hỗ trợ đường dẫn tệp và URL.
persist bool False Cho phép theo dõi liên tục các đối tượng giữa các khung hình, duy trì ID trên các chuỗi video.
tracker str botsort.yaml Chỉ định thuật toán theo dõi để sử dụng, ví dụ: bytetrack.yaml hoặc botsort.yaml.
conf float 0.3 Đặt ngưỡng tin cậy cho việc phát hiện; giá trị thấp hơn cho phép theo dõi nhiều đối tượng hơn nhưng có thể bao gồm các kết quả dương tính giả.
iou float 0.5 Đặt ngưỡng Giao điểm trên Liên hợp (IoU) để lọc các phát hiện chồng chéo.
classes list None Lọc kết quả theo chỉ số lớp. Ví dụ, classes=[0, 2, 3] chỉ theo dõi các lớp được chỉ định.
verbose bool True Kiểm soát việc hiển thị kết quả theo dõi, cung cấp hình ảnh trực quan về các đối tượng được theo dõi.

CÂU HỎI THƯỜNG GẶP

Làm thế nào để tôi theo dõi quá trình tập luyện của mình bằng cách sử dụng Ultralytics YOLO11 ?

To monitor your workouts using Ultralytics YOLO11, you can utilize the pose estimation capabilities to track and analyze key body landmarks and joints in real-time. This allows you to receive instant feedback on your exercise form, count repetitions, and measure performance metrics. You can start by using the provided example code for push-ups, pull-ups, or ab workouts as shown:

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()

Để tùy chỉnh và cài đặt thêm, bạn có thể tham khảo phần AIGym trong tài liệu.

Lợi ích của việc sử dụng là gì? Ultralytics YOLO11 để theo dõi quá trình tập luyện?

Sử dụng Ultralytics YOLO11 để theo dõi quá trình tập luyện mang lại một số lợi ích chính:

  • Hiệu suất được tối ưu hóa: Bằng cách điều chỉnh bài tập dựa trên dữ liệu theo dõi, bạn có thể đạt được kết quả tốt hơn.
  • Đạt được mục tiêu: Dễ dàng theo dõi và điều chỉnh mục tiêu thể dục để có tiến trình đo lường được.
  • Cá nhân hóa: Nhận kế hoạch tập luyện tùy chỉnh dựa trên dữ liệu cá nhân của bạn để đạt hiệu quả tối ưu.
  • Nhận thức về sức khỏe: Phát hiện sớm các dấu hiệu cho thấy các vấn đề sức khỏe tiềm ẩn hoặc tình trạng tập luyện quá sức.
  • Quyết định sáng suốt: Đưa ra quyết định dựa trên dữ liệu để điều chỉnh thói quen và đặt ra các mục tiêu thực tế.

Bạn có thể xem video hướng dẫn trên YouTube để thấy được những lợi ích này.

Độ chính xác là bao nhiêu? Ultralytics YOLO11 trong việc phát hiện và theo dõi các bài tập?

Ultralytics YOLO11 is highly accurate in detecting and tracking exercises due to its state-of-the-art pose estimation capabilities. It can accurately track key body landmarks and joints, providing real-time feedback on exercise form and performance metrics. The model's pretrained weights and robust architecture ensure high precision and reliability. For real-world examples, check out the real-world applications section in the documentation, which showcases push-ups and pull-ups counting.

Tôi có thể sử dụng Ultralytics YOLO11 để có bài tập luyện tùy chỉnh?

Đúng, Ultralytics YOLO11 có thể được điều chỉnh cho các thói quen tập luyện tùy chỉnh. AIGym class supports different pose types such as pushup, pullup, Và abworkout. You can specify keypoints and angles to detect specific exercises. Here is an example setup:

from ultralytics import solutions

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

Để biết thêm chi tiết về việc thiết lập đối số, hãy tham khảo Lập luận AIGym phần. Tính linh hoạt này cho phép bạn theo dõi nhiều bài tập khác nhau và tùy chỉnh thói quen dựa trên nhu cầu của bạn.

Làm thế nào tôi có thể lưu kết quả theo dõi quá trình tập luyện bằng cách sử dụng Ultralytics YOLO11 ?

Để lưu kết quả theo dõi quá trình tập luyện, bạn có thể sửa đổi mã để bao gồm trình ghi video lưu các khung hình đã xử lý. Sau đây là một ví dụ:

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()

Thiết lập này ghi video được theo dõi vào tệp đầu ra. Để biết thêm chi tiết, hãy tham khảo phần Theo dõi bài tập luyện với Lưu đầu ra .

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 4 ngày

Bình luận