一、前言
前面我们介绍了手势检测以及手势识别,今天要说的是姿势检测及识别。
因为我个人有运动的习惯,所以就以最基础的俯卧撑为例,实现以下三个目标:
1.检测到俯卧撑姿势
2.俯卧撑计数
3.检测结果输出。(push-up:计数)
二、算法原理
1.俯卧撑姿势检测
我么还是沿用谷歌的mediapipe模块来获取身体各个部位的三维坐标。mediapipe会给我们返回以下内容。
如图所示,返回值总共有33个点的信息,每个点包含了该点的横轴,纵轴以及深度信息,也就是该点三维信息。有了这些点的信息我们就可以设计算法来对姿势进行识别。
俯卧撑姿势很明显的特点就是身体处于水平状态,也就是腰部弯曲度接近于180,并且腰,肩,膝盖大约处于同一个水平度。基于这个特征我们就可以按照以下算法来判定是否为俯卧撑姿势:
①肩,腰以及膝盖组成的三角形中,腰部的夹角是否接近于180度(参考上一节三维空间坐标夹角算法)
②根据肩,腰以及膝盖的水平高度的标准偏差来判定姿势是否属于平卧状态。
※标准偏差(Std Dev,Standard Deviation) -统计学名词。一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量。