numpy Mediapipe数据提取

csbfibhn  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(100)

我正在使用Mediapipe的手部地标检测以及姿势地标检测来获取一个人从手指到肩膀的完整姿势。我的方法是将results.pose_landmarks.landmarkresults.right_hand_landmarks.landmark转换为Python列表,然后添加它们以获得关节的XYZ坐标。然而,我对数据是如何格式化的有点困惑。在我得到总是使用Numpy的建议之前,我使用Python列表和数组,所以我决定将Python列表转换为Numpy数组,然后使用numpy.delete()删除所有不必要的关节,基于Mediapipes网站

上的这个图表。而是把下一个关节放在它的位置上。这导致数组有不同的长度,我的numpy.delete()方法现在是无效的。阵列似乎没有任何标记,以什么关节是什么,所以我不确定如何格式化数据。下面是results.pose_landmarks.landmark Numpy数组的打印结果:[x: 0.2584279179573059 y: 0.8798267245292664 z: -1.2120133638381958 visibility: 0.9825398325920105 x: 0.14266689121723175 y: 1.3377150297164917 z: -1.890997290611267 visibility: 0.4409468173980713 x: 0.3242266774177551 y: 1.1552510261535645 z: -3.138547897338867 visibility: 0.47954243421554565 x: 0.3644513785839081 y: 1.1275866031646729 z: -3.375804901123047 visibility: 0.43009549379348755 x: 0.402935266494751 y: 0.976394534111023 z: -3.2847282886505127 visibility: 0.4783119261264801 x: 0.39945393800735474 y: 0.9679596424102783 z: -3.138399600982666 visibility: 0.38645368814468384]
(我不知道值之间的间距是多少)

**我的主要问题是:**我如何从姿势标志点检测模型中获得点12、14和16的XYZ坐标(从上图中标记),并将这些值与手部标志点检测模型的坐标缝合在一起,以创建一个3(XYZ坐标)乘24(姿势模型中的3个点+手部模型中的21个点)的数组,如果关节坐标不存在,则将其留空,因此数组的长度保持不变(暂停以从长句子中呼吸),然后允许我根据点的坐标进行所需的计算。

iyzzxitl

iyzzxitl1#

您可以将地标的坐标分配到一个numpy数组中,然后保留或删除任何您想要的索引。这里是一个具有5个坐标(x,y,z,可见性,存在性)的np_bits,因此对于姿势地标,它将具有形状(31,5)

np_arr = np.zeros(shape=(len(landmarks_list), 5), dtype=float)
for i, _landmark in enumerate(landmarks_list):
        np_arr[i, 0] = _landmark.x
        np_arr[i, 1] = _landmark.y
        np_arr[i, 2] = _landmark.z
        if _landmark.HasField('visibility'):
            np_arr[i, 3] = _landmark.visibility
        if _landmark.HasField('presence'):
            np_arr[i, 4] = _landmark.presence

相关问题