Ultralytics YOLO11을 사용한 운동 모니터링
Ultralytics YOLO11을 사용한 자세 추정을 통해 운동을 모니터링하면 주요 신체 랜드마크와 관절을 실시간으로 정확하게 추적하여 운동 평가를 향상시킬 수 있습니다. 이 기술은 운동 자세에 대한 즉각적인 피드백을 제공하고, 운동 루틴을 추적하며, 성능 지표를 측정하여 사용자와 트레이너 모두를 위한 훈련 세션을 최적화합니다.
참고: Ultralytics YOLO를 이용한 운동 자세 모니터링 방법 | 스쿼트, 레그 익스텐션, 팔굽혀펴기 등
운동 모니터링의 장점
- 최적화된 성능: 더 나은 결과를 위해 모니터링 데이터를 기반으로 운동을 조정합니다.
- 목표 달성: 측정 가능한 진행 상황을 위해 피트니스 목표를 추적하고 조정합니다.
- 개인화: 효과적인 운동을 위해 개별 데이터를 기반으로 맞춤화된 운동 계획을 제공합니다.
- 건강 인식: 건강 문제 또는 과도한 훈련을 나타내는 패턴을 조기에 감지합니다.
- 정보에 입각한 의사 결정: 루틴을 조정하고 현실적인 목표를 설정하기 위한 데이터 기반 의사 결정.
실제 응용 프로그램
운동 모니터링 | 운동 모니터링 |
---|---|
![]() |
![]() |
팔굽혀펴기 횟수 세기 | 턱걸이 횟수 세기 |
Ultralytics YOLO를 사용한 운동 모니터링
# Run a workout example
yolo solutions workout show=True
# Pass a source video
yolo solutions workout source="path/to/video.mp4"
# Use keypoints for pushups
yolo solutions workout kpts="[6, 8, 10]"
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
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_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init AIGym
gym = solutions.AIGym(
show=True, # display the frame
kpts=[6, 8, 10], # keypoints 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 processing is complete.")
break
results = gym(im0)
# print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
키포인트 맵
AIGym
인수
다음은 테이블에 AIGym
인수입니다.
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
model |
str |
None |
Ultralytics YOLO 모델 파일의 경로입니다. |
up_angle |
float |
145.0 |
'위' 자세에 대한 각도 임계값입니다. |
down_angle |
float |
90.0 |
'아래' 자세에 대한 각도 임계값입니다. |
kpts |
list[int, int, int] |
'[6, 8, 10]' |
운동 모니터링에 사용되는 키포인트 목록입니다. 이러한 키포인트는 팔굽혀펴기, 턱걸이, 스쿼트, 복근 운동과 같은 운동을 위한 어깨, 팔꿈치, 손목과 같은 신체 관절 또는 부위에 해당합니다. |
에 지정되어 있습니다. AIGym
솔루션은 또한 다양한 객체 추적 매개변수를 지원합니다.
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
사용할 추적 알고리즘을 지정합니다 (예: bytetrack.yaml 또는 botsort.yaml . |
conf |
float |
0.3 |
검출에 대한 신뢰도 임계값을 설정합니다. 값이 낮을수록 더 많은 객체를 추적할 수 있지만 오탐지가 포함될 수 있습니다. |
iou |
float |
0.5 |
겹치는 검출을 필터링하기 위한 IoU (Intersection over Union) 임계값을 설정합니다. |
classes |
list |
None |
클래스 인덱스별로 결과를 필터링합니다. 예를 들어, classes=[0, 2, 3] 지정된 클래스만 추적합니다. |
verbose |
bool |
True |
추적 결과 표시를 제어하여 추적된 객체의 시각적 출력을 제공합니다. |
device |
str |
None |
추론을 위한 장치를 지정합니다 (예: cpu , cuda:0 또는 0 ). 사용자는 모델 실행을 위해 CPU, 특정 GPU 또는 기타 컴퓨팅 장치 중에서 선택할 수 있습니다. |
또한 다음과 같은 시각화 설정을 적용할 수 있습니다.
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
show |
bool |
False |
만약 True , 어노테이션이 적용된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백에 유용합니다. |
line_width |
None or int |
None |
경계 상자의 선 너비를 지정합니다. 만약 None , 선 너비는 이미지 크기에 따라 자동으로 조정됩니다. 명확성을 위해 시각적 사용자 정의를 제공합니다. |
show_conf |
bool |
True |
레이블과 함께 각 감지에 대한 신뢰도 점수를 표시합니다. 각 감지에 대한 모델의 확신에 대한 통찰력을 제공합니다. |
show_labels |
bool |
True |
시각적 출력에서 각 감지에 대한 레이블을 표시합니다. 감지된 객체에 대한 즉각적인 이해를 제공합니다. |
FAQ
Ultralytics YOLO11을 사용하여 워크아웃을 어떻게 모니터링합니까?
Ultralytics YOLO11을 사용하여 운동을 모니터링하려면 포즈 추정 기능을 활용하여 주요 신체 랜드마크와 관절을 실시간으로 추적하고 분석할 수 있습니다. 이를 통해 운동 자세에 대한 즉각적인 피드백을 받고, 반복 횟수를 세고, 성능 지표를 측정할 수 있습니다. 다음과 같이 팔굽혀펴기, 턱걸이 또는 복근 운동에 대해 제공된 예제 코드를 사용하여 시작할 수 있습니다.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.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 processing is complete.")
break
results = gym(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], # For pushups - can be customized for other exercises
)
인수 설정에 대한 자세한 내용은 다음을 참조하세요. 인수 AIGym
섹션. 이 유연성을 통해 다양한 운동을 모니터링하고 사용자의 루틴을 사용자 정의할 수 있습니다. 피트니스 목표.
Ultralytics YOLO11을 사용하여 운동 모니터링 출력을 어떻게 저장할 수 있습니까?
운동 모니터링 출력을 저장하려면 처리된 프레임을 저장하는 비디오 작성기를 포함하도록 코드를 수정할 수 있습니다. 다음은 예입니다.
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.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 processing is complete.")
break
results = gym(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
이 설정은 모니터링된 비디오를 출력 파일에 저장하여 나중에 운동 성과를 검토하거나 트레이너와 공유하여 추가 피드백을 받을 수 있도록 합니다.