基于人工智能的实时健身训练分析系统:深蹲姿态识别与动作评估

关于深度实战社区

我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。

社区特色:深度实战算法创新

获取全部完整项目数据集、代码、视频教程,请进入官网:zzgcz.com。竞赛/论文/毕设项目辅导答疑,v:zzgcz_com


1. 项目简介

本项目旨在开发一个基于人工智能的实时健身训练分析系统,专注于深蹲姿势识别与动作评估。随着个人健身和运动健康的普及,人们越来越希望能够在家中或健身房使用智能化工具来实时监控自己的锻炼情况,并获得专业的动作纠正指导。本系统利用计算机视觉技术,通过摄像头捕捉用户的深蹲动作,结合深度学习模型对姿势进行实时分析,识别出用户在运动过程中可能出现的姿势偏差,并给出改进建议。项目采用了MediaPipe的姿态估计模型和自定义的角度分析算法,能够精确定位人体关键点,并计算膝盖、髋关节和脚踝等部位的角度变化。该系统支持初学者模式和专业模式,通过不同的阈值参数来区分用户水平,并根据用户的运动轨迹判断动作是否规范。应用场景包括个人健身指导、运动康复训练及健身房智能健身教练系统。整体项目不仅实现了实时性和较高的精度,还通过Streamlit的界面提供直观的用户交互体验,用户可以通过上传视频或使用实时摄像头流来获取训练指导,从而提高运动效果和安全性。

2.技术创新点摘要

本项目的技术创新点主要体现在以下几个方面:首先,本项目采用了基于MediaPipe和自定义深度学习方法的姿态估计模型来实现人体关键点的精确定位和姿态分析。通过引入多角度关键点检测技术(如髋关节、膝关节、脚踝等位置的角度计算),该项目能够在深蹲动作中进行精细化分析,从而有效识别各种常见的姿势偏差,如膝盖过度前移、髋关节位置偏移等。此外,本项目结合了实时流媒体处理框架(Streamlit 和 WebRTC)和深度学习算法,通过实时处理视频帧的方式,支持用户通过摄像头进行动作实时评估。这种实时性与视频流的结合,不仅大幅提升了用户交互体验,还能快速响应用户动作变化,确保训练时的精准性与连续性。

其次,项目中定义了“初学者模式”和“专业模式”两种阈值机制,通过动态调整角度阈值和姿势容忍度(如髋关节与膝盖的角度范围),实现了对不同健身水平用户的个性化分析。这种多模式设计能够在相同动作下,灵活适应不同用户的运动特点,从而提高了模型的泛化能力。

同时,项目在姿态校正反馈上做了进一步的优化,通过多种视觉提示(如动态文字标签和颜色标注),帮助用户及时发现自身姿势的不足之处,提供清晰易懂的改进指导。为了保持系统的高可扩展性,项目通过自定义关键点特征提取器和灵活的角度计算方法,使其能够方便地应用于其他运动姿态分析场景,如深蹲、弓步训练、跳跃等。

在这里插入图片描述

3. 数据集与预处理

本项目的数据集主要来自于公开的运动姿态数据集(如Human3.6M、COCO Pose Estimation),这些数据集包含了大量标注精确的人体姿态图像,尤其是适用于各类运动动作(如深蹲、弓步、跑步等)的关键点标注。这些数据集的显著特点是:包含多种人体姿态的2D和3D关键点坐标信息,且数据量大、动作多样,能够覆盖不同年龄、性别和体型的用户姿势。因此,该数据集可以为模型训练和验证提供多样化的动作姿态样本,确保模型的泛化能力和在复杂场景下的鲁棒性。

在数据预处理阶段,本项目首先对原始图像数据进行了关键点归一化处理。通过将每个人体的关键点坐标映射到0-1的区间内,消除不同图像分辨率和拍摄角度带来的差异,从而在不同输入尺度下保持模型的一致性。接着,我们采用数据增强技术对数据进行扩充,如水平翻转、随机旋转、裁剪、缩放等操作,以模拟不同视角和动作幅度下的姿态变化,增强模型的适应性和抗噪能力。此外,针对姿态数据的特征工程,我们对深蹲等特定动作的关键点角度进行了计算与特征提取,确保模型能够捕捉到不同用户在深蹲动作中各关节的角度变化、运动轨迹等高维度信息。

最后,在训练数据的采样过程中,我们设计了特定的标签平衡机制,对关键姿态(如深蹲时膝盖、髋关节的关键角度)进行标注与分类处理,确保在模型训练时能够平衡各种常见动作类别,从而提升模型对不同姿态的识别能力。通过上述数据预处理与特征工程步骤,数据集能够更好地支持深度学习模型的训练与优化。

4. 模型架构

  1. 模型结构与逻辑

本项目的核心模型架构主要基于人体姿态估计(Pose Estimation)算法,采用了MediaPipe的姿态检测模型来实现人体关键点的定位和深蹲动作识别分析。具体来说,模型结构分为以下几部分:

  • 姿态检测(Pose Estimation Module) :该模块基于MediaPipe Pose Estimation框架,利用卷积神经网络(CNN)和多级姿态解析模型(Multi-stage Pose Parsing Model)来识别人体的33个2D关键点(如头部、肩膀、肘部、髋关节、膝盖、脚踝等)。其输出为一组关键点的二维坐标 (xi,yi),每个关键点具有置信度 ci,表示该关键点的检测准确性。

    • 输入层:输入为经过归一化处理的RGB图像 I ∈ R H × W × 3 I \in \mathbb{R}^{H \times W \times 3} IRH×W×3(其中 H 和 W 为图像的高度和宽度)。
    • 特征提取层(Feature Extraction Layer) :使用轻量化的CNN网络,如MobileNetV2,进行多尺度特征提取,生成特征图 F ∈ R H 8 × W 8 × C F \in \mathbb{R}^{\frac{H}{8} \times \frac{W}{8} \times C} FR8H×8W×C,其中 C 为通道数。特征提取的核心数学公式为: ( x i , y i ) = arg ⁡ max ⁡ ( x , y ) H i ( x , y ) (x_i, y_i) = \arg\max_{(x, y)} H_i(x, y) (xi,yi)=arg(x,y)maxHi(x,y)
    • 关键点检测层(Keypoint Detection Layer) :通过堆叠多层卷积层来预测每个关键点的热力图(Heatmap) H i ∈ R H 8 × W 8 H_i \in \mathbb{R}^{\frac{H}{8} \times \frac{W}{8}} HiR8H×8W,并对关键点进行解码和坐标转换: ( x i , y i ) = arg ⁡ max ⁡ ( x , y ) H i ( x , y ) (x_i, y_i) = \arg\max_{(x, y)} H_i(x, y) (xi,yi)=arg(x,y)maxHi(x,y)
    • 姿态优化层(Pose Refinement Layer) :采用解析优化方法,对每个关键点的坐标进行进一步调整,以降低检测误差,输出最终姿态坐标。
  • 角度分析模块(Angle Analysis Module) :在深蹲动作识别中,本模块计算膝盖、髋关节、和脚踝的角度值来判断姿态状态。给定两个关键点 A(x1,y1) 和 B(x2,y2),以及参考点 O(x0,y0),角度计算公式为:

  • θ = arccos ⁡ ( ( A − O ) ⋅ ( B − O ) ∥ A − O ∥ ⋅ ∥ B − O ∥ ) \theta = \arccos\left(\frac{(A-O) \cdot (B-O)}{\|A-O\| \cdot \|B-O\|}\right) θ=arccos(AOBO(AO)(BO))

  • 其中 ⋅ 表示向量点积,∥⋅∥ 表示向量的模长。通过计算关键点之间的角度变化,可以判断用户的深蹲动作是否规范。

  1. 模型训练流程与评估指标

本项目未直接训练深度学习模型,而是利用预训练的MediaPipe模型进行姿态估计,并在其基础上进行二次开发和动作分析。为了优化分析模块的参数,设计了特定的动作阈值(如髋关节和膝盖角度阈值),通过实时视频帧处理与角度计算,来对用户的动作进行动态追踪和评估。

评估指标主要包括以下几种:

  • 动作准确率(Accuracy) :定义为用户每次深蹲动作中符合规范姿态的次数占总动作次数的比例。准确率可以通过以下公式计算:
  • Accuracy = N correct N total \text{Accuracy} = \frac{N_{\text{correct}}}{N_{\text{total}}} Accuracy=NtotalNcorrect
  • 其中 Ncorrect为符合规范姿态的动作次数,Ntotal 为所有动作的总次数。
  • 姿态偏差率(Pose Deviation Rate) :用于衡量用户的动作是否出现膝盖、髋关节、脚踝位置的偏差。对于某个角度 θi 超出预定范围的偏差率定义为:
  • Deviation Rate = ∑ i = 1 N ∣ θ i − θ target ∣ N \text{Deviation Rate} = \frac{\sum_{i=1}^N | \theta_i - \theta_{\text{target}} |}{N} Deviation Rate=Ni=1Nθiθtarget
  • 该指标能够直观地反映用户动作的偏差程度。

5. 核心代码详细讲解

1. process_frame.py 文件中的动作分析模块

该文件主要用于处理实时视频流中的每一帧,进行深蹲动作的姿态检测和分析。以下是几个关键功能函数的逐行讲解。

def process(self, frame: np.array, pose) -> Tuple[np.array, Optional[str]]:

该函数是处理输入视频帧的核心函数,通过分析当前帧的姿势关键点来进行姿态判断和动作反馈。

frame_height, frame_width, _ = frame.shape
  • 解释:获取当前视频帧的宽度和高度,用于后续计算关键点坐标的归一化和映射。
keypoints = pose.process(frame)
  • 解释:使用MediaPipe的pose模型处理当前帧,获取人体姿势的关键点检测结果 keypoints。如果模型成功检测到人体姿态,则返回包含33个关键点的姿态信息。
nose_coord = get_landmark_features(ps_lm.landmark, self.dict_features, 'nose', frame_width, frame_height)
  • 解释:调用 get_landmark_features 函数提取鼻子(nose)的关键点坐标,并将其映射到当前帧的坐标系中。self.dict_features 存储了所有感兴趣的关键点(如肩膀、髋关节、膝盖、脚等)的索引。
left_shldr_coord, left_elbow_coord, left_wrist_coord, left_hip_coord, left_knee_coord, left_ankle_coord, left_foot_coord = \
get_landmark_features(ps_lm.landmark, self.dict_features, 'left', frame_width, frame_height)
  • 解释:提取左侧肩膀、肘部、手腕、髋关节、膝盖、脚踝和脚的坐标信息。通过将其转化为具体的二维坐标,后续可以用于角度计算和动作分析。
offset_angle = find_angle(left_shldr_coord, right_shldr_coord, nose_coord)
  • 解释:计算左右肩膀与鼻子之间的夹角,称为offset_angle。该角度用于判断用户的身体是否保持正直姿态。公式为:

θ = arccos ⁡ ( ( A − O ) ⋅ ( B − O ) ∥ A − O ∥ ⋅ ∥ B − O ∥ ) \theta = \arccos\left( \frac{(A - O) \cdot (B - O)}{\|A - O\| \cdot \|B - O\|} \right) θ=arccos(AOBO(AO)(BO))

如果该角度大于某个阈值(如35度),则表示用户的上半身姿势可能不正确,需要进行调整。

if offset_angle > self.thresholds['OFFSET_THRESH']:
  • 解释:判断offset_angle是否超过预设的姿势偏移阈值OFFSET_THRESH。如果超过,则认为用户的姿态不正确,进入姿势校正逻辑。
play_sound = 'reset_counters'
  • 解释:当检测到用户姿态出现偏差时,设置 play_sound"reset_counters",用于后续音频反馈。此机制能够在用户动作出现错误时发出提示音,帮助用户调整姿态。
hip_vertical_angle = find_angle(shldr_coord, np.array([hip_coord[0], 0]), hip_coord)
  • 解释:计算肩膀与髋关节的垂直角度hip_vertical_angle,用于判断用户在深蹲时的髋关节是否保持正确的高度。如果角度偏差过大(例如髋关节过低或过高),系统会触发纠正机制。
if hip_vertical_angle > self.thresholds['HIP_THRESH'][1]:
    self.state_tracker['DISPLAY_TEXT'][0] = True
  • 解释:判断当前帧中髋关节角度是否超过设定的上限阈值(HIP_THRESH[1]),如果是,则认为用户的动作可能过度弯曲或姿势不规范。self.state_tracker['DISPLAY_TEXT'][0] 用于触发在界面上显示文字反馈,告知用户需要调整动作。
frame = self._show_feedback(frame, self.state_tracker['COUNT_FRAMES'], self.FEEDBACK_ID_MAP, self.state_tracker['LOWER_HIPS'])
  • 解释:调用 _show_feedback 函数,将文本提示与颜色标注等信息叠加到当前帧中。self.FEEDBACK_ID_MAP 存储了每个可能错误姿态的提示内容及其颜色标识,如 BEND BACKWARDSKNEE FALLING OVER TOE。此处将具体的动作评估和纠正结果反馈给用户。
cv2.putText(frame, str(int(hip_vertical_angle)), (hip_text_coord_x, hip_coord[1]), self.font, 0.6, self.COLORS['light_green'], 2, lineType=self.linetype)
  • 解释:使用 cv2.putText 将计算出的 hip_vertical_angle 角度值绘制在帧图像上,显示用户当前髋关节的角度,方便用户理解当前动作的状态。
self.state_tracker['prev_state'] = current_state
  • 解释:更新状态跟踪变量 self.state_tracker['prev_state'],记录当前帧的姿态状态(如 s1s2 等)。该状态用于在后续帧中判断动作的持续性和连续性,确保在动作评估时的状态切换能够被正确捕捉。
2. thresholds.py 中的模式阈值定义

该模块用于定义不同运动模式(初学者与专业模式)下的动作分析阈值。

_ANGLE_HIP_KNEE_VERT = {'NORMAL' : (0,  32),'TRANS'  : (35, 65),'PASS'   : (70, 95)
                         }
  • 解释:定义深蹲动作中髋关节与膝盖的垂直角度范围。NORMAL 表示正常角度区间(0-32度),TRANS 表示过渡角度(35-65度),PASS 表示动作完成时的角度(70-95度)。该字典结构能够有效区分不同阶段的动作状态。
'OFFSET_THRESH' : 35.0,
  • 解释:定义偏移角度阈值,用于检测用户是否在深蹲时出现躯干偏移等错误姿势。

6. 模型优缺点评价

  • 本项目模型的优点在于其高效的实时性良好的用户体验。首先,基于轻量化的MediaPipe Pose Estimation模型,该系统能够在消费级设备(如笔记本和手机)上实现高效的姿态估计和实时分析,并且集成了Streamlit和WebRTC等流媒体处理框架,能够提供高帧率的视频流处理,使得用户在使用过程中获得流畅的交互体验。其次,模型通过自定义的角度分析模块(如髋关节和膝盖的角度计算),能够识别常见的深蹲姿势错误,并且通过多模式(初学者与专业模式)的设定,支持不同健身水平的用户进行精确分析和动作反馈。此外,实时的动作反馈系统能够通过动态的文本提示和颜色标注,及时告知用户需要调整的姿势,帮助用户在训练过程中提升动作质量和运动安全性。
  • 但该模型也存在一定的局限性。首先,由于模型主要依赖于二维关键点检测,无法处理复杂的三维姿态变化,尤其是深蹲动作中的身体旋转和前后移动。其次,模型在光照、拍摄角度变化较大的情况下,姿态识别的准确率可能受到影响。同时,预设的阈值参数(如髋关节与膝盖的角度阈值)可能无法适应所有用户的身体特征,导致某些动作的误判或低效分析。
  • 针对这些缺点,可以通过以下改进方向来优化模型:1)采用三维姿态估计模型(如基于骨架序列的3D姿态估计),提高对复杂动作的识别能力;2)增加超参数调优机制,根据用户的体型和健身目标动态调整分析阈值;3)引入更丰富的数据增强策略(如动态遮挡、背景变换),提升模型的鲁棒性;4)采用多视角视频融合策略,提高姿态识别的空间一致性。通过这些改进,可以进一步提升模型的实用性和在不同场景下的表现。

↓↓↓更多热门推荐:
LSTM模型改进实现多步预测未来30天销售额
ResNet18果蔬图像识别分类

全部项目数据集、代码、教程进入官网zzgcz.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值