繁体   English   中英

使用 python 在 3D plot 中绘制骨架点

[英]Plotting skeleton point in 3D plot using python

我正在做我的大学项目,我有 NTU RGBD 数据集的骨架文件但我很困惑这些骨架文件代表什么,这是骨架文件的一部分

103
1
72057594037931101 0 1 1 1 1 0 0.02764709 0.05745083 2
25
0.2181153 0.1725972 3.785547 277.419 191.8218 1036.233 519.1677 -0.2059419 0.05349901 0.9692109 -0.1239193 2
0.2323292 0.4326636 3.714767 279.2439 165.8569 1041.918 444.3235 -0.2272637 0.05621852 0.964434 -0.1227094 2
0.2457799 0.6877249 3.633897 281.1529 139.0885 1047.837 367.3966 -0.2486043 0.0660736 0.9535829 -0.1565561 2
0.2128507 0.8079225 3.581995 278.1617 125.6969 1039.476 328.9554 0 0 0 0 2
0.1109304 0.6111551 3.716962 267.2831 148.2511 1007.479 393.5405 0.2179059 0.7353331 -0.6371263 -0.07663021 2
0.100875 0.4286715 3.742593 266.2123 166.5774 1004.187 446.2603 0.03366299 0.7429995 -0.0668001 -0.6650987 1
0.1186992 0.3428923 3.556542 268.5588 173.2219 1011.711 465.4302 -0.5255184 0.8340511 0.1235747 -0.1136605 1
0.1165352 0.3173672 3.550741 268.3543 175.7982 1011.131 472.8558 -0.1148792 0.9877279 -0.0299019 -0.1014999 2
0.3449145 0.5740387 3.588655 291.5822 149.8556 1078.05 398.4594 -0.1106443 0.771432 0.5446612 -0.3098302 2
0.4211396 0.3847547 3.627778 298.8716 169.6459 1098.838 455.4754 0.06063642 0.961247 0.2020273 0.1775176 2
0.1918999 0.3189077 3.540756 276.1781 175.5411 1033.77 472.192 0.4641625 0.2649592 -0.3935434 0.7479796 2
0.1298675 0.317039 3.542577 269.7591 175.7559 1015.225 472.7473 0.6194489 0.3464894 -0.3181734 0.6284853 2
0.162766 0.1745395 3.778471 272.0995 191.6048 1020.896 518.4943 -0.05136763 -0.6810405 0.7174643 -0.1370778 2
0.1975115 -0.1360554 3.904381 274.8451 221.2371 1028.12 604.0775 -0.1458015 -0.5206363 0.1335629 0.8305664 2
0.2442706 -0.4201995 4.054147 278.3998 246.4292 1037.602 676.7612 -0.04763737 0.1068644 0.244998 0.9624379 2
0.2040377 -0.476396 4.094294 274.5897 251.0867 1026.418 690.1627 0 0 0 0 2
0.2699234 0.1678491 3.730005 282.8167 192.0363 1052.036 519.8357 -0.2298583 0.6472055 0.644957 -0.3351428 2
0.3105748 -0.1462299 3.818383 286.1002 222.5039 1060.931 607.8004 0.08184162 0.837252 0.1252462 0.5259509 2
0.3428889 -0.433214 3.943258 288.1872 248.7218 1066.199 683.3955 0.2016301 0.9774966 0.05738356 0.02351441 2
0.2951482 -0.5017325 3.968896 283.5814 254.7903 1052.752 700.8542 0 0 0 0 2
0.2425592 0.6247278 3.656055 280.6673 145.8599 1046.329 386.8308 -0.2489336 0.06207102 0.9568546 -0.1364125 2
0.1200176 0.2955468 3.532409 268.7763 177.8907 1012.419 478.8939 0 0 0 0 2
0.0989792 0.3459614 3.527539 266.6139 172.6136 1006.227 463.6581 0 0 0 0 2
0.08710064 0.2988889 3.54619 265.3322 177.6662 1002.409 478.2144 0 0 0 0 2
0.1268453 0.2813963 3.549525 269.4193 179.4981 1014.19 483.5357 0 0 0 0 2

现在我想使用 matlpotlib plot 这些文件,但我不知道如何阅读这些文件。

你可以使用这个骨架阅读器: https://github.com/zhujiagang/st-gcn-data-len/blob/master/tools/ntu_read_skeleton.py

为了更好地使用,我对此做了一些小改动。 您可以简单地使用文件名调用 extract_keypoints(),您将获得一个 numpy 数组,其中包含每个关节和每个视频帧的所有 x、y、z 坐标。

 class NTURGBSkeletonReader(): def read_skeleton(self, file): with open(file, 'r') as f: skeleton_sequence = {} skeleton_sequence['numFrame'] = int(f.readline()) skeleton_sequence['frameInfo'] = [] for t in range(skeleton_sequence['numFrame']): frame_info = {} frame_info['numBody'] = int(f.readline()) frame_info['bodyInfo'] = [] for m in range(frame_info['numBody']): body_info = {} body_info_key = [ 'bodyID', 'clipedEdges', 'handLeftConfidence', 'handLeftState', 'handRightConfidence', 'handRightState', 'isResticted', 'leanX', 'leanY', 'trackingState' ] body_info = { k: float(v) for k, v in zip(body_info_key, f.readline().split()) } body_info['numJoint'] = int(f.readline()) body_info['jointInfo'] = [] for v in range(body_info['numJoint']): joint_info_key = [ 'x', 'y', 'z', 'depthX', 'depthY', 'colorX', 'colorY', 'orientationW', 'orientationX', 'orientationY', 'orientationZ', 'trackingState' ] joint_info = { k: float(v) for k, v in zip(joint_info_key, f.readline().split()) } body_info['jointInfo'].append(joint_info) frame_info['bodyInfo'].append(body_info) skeleton_sequence['frameInfo'].append(frame_info) return skeleton_sequence def extract_keypoints(self, file_path): ntu_skeleton_seq = self.read_skeleton(file_path) sequence = [] for frame in ntu_skeleton_seq['frameInfo']: if len(frame['bodyInfo']) == 1: keypoints = np.array([[key['x'], key['y'], key['z'], 1] for key in frame['bodyInfo'][0]['jointInfo']]) sequence.append(keypoints) return np.array(sequence)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM