0

我目前的流程是这样的

我使用 Azure-Kinect SDK v1.41 附带的 k4arecorder 录制了两个 MKV 视频。

在第一个中,该人处于 T 姿势,在第二个中,他们正在做一些动作。

然后,我使用 Microsoft/Azure-Kinect-Samples/body-tracking-samples 中的 offline_processor 将这两个视频转换为 JSON 对象。对于每一帧,JSON 包含 x、y、z 位置,其中 z 相对于相机位置,y+ 指向下方以及每个关节的四元数方向

对于 T-Pose json 对象,我提取了 T-Pose 完美的 1 帧位置和旋转。然后,我将此 JSON 对象解析为两个位置和方向的 pandas 数据帧。方向被转换成欧拉角。

对于第二个“运动”Json 对象,我将其解析为另外两个 pandas 数据帧。在第一个中,每一帧是一行,列的形式是

             joint_1.x, joint_1.y, joint_1.z       ...      joint_n.x, joint_n.y, joint_n.z 

在方向矩阵中,每一行也是一个框架,列是格式

             joint_1.z, joint_1.y, joint_1.x       ...      joint_n.z, joint_n.y, joint_n.x 

我想知道的是:

如何从所有坐标都在全局空间中的这 4 个矩阵转到 BVH 文件。我尝试了许多解决方案,但都失败了。

我在此过程中缺少一些基本逻辑,如果有人可以提供帮助,我将不胜感激。任何语言的任何代码解决方案也值得赞赏

4

2 回答 2

0

手非常复杂,因为层次结构很长。使用脊柱胸部的正常旋转来转换手臂运动,然后使用 zyx 作为旋转顺序。

于 2021-06-23T19:39:07.630 回答
0

我在这方面取得了一些成功。

您必须将关节的全局方向放在其父节点的局部方向中。但这实际上意味着什么?

在转换为最终的欧拉之前,您应该首先转换为旋转矩阵。我为此发现的最好的工具是 scipy.spatial.transform.Rotation。

首先找到父矩阵,然后找到它的逆矩阵,然后在它和子联合矩阵之间进行点积

此代码将找到关节相对于其父项的局部方向

这将为您提供子关节的本地方向。然而,你还没有走出困境。这种方法适用于腿部、脊柱和臀部,但会导致手臂非常混乱

在此处输入图像描述

我怀疑它与 Azure Kinect 的联合跟踪方向有关。看看轴到达手臂时如何移动

在此处输入图像描述

我对轮换的了解还不够,无法解决最后一个问题。从锁骨到手,一切都变得一团糟。任何建议都会很棒

于 2021-06-20T22:32:44.043 回答