Running Form Tech:使用 DIY AI 分析改善你的步态

发布: (2026年1月5日 GMT+8 09:15)
4 min read
原文: Dev.to

Source: Dev.to

常见生物力学错误

1. 步幅过大

着地时膝盖伸直会把冲击波传递到整条腿。这可以通过 胫骨角度 来衡量:理想状态是胫骨接近垂直,而前倾的角度则表明着地方式抵消了你的动能。如果胫骨角度超过约 15°,跑者很可能出现了步幅过大。

2. 过度垂直振荡

髋部的垂直位移(通常为 5–10 cm)可以显示你是“弹跳”而不是向前推进。大的振荡会浪费能量并增加关节负荷。

视频采集要求

为了获得可靠的数据,请录制满足以下条件的侧面视角视频:

  • 侧面视角 – 相机应垂直于跑步机或跑道。
  • 稳固支撑 – 使用三脚架或其他固定支架,以防止相机抖动,这会影响表观的“髋部高度”。
  • 关节可见 – 穿着贴身衣物,使 AI 能清晰看到髋部、膝盖和踝关节的标记点。
  • 光线均匀 – 避免出现严重阴影,以免干扰姿态估计算法。

实现概览

  1. 姿态估计 – 使用 Python 及 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 的完整指南中找到全部 Python 代码和教程。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://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 年前开始我的 developer 生涯……