姿态识别+康复训练矫正(AI 健身教练姿态分析) Python结合MediaPipe和OpenCV库来实现

姿态识别+康复训练矫正(AI 健身教练姿态分析)

添加图片注释,不超过 140 字(可选)

目录

本文旨在构建一个 AI 健身教练,帮助判断姿态标准与否,并且矫正姿态!无论您是初学者还是专业人士,它都可以帮助您无缝地进行深蹲。为了完成这项任务,我们可以利用基于深度学习的人类姿态估计算法的强大功能。

身体姿态估计
用于姿势分析的正面和侧视图的直觉]
姿势构建 AI 健身教练来分析深蹲
深蹲时的状态图解释]
AI Fitness Trainer 的应用流程]
设计应用程序时的关键概念

角度计算
AI Fitness Trainer 应用程序的反馈操作](
计算非活动时间]

AI Fitness Trainer 应用程序中的测试用例]
深蹲模式 – 初学者与专业人士

姿态估计
使用检测器,管道首先定位帧内的人物/姿势感兴趣区域 (ROI)。跟踪器随后使用 ROI 裁剪的帧作为输入来预测 ROI 中的姿态地标和分割掩码。

在这里插入图片描述

姿势分析的正面和侧视图的直觉

在设计一个应用程序来分析各种健身锻炼时,人们可能会好奇地执行各种计算,同时牢记相机对物体(人)的视野。
使用正面视图,我们可以访问左侧和右侧,因此可以利用各种地标点的坡度和角度,例如膝臀线和膝臀线之间的角度等。这些信息可能有助于分析头顶推举、侧板支撑、仰卧起坐、卷曲等练习。
我们可以使用侧视图来更好地估计有关垂直或水平的各种倾斜度。这些信息有助于分析硬拉、俯卧撑、深蹲、俯卧撑等运动。
由于我们正在分析深蹲和所有关于垂直方向适当倾斜度的重要计算,因此我们选择了侧视图。
为确保健康的生活方式,罗马尼亚主动向进行 20 次深蹲的人提供免费巴士票。看看这个Instagram帖子

添加图片注释,不超过 140 字(可选)

姿势构建 AI 健身教练来分析深蹲
下图描述了我们的应用程序所需的地标。

添加图片注释,不超过 140 字(可选)

我们将考虑髋-膝、膝-踝和肩-髋线与垂直线的角度,以计算状态(在后续部分中解释)并执行适当的反馈消息。如下图所示。

添加图片注释,不超过 140 字(可选)

用于姿势分析的正面和侧视图的直觉
[
在设计一个应用程序来分析各种健身锻炼时,人们可能会好奇地执行各种计算,同时牢记相机对物体(人)的视野。
使用正面视图,我们可以访问左侧和右侧,因此可以利用各种地标点的坡度和角度,例如膝臀线和膝臀线之间的角度等。这些信息可能有助于分析头顶推举、侧板支撑、仰卧起坐、卷曲等练习。
我们可以使用侧视图来更好地估计有关垂直或水平的各种倾斜度。这些信息有助于分析硬拉、俯卧撑、深蹲、俯卧撑等运动。
由于我们正在分析深蹲和所有关于垂直方向适当倾斜度的重要计算,因此我们选择了侧视图。
为确保健康的生活方式,罗马尼亚主动向进行 20 次深蹲的人提供免费巴士票。看看这个Instagram帖子!
使用 MediaPipe 姿势构建 AI 健身教练来分析深蹲
下图描述了我们的应用程序所需的地标。

添加图片注释,不超过 140 字(可选)

我们将考虑髋-膝、膝-踝和肩-髋线与垂直线的角度,以计算状态(在后续部分中解释)并执行适当的反馈消息。如下图所示。

添加图片注释,不超过 140 字(可选)

此外,我们将计算偏移角度(鼻子和肩膀所占的角度),并发出适当的警告,以保持良好的侧视图。
此外,我们还将考虑计算不活动的时间,根据这些时间,正确和不正确的深蹲计数器将被重置。
该应用程序还将提供两种模式:初学者和专业;人们可以选择其中任何一个并开始无缝地进行深蹲,无论他是初学者还是专家。
人体姿态估计是计算机视觉中最令人兴奋的研究领域之一。它在广泛的应用中具有重要意义。我们可以用它来构建一个简单而令人兴奋的应用程序来[分析不良的坐姿]

深蹲时的状态图解释
状态转换图解释了执行深蹲时保持的各种状态。
请注意,所有状态都是根据髋膝线和垂直线之间的角度计算的(为简单起见,我们将此阶段压缩为膝盖和垂直线之间的角度).
以下 gif 说明了过渡的各个阶段。

添加图片注释,不超过 140 字(可选)

我们将处理应用程序的三种状态:s1、s2 和 s3。

状态 s1: 如果膝盖与垂直方向的夹角落在32°以内,则处于正常阶段,其状态为s1。它本质上是更新正确和不当深蹲计数器的状态。
状态 s2: 如果膝盖和垂直方向之间的角度落在 35° 和 65° 之间,则处于过渡阶段,随后进入状态 s2.
状态 s3: 如果膝盖和垂直方向之间的角度在特定范围内(例如,在 75° 和 95° 之间),则它处于通过阶段,随后进入状态 s3.

我们最终也可以提供状态转换图。

添加图片注释,不超过 140 字(可选)

注意:

与反馈相关的所有计算都是针对状态 s2 和 s3 计算的。
在实施过程中,我们维护一个列表:state_sequence。它包含人员从状态 s1 到 s3 再回到 s1 时的一系列状态。state_sequence 中的最大状态数 为 3 ([s2**, s3, s2]**)。此列表确定是否执行正确或不正确的深蹲。

一旦遇到状态 s1,我们将state_sequence重新初始化为空列表,以便进行后续的深蹲计数。
设计应用程序时的关键概念
角度计算
3 点之间的角度,其中 1 个是参考点,如下所示。

添加图片注释,不超过 140 字(可选)

该等式由下式给出:

添加图片注释,不超过 140 字(可选)

例如,要计算偏移角,我们将找到鼻子和肩膀之间的角度,鼻子的坐标是参考点。

添加图片注释,不超过 140 字(可选)

当偏移角度超过某个OFFSET_THRESH时,我们假设该人面向相机前方,并显示相应的警告消息。
同样,可以参考下图来计算肩臀线与垂直线之间的夹角.

添加图片注释,不超过 140 字(可选)

AI Fitness Trainer 应用程序的反馈操作
我们的应用程序应提供五条反馈消息,而一条执行深蹲,即:

向前弯曲
向后弯曲
降低臀部
膝盖从脚趾上掉下来
深蹲

当髋部与髋部的垂直角度(即肩髋线与垂直线之间的夹角)低于阈值(例如 20°)时,将显示反馈 1,如下图所示。

添加图片注释,不超过 140 字(可选)

当髋部垂直角度高于阈值(例如 45°)时,将显示反馈 2, 如下所示

添加图片注释,不超过 140 字(可选)

总结
到目前为止,我们已经展示了如何使用 姿态识别解决方案构建一个简单的应用程序来分析深蹲。该应用程序的关键组件包括:

计算角度,例如肩-髋、髋-膝和膝-踝线及其相应的垂直线。
我们保持各种状态以显示适当的反馈并区分正确和不适当的深蹲。
计算重置相应计数器期间的非活动状态。

该应用程序假设该人应保持相机的良好侧视图。如果一个人完全面对镜头前,我们会显示适当的警告信息。
姿态识别**解决方案构建一个简单的应用程序来分析深蹲。该应用程序的关键组件包括:

计算角度,例如肩-髋、髋-膝和膝-踝线及其相应的垂直线。
我们保持各种状态以显示适当的反馈并区分正确和不适当的深蹲。
计算重置相应计数器期间的非活动状态。

该应用程序假设该人应保持相机的良好侧视图。如果一个人完全面对镜头前,我们会显示适当的警告信息。
我们希望本文能为您提供足够的直觉,以构建一个简单但重要的应用程序,以使用人体姿势估计来分析深蹲。我们计划在未来加入更多的练习。

AI健身教练:姿态识别与康复训练矫正

本文旨在探讨如何构建一个基于AI技术的健身教练系统,该系统能够通过姿态识别技术来分析用户的运动姿态,并提供即时反馈以帮助用户矫正姿态,特别是在进行深蹲等运动时。以下是对这一系统的详细介绍:

身体姿态估计

在设计应用程序之初,首先需要考虑的是使用正面和侧面视角来进行姿态分析。正面视图有助于我们分析左右方向上的姿势特征,如膝臀线的角度等;而侧视图则更适合于评估垂直或水平方向的姿态倾斜度,这对于像深蹲这样的动作尤为重要。

使用MediaPipe构建AI健身教练

利用MediaPipe等开源框架,我们可以轻松地定位视频帧中的人物,并跟踪其关键点位置。这些关键点包括髋、膝、踝以及肩部等,它们对于计算角度至关重要。例如,通过比较髋-膝线与垂直线之间的角度,可以判断深蹲过程中膝盖是否超过了脚尖,这是一个常见的错误。

角度计算与状态转换

为了准确评估用户的深蹲姿态,我们需要计算多个角度,比如髋-膝线、膝-踝线及肩-髋线与垂直线之间的夹角。根据这些角度的变化,我们可以定义不同的状态(s1, s2, s3),并据此给出反馈。例如:

  • 状态s1:当膝盖与垂直方向的夹角小于32°时,表示处于初始位置。
  • 状态s2:当膝盖与垂直方向的夹角介于35°至65°之间时,表示正在下降过程。
  • 状态s3:当膝盖与垂直方向的夹角位于75°至95°范围内时,则认为是深蹲到底的状态。
反馈机制

AI健身教练会根据上述角度计算结果为用户提供实时反馈。如果检测到用户存在前倾或后仰过度、臀部下落不足等问题,系统将立即发出警告,指导用户调整姿态。此外,若用户长时间未移动,系统也会提示重新开始锻炼,以此保证训练效果。

应用前景

随着人们对健康生活方式追求的提升,结合姿态识别技术的AI健身教练不仅能够帮助普通用户正确完成健身动作,还能为康复治疗中的患者提供科学指导。通过精准的姿态分析,医生和理疗师可以远程监控患者的恢复情况,并及时调整治疗方案。

总之,借助现代计算机视觉技术,特别是深度学习驱动的人体姿态估计方法,我们有能力开发出既实用又高效的AI健身教练系统,这无疑将大大促进全民健身事业的发展,并为康复医学领域带来新的可能性。

构建一个AI健身教练,用于姿态识别与康复训练矫正,特别是针对深蹲动作的分析,我们可以使用Python结合MediaPipe和OpenCV库来实现。以下是一个简单的示例代码,展示了如何利用这些工具来检测人体姿态,并根据特定的角度计算给出反馈。

首先,请确保你已经安装了必要的库:

pip install opencv-python mediapipe numpy

接下来是完整的Python代码示例:

import cv2
import mediapipe as mp
import numpy as np

# 初始化MediaPipe Pose解决方案
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, min_detection_confidence=0.5, min_tracking_confidence=0.5)

# 初始化绘图模块
mp_drawing = mp.solutions.drawing_utils

def calculate_angle(a, b, c):
    """计算三个点之间的角度"""
    a = np.array(a)  # 第一个点
    b = np.array(b)  # 中间点
    c = np.array(c)  # 最后一个点
    
    radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])
    angle = np.abs(radians*180.0/np.pi)
    
    if angle > 180.0:
        angle = 360-angle
        
    return angle 

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    
    # 将图像从BGR转换为RGB
    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    image.flags.writeable = False
      
    # 进行姿态检测
    results = pose.process(image)
    
    # 将图像从RGB转换回BGR
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    
    try:
        landmarks = results.pose_landmarks.landmark
        
        # 获取关键点坐标
        shoulder = [landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].x,
                    landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value].y]
        hip = [landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].x,
               landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].y]
        knee = [landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value].x,
                landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value].y]
        
        # 计算肩-髋-膝角度
        angle = calculate_angle(shoulder, hip, knee)
        
        # 反馈机制:基于角度提供反馈
        if angle < 32:
            feedback = "状态s1: 正常"
        elif 35 <= angle <= 65:
            feedback = "状态s2: 过渡中"
        elif 75 <= angle <= 95:
            feedback = "状态s3: 深蹲到底"
        else:
            feedback = "调整姿势"
            
        # 显示反馈
        cv2.putText(image, feedback, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2, cv2.LINE_AA)
        
    except:
        pass
    
    # 绘制姿态标记
    mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,
                              mp_drawing.DrawingSpec(color=(245,117,66), thickness=2, circle_radius=2),
                              mp_drawing.DrawingSpec(color=(245,66,230), thickness=2, circle_radius=2))
    
    cv2.imshow('Mediapipe Feed', image)

    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

这段代码实现了以下几个功能:

  • 使用MediaPipe Pose模型实时检测视频流中的人体姿态。
  • 根据检测到的关键点(如肩膀、臀部和膝盖)计算角度。
  • 根据计算出的角度判断用户的深蹲状态,并给出相应的反馈信息。
  • 在视频帧上绘制姿态连接线和地标点,同时显示反馈信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值