Running Form Tech: DIY AI 분석으로 보행을 개선하세요

발행: (2026년 1월 5일 오전 10:15 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

일반적인 생체역학적 오류

1. 오버스트라이드

충격 시 무릎이 펴지면 다리를 통해 충격파가 전달됩니다. 이는 정강이 각도로 측정합니다: 거의 수직에 가까운 정강이가 이상적이며, 앞쪽으로 기울어진 각도는 모멘텀에 역행하는 스트라이크를 의미합니다. 정강이 각도가 약 15°를 초과하면 러너가 오버스트라이드하고 있을 가능성이 높습니다.

2. 과도한 수직 진동

엉덩이의 수직 움직임(보통 5–10 cm)은 “튕겨 오르는” 대신 앞으로 추진하고 있는지를 보여줍니다. 큰 진동은 에너지를 낭비하고 관절에 가해지는 부하를 증가시킵니다.

영상 촬영 요구 사항

신뢰할 수 있는 데이터를 얻기 위해서는 다음 기준을 충족하는 측면 영상을 녹화하세요:

  • 측면 시점 – 카메라는 러닝머신이나 달리기 경로에 수직이어야 합니다.
  • 안정된 마운트 – 삼각대 등 고정된 지지대를 사용해 카메라 흔들림을 방지합니다. 흔들림은 겉보이는 “엉덩이 높이”를 왜곡할 수 있습니다.
  • 관절이 보이도록 – AI가 엉덩이, 무릎, 발목 랜드마크를 명확히 인식할 수 있도록 몸에 딱 붙는 옷을 입습니다.
  • 일관된 조명 – 그림자와 같은 강한 명암 차이는 포즈 추정 알고리즘을 혼란시킬 수 있으니 피합니다.

구현 개요

  1. 포즈 추정OpenCVMediaPipe 같은 라이브러리를 활용해 파이썬으로 각 프레임에서 33개의 신체 랜드마크를 감지합니다.
  2. 슬라이딩 윈도우 – 프레임 이동 창을 만들어 발목의 최저점을 추적합니다; 이는 발이 땅에 닿는 순간을 근사합니다.
  3. 각도 계산 – 식별된 스트라이크 프레임에서 무릎과 발목 사이의 각도를 계산해 정강이 각도를 구합니다.
  4. 바운스 측정 – 각 보폭마다 엉덩이의 최대·최소 Y 좌표를 기록합니다. 픽셀 차이를 알려진 기준으로 보정해 센티미터로 변환하면 수직 진동을 정량화할 수 있습니다.
# Example: calculate shin angle using MediaPipe landmarks
import cv2
import mediapipe as mp
import numpy as np

mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
    static_image_mode=False,
    model_complexity=1,
    enable_segmentation=False,
    min_detection_confidence=0.5,
)

def shin_angle(landmarks):
    # landmarks: list of PoseLandmark objects
    knee = np.array([
        landmarks[mp_pose.PoseLandmark.LEFT_KNEE].x,
        landmarks[mp_pose.PoseLandmark.LEFT_KNEE].y,
    ])
    ankle = np.array([
        landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].x,
        landmarks[mp_pose.PoseLandmark.LEFT_ANKLE].y,
    ])
    shin_vec = ankle - knee
    angle = np.degrees(np.arctan2(shin_vec[1], shin_vec[0]))
    return abs(angle)

# Process video frames...

실용적인 팁

  • 정강이 각도 모니터링 – 거의 수직에 가깝게 착지하도록 목표합니다(편차 ≤ 15°). 이는 관절 충격을 줄여줍니다.
  • 바운스 최소화 – 수직 에너지를 앞쪽 추진력으로 전환해 효율성을 높입니다.
  • 데이터 활용 – 영상 피드백을 통해 주관적인 “느낌”을 객관적인 생체역학 지표로 전환합니다.

개발자이거나 기술에 익숙한 러너라면 직접 이 도구를 만들 준비가 된 것입니다. 전체 파이썬 코드와 튜토리얼은 WellAlly의 전체 가이드에서 확인할 수 있습니다.

Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.