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
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()
Hỗ trợ
Hỗ trợ "chống đẩy", "pullup" và "abworkout"
Bản đồ KeyPoints
Lập luận AIGym
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 |
line_thickness |
int |
2 |
Độ dày của các đường được vẽ. |
view_img |
bool |
False |
Gắn cờ để hiển thị hình ảnh. |
pose_up_angle |
float |
145.0 |
Ngưỡng góc cho tư thế 'lên'. |
pose_down_angle |
float |
90.0 |
Ngưỡng góc cho tư thế 'xuống'. |
pose_type |
str |
pullup |
Loại tư thế để phát hiện ('pullup ', pushup , abworkout , squat ). |
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 các loại đầu vào khác nhau. |
conf |
float |
0.25 |
Đặt ngưỡng tin cậy tối thiểu để 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 dương tính giả. |
iou |
float |
0.7 |
Ngưỡng giao nhau trên công đoàn (IoU) cho triệt tiêu không tối đa (NMS). 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 or 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 bộ (chiều cao, chiều rộng). Kích thước phù hợp có thể cải thiện độ chính xác phát hiện và tốc độ xử lý. |
half |
bool |
False |
Cho phép suy luận nửa chính xác (FP16), có thể tăng tốc độ suy luận mô hình trên các 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ể GPUhoặc các thiết bị điện toán khác để thực thi mô hình. |
max_det |
int |
300 |
Số lần phát hiện tối đa được phép cho 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 |
Sải chân 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í phân giải tạm thời. Giá trị 1 xử lý mọi khung, giá trị cao hơn bỏ qua khung. |
stream_buffer |
bool |
False |
Xác định xem tất cả các khung hình có nên được lưu vào bộ đệm khi xử lý luồng video hay không (True ), hoặc nếu mô hình sẽ trả về khung hình gần đây nhất (False ). Hữu ích cho các ứng dụng thời gian thực. |
visualize |
bool |
False |
Kích hoạt 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à giải thích mô hình. |
augment |
bool |
False |
Cho phép tăng thời gian kiểm tra (TTA) cho các dự đoán, có khả năng cải thiện độ mạnh phát hiện với chi phí là tốc độ suy luận. |
agnostic_nms |
bool |
False |
Cho phép ngăn chặn không tối đa bất khả tri lớp (NMS), kết hợp 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 cho một tập hợp ID lớp. Chỉ những phát hiện thuộc 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 nhiệm vụ phát hiện nhiều lớp. |
retina_masks |
bool |
False |
Sử dụng mặt nạ phân đoạn có độ phân giải cao nếu có sẵn trong mô hình. Điều này có thể nâng cao chất lượng mặt nạ cho các nhiệm vụ phân đoạn, cung cấp chi tiết tốt hơn. |
embed |
list[int] |
None |
Chỉ định các lớp để trích xuất các vectơ tính năng hoặc nhúng. Hữu ích cho các tác vụ xuôi dòng như phân cụm hoặc tìm kiếm tương tự. |
Lập luận model.track
Lý lẽ | Kiểu | Mặc định | Sự miêu tả |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml hoặc botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
FAQ
Làm cách nào để theo dõi quá trình tập luyện của tôi bằng cách sử dụng Ultralytics YOLOv8?
Để theo dõi quá trình tập luyện của bạn bằng cách sử dụng Ultralytics YOLOv8, bạn có thể sử dụng khả năng ước tính tư thế để theo dõi và phân tích các mốc và khớp cơ thể chính trong thời gian thực. Điều này cho phép bạn nhận được phản hồi tức thì về biểu mẫu bài tập của mình, đếm số lần lặp lại và đo lường các chỉ số hiệu suất. Bạn có thể bắt đầu bằng cách sử dụng mã ví dụ được cung cấp cho bài tập chống đẩy, kéo hoặc tập cơ bụng như được hiển thị:
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()
Để 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 YOLOv8 để theo dõi tập luyện?
Sử dụng Ultralytics YOLOv8 Để theo dõi tập luyện cung cấp một số lợi ích chính:
- Tối ưu hóa hiệu suất: Bằng cách điều chỉnh tập luyện dựa trên dữ liệu theo dõi, bạn có thể đạt được kết quả tốt hơn.
- Thành tựu mục tiêu: Dễ dàng theo dõi và điều chỉnh mục tiêu tập thể dục để đạt được tiến độ có thể đo lường được.
- Cá nhân: 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 để có hiệu quả tối ưu.
- 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 tiềm ẩn hoặc 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 mục tiêu thực tế.
Bạn có thể xem video trình diễn trên YouTube để xem những lợi ích này đang hoạt động.
Độ chính xác như thế nào Ultralytics YOLOv8 trong việc phát hiện và theo dõi các bài tập?
Ultralytics YOLOv8 có độ chính xác cao trong việc phát hiện và theo dõi các bài tập do khả năng ước tính tư thế hiện đại của nó. Nó có thể theo dõi chính xác các mốc và khớp cơ thể chính, cung cấp phản hồi thời gian thực về hình thức tập thể dục và số liệu hiệu suất. Trọng lượng được đào tạo trước và kiến trúc mạnh mẽ của mô hình đảm bảo độ chính xác và độ tin cậy cao. Để biết các ví dụ trong thế giới thực, hãy xem phần ứng dụng trong thế giới thực trong tài liệu, trong đó giới thiệu các lần chống đẩy và kéo lên.
Tôi có thể sử dụng không Ultralytics YOLOv8 cho thói quen tập luyện tùy chỉnh?
Có Ultralytics YOLOv8 có thể được điều chỉnh cho thói quen tập luyện tùy chỉnh. Các AIGym
Lớp học hỗ trợ các loại tư thế khác nhau như "chống đẩy", "kéo lên" và "tập luyện ab". Bạn có thể chỉ định các điểm chính và góc để phát hiện các bài tập cụ thể. Dưới đây là một thiết lập ví dụ:
from ultralytics import solutions
gym_object = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="squat",
kpts_to_check=[6, 8, 10],
)
Để biết thêm chi tiết về cách đặt đố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 các bài tập khác nhau và tùy chỉnh các thói quen dựa trên nhu cầu của bạn.
Làm cách nào để lưu đầu ra theo dõi tập luyện bằng cách sử dụng Ultralytics YOLOv8?
Để lưu đầu ra giám sát 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ý. Đây là một ví dụ:
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()
Thiết lập này ghi video được giám sát vào tệp đầu ra. Để biết thêm chi tiết, hãy tham khảo Giám sát tập luyện với lưu đầu ra phần.