如何在姿态估计中发现不正确的运动



我正在尝试建立一个基于姿态估计的模型,该模型能够识别不正确的运动相对于预定义动作的姿势.比如做下蹲、引体向上、瑜伽等等其中,如果用户没有按照说明中给出的操作进行操作,则意味着我必须找出姿势中的这些点。

到目前为止我所尝试的:建立一个基于规则的逻辑,识别两个关节/线之间的方向和角度,并给出纠正

但问题是我们不能为动作序列中的所有帧编写规则。所以寻找一个更好的解决方案。

如果动作的时间和顺序不重要,这个想法可能行得通。这也假设你知道正在尝试什么动作(尽管这也可以修改为一种蛮力分类):

创建一种方法,以您描述的方式记录连续运动(索引关节的角度)。然后,为了训练一个新的动作,收集"黄金套装"。在这里,动作尽可能完美地执行5-10次(如果你能确保高质量的样本,我也会做得很好)。将这些集合组合起来(将它们连接起来,不要取平均值)。你可以把每个数据点想象成高维的数据点比如xyz但是有很多关节角。如果速度/优化是一个问题,您可能需要对这些数据进行排序以改进后续搜索。

这取决于你关心的关节,但如果一些关节比其他关节移动得多,你可能想要标准化每个关节的角度数据(即不是使用它们的原始值,而是将它们的原始值除以它们在运动中的总范围)。这样做的好处是,它将保持一个关节具有巨大的运动压倒另一个小得多,但这仍然是重要的。需要注意的是,要小心那些很少运动的关节,因为它们的归一化会显著增加噪音,所以你可能应该把任何低于运动范围的关节归零。

现在,当有人执行运动时,取用户数据的实时样本(关节角度,如果执行归一化,则将每个关节归一化,与黄金数据中相同),并找到"最接近的"。点出你的金色组合样品。从最简单的意义上说,"亲密"。可以是高维距离估计。然后将实时数据与最接近的黄金数据进行比较,你可以告诉用户他们当前的姿势在哪些方面是不准确的。平方距离可以使用,因为它只是为了排名,所以你所需要做的就是找到每个维度的差异(angle1Difference, angle2Difference, angle3Difference,…)并将它们的平方相加:即distSq = a1D x a1D + a2D x a2D +a3D x a3D…

请注意,对于给定的数据点,您需要捕获所有您关心的关节在一起(独立的数据集意义不大,因为它可能允许正确的运动范围,但在错误的顺序或协调)

相关内容

最新更新