一、前言
本文基于OpenCV库,并结合MediaPipe机器学习中Pose的姿态估计方法,通过Streamlit库的web界面设计实现的自动计数健身系统,用以达到深蹲锻炼的记录和纠正,同时包括仰卧起坐的简单计数等功能,后续我会更新系统实现的核心代码和方法。
关键词:人体姿态评估,体育锻炼,opencv,MediaPipe,Streamlit
二、动作特征表示方法
人类是一个可以从多维度认识和了解世界的个体,我们可以通过眼睛、皮肤、耳朵、鼻子、嘴巴等感知器官感受外部世界的任何东西。在日常生活中,人类眼睛的视觉功能可以识别和处理各种信息,因此如果能够让计算机拥有视觉功能,使之能够自动识别、分析人的活动,是完成AI健身的重要组成部分。因此,我们需要通过计算机分析视频中人体动作来进行判断决策。通过对视频的每一帧分析,让计算机拥有人类视觉功能并通过分析动作状态进行人体姿势评估。
2.1、基于底层时空特征
对于视频中人的动作分析,全局时空特征、局部时空兴趣点特征[6]和时空轨迹特征是三类经典的动作视觉特征。
全局时空特征理论提出较早,它大量直白的描述了人体动作的表观信息和运动信息。典型模型有:运动能量图(Motion Energy Image, MEI)、运动历史图(Motion History Image, MHI)、光流场、时空体(Spatial TemporalVolume, STV)、时空形状(Space-Time Shape, STS)。
2.2、基于中层语义特征
底层时空特征表示虽然可以实现基本运动特征描述,但是底层的视觉特征和人类进行认知事物的方法不一样。所以,应该将底层视觉特征和高层动作类别进行联系,这就需要将视频中语义概念和上下文信息进行高强度的关联,同时可以描述动作和判断动作。
2.3、基于深度特征
深度学习是学习视觉特征的有效表示方法。通过深度学习来进行动作识别与分析的特征提取,叫做动作的身体特征。人脑接收视觉信息后,感受区首先提取视野中目标的边缘特征,然后提取目标的形状信息,最后提取目标的全局特征。深度模型通过模拟人脑,构建深层的神经网络模型,将输入的原始图像信息逐层表示为边缘、形状等语义信息。每一层通过学习前一层的输出信息,得到该输出信息更抽象的特征表示,经过多层信息抽象,在最后的输出层输出类别概率,取得较好的分类性能。
三、人体姿态评估主要方法
人体包含骨骼和骨骼关节,是比较复杂的。幸运的是,人体的骨骼活动范围受骨骼关节限制,导致人体的活动范围是有一定的阈值范围。为此我们通过可以设定两个参数:人体骨骼间的角度和各个骨骼关节的坐标,通过这两个参数进行姿势评估和动作识别。目前姿势评估主要为两大类,自底向上基于表观的估计方法和自顶向下基于模型的估计方法。
3.1、自底向上
自底向上基于表观的估计方法,也称为数据驱动或基于学习的方法。这种方法是从底层获取图像的特征,然后进行推理学习获得人体姿态所需的参数,避免了三维建模分析。优点是运行速度快、计算量小;缺点是识别精准度受样本规模影响,规模较小的样本训练会导致精度的降低。
3.2、自顶向下
基于模型的姿态估计方法主要依赖于预先构建的人体模型以及对动作的先验理解。此方法通过比较图像特征与人体模型的投影相似性,寻求最佳的匹配,从而确定人体的姿态参数。首先,该方法会识别出人体所有的骨骼关键点,并将这些关键点连接成网络拓扑图。随后,利用图形优化技术,移除不正确的连接,以实现对多人姿态的准确估计。虽然基于模型的估计技术能够提供较为精确的结果,但是它需要良好的初始设置和在复杂的高维姿态空间内进行搜索。而自底向上的算法主要优势在于其处理时间不会因参与人数的增加而线性上升,这使得它更适合于实时的多人姿态估计。
四、体育锻炼动作识别的关键技术分析
对于识别人体动作,我们首要条件是识别出人体各关键点,再通过关键点连线间夹角确定人体正在做的动作,最后通过动作之间的状态转换定义不同的健身动作。所以,我们最合适的方法是确定各关键点的坐标,通过坐标计算开展后续工作。
目前,主要的动作识别分为单层动作识别和层级动作识别两大类。单层动作识别方法主要分析具有时序的动作,例如“行走”、“坐下”、“深蹲”等动作;层级动作识别方法主要分析复杂的动作,通过分析简单动作组成的复杂结构动作,例如深蹲后做俯卧撑就是一个波比跳。基于健身动作主要是简单的时序动作,为此本文主要阐述一下单层动作的主要实现方法发展。
五、系统实现
- 人体骨骼关键点坐标读取:通过谷歌的Mediapipe进行人体骨骼关键点坐标采集,根据动作需要选取后续需要的关键点。一方面实现界面呈现的美观;另一方面可以减少冗余数据计算和资源占用。
- 动作角度定义:对于特定动作所处的特定状态,分析各骨骼间角度进行计算并划定阈值。并没有采用大量数据训练的模型是因为数据采集有限,隐藏层的权重和偏移量调试结果精度比动作角度定义的精度低,为此本程序采用角度定义。
- 动作状态划分:通过分析不同动作运动轨迹,对健身动作划分三个不同状态,通过对状态队列的判断,分析动作的合理性,以便后续实现计数和纠正信息反馈。
系统界面实现:采用Streamlit库,实现web端界面实现,组件丰富,界面搭建简洁高效,并且对于后续实现网络端部署比较便利。有Streamlit Could和自定义部署两种方案,可以满足云端部署和后期运维等需求。