CMU mocap数据集

信息

链接:http://mocap.cs.cmu.edu/

Wentao Zhu等人的2016 AAAI论文:

  • We have categorized the CMU motion capture dataset into 45 classes for the purpose of skeleton based action recognition.
  • The categorized dataset contains 2,235 sequences (987,341 frames after down-sampling).
  • CMU subset: we have chosen 8 representative action categories containing 664 sequences (125,667 frames after down-sampling), with actions of jump, walk back, run, sit, getup, pickup, basketball, cartwheel.

骨架连接图:

可视化程序

下面的程序把txt文件中的骨架坐标数据用三维动图的方式可视化。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

data = np.loadtxt(r"E:\CS\action_research\cmu_mocap\wenjun\cmudatasetpart4\82_09.txt", dtype=np.float32, delimiter=',')
T, J = data.shape
data = data.reshape([T, int(J/3), 3])
print(data.shape)

xmax = np.max(data[:, :, 0]) + 0.5
xmin = np.min(data[:, :, 0]) - 0.5
ymax = np.max(data[:, :, 1]) + 10
ymin = np.min(data[:, :, 1]) - 10
zmax = np.max(data[:, :, 2])
zmin = np.min(data[:, :, 2])

# 相邻各节点列表,用来画节点之间的连接线
arms = [12, 11, 10, 9, 8, 7, 17, 0, 1, 2, 3, 4, 5]
rightHand = [10, 13]
leftHand = [3, 6]
legs = [30, 29, 28, 27, 26, 14, 21, 22, 23, 24, 25]
trunk = [14, 15, 16, 17, 18, 19, 20]

# 3D展示------------------------------------------------------------------------
n = 0   # 从第n帧开始展示
m = T   # 到第m帧结束,n<m<T
fig = plt.figure()   # 先生成一块画布,然后在画布上添加3D坐标轴
plt.ion()
for i in range(n, m):
    fig.clf()
    ax = Axes3D(fig, azim=-25, elev=10)
    ax.scatter(data[i, :, 2], data[i, :, 0], data[i, :, 1], c='red', s=40.0)
    ax.plot(data[i, arms, 2], data[i, arms, 0], data[i, arms, 1], c='green', lw=2.0)
    ax.plot(data[i, rightHand, 2], data[i, rightHand, 0], data[i, rightHand, 1], c='green', lw=2.0)
    ax.plot(data[i, leftHand, 2], data[i, leftHand, 0], data[i, leftHand, 1], c='green', lw=2.0)
    ax.plot(data[i, legs, 2], data[i, legs, 0], data[i, legs, 1], c='green', lw=2.0)
    ax.plot(data[i, trunk, 2], data[i, trunk, 0], data[i, trunk, 1], c='green', lw=2.0)
    ax.text(xmax-0.8, ymax-0.2, zmax-0.2, 'frame {}/{}'.format(i, T))
#    ax.text(xmax-0.8, ymax-0.4, zmax-0.4, 'label: ' + str(label[i]))
    ax.set_xlabel("Z")
    ax.set_ylabel("X")
    ax.set_zlabel("Y")
    ax.set_xlim(zmin, zmax)
    ax.set_ylim(xmin, xmax)
    ax.set_zlim(ymin, ymax)
    plt.pause(0.1)
    
plt.ioff()
plt.show()


# 2D展示------------------------------------------------------------------------
#n = 0  # 从第n帧开始展示
#m = T  # 到第m帧结束,n<m<T
#plt.figure()
#plt.ion()
#for i in range(n, m):
#    plt.cla()
#    plt.scatter(data[i, :, 0], data[i, :, 1], c='red', s=40.0)
#    plt.plot(data[i, arms, 0], data[i, arms, 1], c='green', lw=2.0)
#    plt.plot(data[i, rightHand, 0], data[i, rightHand, 1], c='green', lw=2.0)
#    plt.plot(data[i, leftHand, 0], data[i, leftHand, 1], c='green', lw=2.0)
#    plt.plot(data[i, legs, 0], data[i, legs, 1], c='green', lw=2.0)
#    plt.plot(data[i, trunk, 0], data[i, trunk, 1], c='green', lw=2.0)
#    
#    plt.text(xmax - 9.5, ymax - 2.5, 'frame: {}/{}'.format(i, T - 1))
#    # plt.text(xmax-0.8, ymax-0.4, 'label: ' + str(label[i]))
#    plt.xlim(xmin, xmax)
#    plt.ylim(ymin, ymax)
#    plt.pause(0.1)
#
#plt.ioff()
#plt.show()

运行结果:

 

posted @ 2021-01-17 21:10  Picassooo  阅读(2637)  评论(2编辑  收藏  举报