Numpy 如何将三维姿势序列转换为bvh文件格式?

Numpy 如何将三维姿势序列转换为bvh文件格式?,numpy,blender,mo-cap,Numpy,Blender,Mo Cap,我对动画和渲染软件非常陌生,所以如果我需要提供更多信息,请告诉我。我有一系列人体关节的3D位置(基本上是mocap数据),表示不同类型的行走。正如我在本视频中所展示的那样,我已经成功地使用python可视化了序列。我拥有的每个数据都是一个大小为TxJx3的numpy数组,其中T是帧数,J是关节数(在我的例子中为21),3代表3个坐标值。所以我的问题是,如何将这些3D位置转换成BVH文件,然后加载到blender?或者将它们转换为任何其他格式,以便我可以在blender中加载这些数据?好的,我自己

我对动画和渲染软件非常陌生,所以如果我需要提供更多信息,请告诉我。我有一系列人体关节的3D位置(基本上是mocap数据),表示不同类型的行走。正如我在本视频中所展示的那样,我已经成功地使用python可视化了序列。我拥有的每个数据都是一个大小为TxJx3的numpy数组,其中T是帧数,J是关节数(在我的例子中为21),3代表3个坐标值。所以我的问题是,如何将这些3D位置转换成BVH文件,然后加载到blender?或者将它们转换为任何其他格式,以便我可以在blender中加载这些数据?

好的,我自己找到了解决方案。在这里发布,以防其他人发现这很有用。请原谅没有LaTeX渲染,显然,堆栈溢出不支持它(还没有),我在这里太新了,无法附加图像

因此,在BVH格式中,关节之间存在以下关系:

$$pos_j=R_{p(j)}偏移量_j+pos_{p(j)}$$

其中,$pos_j$表示关节$j$的三维位置,$p(j)$返回关节$j$的父关节,不管在什么位置建模(通常DAG从根部开始并指向末端效应器)$offset_j$表示关节$j$相对于其父关节$p(j)$(也称为连接肢体)的偏移,$R{p(j)}$是3D旋转,确定从初始姿势(通常为T形姿势)旋转$offset_j$的程度。在BVH格式中,对于每个父项$P(j)$,我们需要存储$R_{P(j)}^{-1}R_j$


当时我遇到的主要问题是处理有多个孩子的关节,例如根关节,它与双腿和脊柱都有连接。我最终发现并挖掘了它们的函数
正向运动学
内部
skeleton.py
,意识到了该做什么。基本上,对于具有多个子节点的关节,我必须使用$offset=0$制作副本,并将它们指定为相应链的父节点。因此,我制作了根的3个副本:一个成为左腿链的父对象,一个成为右腿链的父对象,一个成为脊椎的父对象。其他有多个孩子的父母也是如此。是的,可视化效果非常好

Blender有一个非常好的Python接口。您可能可以使用Blender本身。在您的案例中,BVH是包围卷层次结构还是Biovision层次结构数据?可能仅用于阅读…您可以使用。它将从openpose生成的json关键点文件转换为bvh