如何在姿势估计中找到不正确的运动

How to find the incorrect movement in pose estimation

我正在尝试构建一个基于姿势估计的模型,该模型能够识别相对于预定义动作[=18=的姿势的不正确移动 ]. 例如进行深蹲、引体向上、瑜伽等练习 其中,如果用户没有按照说明中给出的动作执行操作,则意味着我必须找出姿势中的那些点。

到目前为止我尝试过的: 建立了一个基于规则的逻辑,它识别两个 joints/lines 之间的方向和角度并给出更正

但这样做的问题是我们无法为动作序列中的所有帧编写规则。所以寻找更好的解决方案。

如果动作的时间和顺序不重要,这个想法可能会奏效。这还假设您知道正在尝试执行什么动作(这也可以针对蛮力分类进行修改):

创建一种以您描述的方式(索引关节的角度)记录连续运动的方法。然后为了训练一个新动作,收集一个“黄金组”,其中该动作尽可能完美地执行 5-10 次(如果您可以确保高质量的样本,1 次也可以正常工作)。组合这些集合(连接它们,不要平均或任何东西)。您可以将每个数据点视为像 xyz 一样的高维数据点,但具有与您跟踪的一样多的关节角度。如果速度/优化是一个问题,您可能希望对这些数据进行排序以改进后续搜索。

这取决于您关心的关节,但如果某些关节比其他关节移动得更多,您可能希望对每个关节的角度数据进行归一化(即不使用它们的原始值,而是将它们的原始值除以它们的总和运动范围内)。这样做的好处是,它可以防止运动量大的关节压倒运动量少的关节,但这仍然很重要。但要注意运动非常小的关节,因为对它们进行归一化会显着增加噪音,因此您可能应该将运动中低于特定范围的任何关节归零。

现在,当有人在执行动作时,获取用户数据的实时样本(关节角度,如果执行标准化,则将每个关节标准化为与黄金数据相同的方式)并找到您的“最近”点结合黄金样品。在最简单的意义上,“接近度”可以是高维距离估计。然后在将实时数据与最接近的黄金数据进行比较时,您可以告知用户他们当前姿势在哪些方面不准确。可以使用平方距离,因为它仅用于排名,所以您需要做的就是找到每个维度的差异,即(angle1Difference,angle2Difference,angle3Difference,...)并对它们的平方求和:即 distSq = a1D x a1D + a2D x a2D +a3D x a3D...

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