Ultralytics YOLO26을 사용한 운동 모니터링#
Ultralytics YOLO26을 이용한 포즈 추정 기반 운동 모니터링은 주요 신체 랜드마크와 관절을 실시간으로 정확하게 추적하여 운동 평가를 향상합니다. 이 기술은 운동 자세에 대한 즉각적인 피드백을 제공하고, 운동 루틴을 추적하며, 성과 지표를 측정해 사용자와 트레이너 모두의 트레이닝 세션을 최적화합니다.
시청: Ultralytics YOLO로 운동 동작을 모니터링하는 방법 | 스쿼트, 레그 익스텐션, 팔굽혀펴기 등
운동 모니터링의 장점#
- 성능 최적화: 모니터링 데이터를 바탕으로 운동을 맞춤화하여 더 나은 결과를 얻습니다.
- 목표 달성: 측정 가능한 진척을 위해 피트니스 목표를 추적하고 조정합니다.
- 개인화: 효과를 높이기 위해 개인 데이터를 바탕으로 맞춤 운동 계획을 제공합니다.
- 건강 인식 향상: 건강 문제나 과도한 트레이닝을 나타내는 패턴을 조기에 감지합니다.
- 정보에 기반한 의사결정: 데이터를 바탕으로 루틴을 조정하고 현실적인 목표를 설정합니다.
실제 적용 사례#
| 운동 모니터링 | 운동 모니터링 |
|---|---|
![]() | ![]() |
| 푸시업 횟수 계산 | 풀업 횟수 계산 |
YOLO26으로 운동 모니터링하기#
AIGym 솔루션은 포즈 추정을 실행하고, 팔다리가 up_angle 임계값과 down_angle 임계값 사이에서 움직일 때 세 개의 주요 키포인트가 이루는 각도를 측정해 반복 횟수를 계산합니다. kpts를 사용하여 추적할 운동의 키포인트를 선택한 다음, Python API 또는 CLI를 사용해 동영상에 솔루션을 실행하세요.
# 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]"키포인트 맵#

AIGym 인수#
다음은 AIGym 인수 표입니다:
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 모델 파일의 경로입니다. |
up_angle | float | 145.0 | '위' 자세의 각도 임계값입니다. |
down_angle | float | 90.0 | '아래' 자세의 각도 임계값입니다. |
kpts | list[int] | [6, 8, 10] | 운동 모니터링에 사용할 키포인트 인덱스 3개의 목록입니다. 이 키포인트는 팔굽혀펴기, 턱걸이, 스쿼트 및 복근 운동과 같은 운동에 필요한 어깨, 팔꿈치, 손목 등의 신체 관절이나 부위에 해당합니다. |
line_width | int | 2 | Solution에서 그리는 상자, 키포인트 및 개수 표시의 선 두께입니다. |
verbose | bool | True | 프레임별 입력 형태, 클래스 개수 및 처리 속도 로그를 활성화합니다. 추적 호출 자체는 항상 로그를 출력하지 않습니다. |
AIGym 솔루션은 다양한 객체 추적 매개변수도 지원합니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 사용할 추적 알고리즘을 지정합니다. 기본 제공 옵션: botsort.yaml, bytetrack.yaml, ocsort.yaml, deepocsort.yaml, fasttrack.yaml, tracktrack.yaml. |
conf | float | 0.25 | 탐지에 대한 신뢰도 임계값을 설정합니다. 값을 낮추면 추적할 수 있는 객체가 늘어나지만 오탐이 포함될 수 있습니다. |
iou | float | 0.7 | 중복 탐지를 필터링하기 위한 교집합 대비 합집합 (IoU) 임계값을 설정합니다. |
classes | list | None | 클래스 인덱스로 결과를 필터링합니다. 예를 들어 classes=[0, 2, 3]은 지정된 클래스만 추적합니다. |
device | str | None | 추론에 사용할 장치를 지정합니다(예: cpu, cuda:0 또는 0). 사용자는 모델 실행에 사용할 CPU, 특정 GPU 또는 기타 연산 장치를 선택할 수 있습니다. |
imgsz | int or tuple | 640 | 추론 대상 이미지 크기입니다. 정사각형을 나타내는 정수 또는 (height, width) 쌍을 지정합니다. 모델 stride에 맞춰 형태가 조정됩니다. |
max_det | int | 300 | 추적 전에 프레임별로 유지할 최대 탐지 수를 지정하여 밀집된 장면에서 솔루션이 처리하는 객체 수를 제한합니다. |
quantize | int or str | None | 추론 정밀도입니다. PyTorch 및 TorchScript 모델의 경우 16 (FP16) 또는 32/미설정(FP32)을 사용합니다. 다른 형식은 아티팩트와 런타임에서 선택한 정밀도로 계산합니다. 더 이상 사용되지 않는 half 플래그를 대체합니다. |
또한 다음 시각화 설정을 적용할 수 있습니다.
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
show | bool | False | True이면 주석이 추가된 이미지나 비디오를 창에 표시합니다. 개발 또는 테스트 중 즉각적인 시각적 피드백을 얻는 데 유용합니다. |
show_labels | bool | True | 시각화 출력에 각 감지 결과의 레이블을 표시합니다. 감지된 객체를 즉시 파악할 수 있습니다. |
자주 묻는 질문#
Ultralytics YOLO26을 사용해 운동을 모니터링하려면 포즈 추정 기능을 활용하여 주요 신체 랜드마크와 관절을 실시간으로 추적하고 분석할 수 있습니다. 이를 통해 운동 자세에 대한 즉각적인 피드백을 받고, 반복 횟수를 계산하며, 성과 지표를 측정할 수 있습니다. 다음과 같이 제공된 푸시업, 풀업 또는 복근 운동 예제 코드로 시작할 수 있습니다.
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) cap.release() cv2.destroyAllWindows()추가적인 맞춤 설정과 설정에 관한 내용은 문서의 AIGym 섹션을 참조하세요.
운동 모니터링에 Ultralytics YOLO26을 사용하면 다음과 같은 주요 이점을 얻을 수 있습니다.
- 성능 최적화: 모니터링 데이터를 바탕으로 운동을 맞춤화하면 더 나은 결과를 얻을 수 있습니다.
- 목표 달성: 측정 가능한 진척을 위해 피트니스 목표를 쉽게 추적하고 조정할 수 있습니다.
- 개인화: 최적의 효과를 위해 개인 데이터를 바탕으로 맞춤 운동 계획을 받을 수 있습니다.
- 건강 인식 향상: 잠재적인 건강 문제나 과도한 트레이닝을 나타내는 패턴을 조기에 감지합니다.
- 정보에 기반한 의사결정: 데이터를 바탕으로 루틴을 조정하고 현실적인 목표를 설정할 수 있습니다.
이러한 이점이 실제로 어떻게 구현되는지 YouTube 동영상 데모를 시청할 수 있습니다.
예, Ultralytics YOLO26은 맞춤 운동 루틴에 맞게 조정할 수 있습니다.
AIGym클래스는up_angle,down_angle,kpts인수를 사용해 운동 반복 횟수를 감지합니다. 특정 운동을 감지하도록 키포인트와 각도를 지정할 수 있습니다. 다음은 설정 예제입니다.from ultralytics import solutions gym = solutions.AIGym( line_width=2, show=True, kpts=[6, 8, 10], # 푸시업용입니다. 다른 운동에 맞게 사용자 지정할 수 있습니다. )인수 설정에 관한 자세한 내용은 인수
AIGym섹션을 참조하세요. 이러한 유연성 덕분에 다양한 운동을 모니터링하고 피트니스 목표에 따라 루틴을 맞춤 설정할 수 있습니다.운동 모니터링 출력을 저장하려면 처리된 프레임을 저장하는 비디오 라이터를 코드에 추가하면 됩니다. 다음은 예제입니다.
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()이 설정은 모니터링한 동영상을 출력 파일에 기록하므로 나중에 운동 성과를 검토하거나 트레이너와 공유해 추가 피드백을 받을 수 있습니다.

