LARa、PKU-MMD数据集介绍以及可视化

LARa、PKU-MMD数据集介绍以及可视化

LARa数据集介绍以及可视化

介绍

原文

OpenDataLab下载

其他下载

LARa是第一个用于人类活动识别的免费物流数据集。在TU多特蒙德大学的 “物流创新实验室混合服务” 中,使用OMoCap,IMUs和RGB相机记录了两个具有14个主题的拣选和一个包装方案。758分钟的记录由12个注释者在474人小时内标记。随后的修订由4名审校在143人小时内进行。所有给定的数据都已标记并分类为8个活动类和19个二进制粗语义描述,也称为属性。22个骨骼点。

R collar
R wrist end
R elbow
L tibia
L collar
L wrist
R humerus
R tibia
lower back
L femur
R foot
L elbow
L humerus
L wrist end
root
R wrist
head end
L foot
R toe
head
R femur
L toe

数据解释

  • RX、RY、RZ:这些通常分别表示围绕X轴、Y轴和Z轴的旋转。
  • TX、TY、TZ:这些通常分别表示沿X轴、Y轴和Z轴的平移(移动)。

在三维图形或机器人领域,这些坐标通常用于描述物体在空间中的位置和方向。例如,RX 可能表示物体围绕X轴旋转的角度,而 TX 可能表示物体沿X轴移动的距离。

标注工具

下载

动作类别

0C1_Standing
1C2_Walking
2C3_Cart
3C4_Handling(upwards)
4C5_Handling(centred)
5C6_Handling(downwards)
6C7_Synchronization
7C8_None

PKU-MMD数据集介绍以及可视化

PKU-MMD 是一个新的大规模基准数据集,专注于连续多模态的3D人体动作理解,涵盖了广泛的复杂人类活动,并提供了完善的标注信息。PKU-MMD 包含两个阶段,针对不同难度的动作检测任务。第一阶段是大间隔动作检测任务,第二阶段是小间隔动作检测任务。我们的数据集还提供了多模态数据来源,包括RGB、深度、红外辐射和骨骼数据。25个骨骼点

下载

动作类别

LabelAction
1bow
2brushing hair
3brushing teeth
4check time (from watch)
5cheer up
6clapping
7cross hands in front (say stop)
8drink water
9drop
10eat meal/snack
11falling
12giving something to other person
13hand waving
14handshaking
15hopping (one foot jumping)
16hugging other person
17jump up
18kicking other person
19kicking something
20make a phone call/answer phone
21pat on back of other person
22pickup
23playing with phone/tablet
24point finger at the other person
25pointing to something with finger
26punching/slapping other person
27pushing other person
28put on a hat/cap
29put something inside pocket
30reading
31rub two hands together
32salute
33sitting down
34standing up
35take off a hat/cap
36take off glasses
37take off jacket
38take out something from pocket
39taking a selfie
40tear up paper
41throw
42touch back (backache)
43touch chest (stomachache/heart pain)
44touch head (headache)
45touch neck (neckache)
46typing on a keyboard
47use a fan (with hand or paper)/feeling warm
48wear jacket
49wear on glasses
50wipe face
51writing

骨骼点分布

可视化

import matplotlib.pyplot as plt
import numpy as np

class PKUDrawer:

    def __init__(self, points):
        self.points = points # T, 25, 3

    def _plot3dSkeleton(self, point: np.ndarray, elev=-82, azim=-630):
        '''
        point: (V, C)
        elev, azim: 3d view angle
        '''
    
        arm = [21, 7, 6, 5, 4, 20, 8, 9, 10, 11, 23] # green
        body = [3, 2, 20, 1, 0] # yellow
        rightLeg = [0, 12, 13, 14, 15] # blue
        leftLeg = [0, 16, 17, 18, 19] # blue

        plt.ioff()
        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        ax.scatter(point[:, 0], point[:, 1], point[:, 2], c='red', s=40.0)
        ax.plot(point[arm, 0], point[arm, 1], point[arm, 2], c='green', lw=2.0)
        ax.plot(point[body, 0], point[body, 1], point[body, 2], c='yellow', lw=2.0)
        ax.plot(point[rightLeg, 0], point[rightLeg, 1], point[rightLeg, 2], c='blue', lw=2.0)
        ax.plot(point[leftLeg, 0], point[leftLeg, 1], point[leftLeg, 2], c='blue', lw=2.0)
        ax.set_xlim(point[:, 0].min(), point[:, 0].max())
        ax.set_ylim(point[:, 1].min(), point[:, 1].max())
        ax.set_zlim(point[:, 2].min(), point[:, 2].max())
        ax.view_init(elev=elev, azim=azim)

        # 设置隐藏坐标轴数值但不隐藏坐标轴
        ax.set_xticklabels([])
        ax.set_yticklabels([])
        ax.set_zticklabels([])

        def on_move(event):
            if event.inaxes == ax and event.button == 1:  # Check if the left mouse button is pressed
                print(f"Elevation: {ax.elev}, Azimuth: {ax.azim}")

        fig.canvas.mpl_connect('motion_notify_event', on_move)

        plt.show()

    def plot3dSkeleton(self, i):
        self._plot3dSkeleton(self.points[i])

    def project3dSkeleton(self, points: np.ndarray, elev=-82, azim=-630):
        '''
        将 3D 骨骼点投影到 2D 平面。

        参数:
            points: (V: 骨骼点数, C: 维度数), 输入的 3D 骨骼点坐标。
            elev: 俯仰角 (elevation angle), 默认值为 -82。
            azim: 方位角 (azimuth angle), 默认值为 -630。

        返回:
            projected_points: (V, 2), 投影后的 2D 坐标。
        '''
        # 检查输入维度
        if points.shape[1] != 3:
            raise ValueError("输入的点坐标必须是 3D 坐标 (V, 3)。")

        # 创建 3D 图形
        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')

        # 设置视角
        ax.view_init(elev=elev, azim=azim)

        # 绘制 3D 点
        ax.scatter(points[:, 0], points[:, 1], points[:, 2], c='b', marker='o')

        # 获取 2D 投影坐标
        projected_points = np.array(ax.get_proj()).dot(np.vstack([points.T, np.ones(points.shape[0])])).T
        projected_points = projected_points[:, :2]  # 取前两维 (x, y)

        # 关闭图形
        plt.close(fig)

        return projected_points

    def _plot2dSkeleton(self, points: np.ndarray):
        '''
        绘制 2D 骨骼点。

        参数:
            points: (V: 骨骼点数, 2), 输入的 2D 骨骼点坐标。
        '''
        # 创建图形
        fig, ax = plt.subplots()

        fig.set_size_inches(6, 6)

        # 绘制骨骼点
        visable_sk_index = list(range(21))
        for i in [7,11,15,19,]:
            visable_sk_index.remove(i)
        ax.scatter(points[visable_sk_index, 0], points[visable_sk_index, 1], c='black', marker='o')

        arm = [6, 5, 4, 20, 8, 9, 10]
        body = [3, 2, 20, 1, 0]
        rightLeg = [0, 12, 13, 14]
        leftLeg = [0, 16, 17, 18]

        for limb in [arm, body, rightLeg, leftLeg]:
            ax.plot(points[limb, 0], points[limb, 1], c='black', lw=2.0)
    
        ax.set_xlim(points[:, 0].min() * 2, points[:, 0].max() * 2)
        ax.set_ylim(points[:, 1].min() * 1.1, points[:, 1].max() * 1.1)

        # 隐藏坐标轴
        ax.axis('off')

        plt.show()

    def plot2dSkeleton(self, i):
        points = self.project3dSkeleton(self.points[i])
        self._plot2dSkeleton(points)


if __name__ == '__main__':
    sk = np.load('/data/PKU-view/features/A05N11-L.npy').reshape(-1,2,25,3)[:,0,:,:]
    PKUDrawer(sk).plot3dSkeleton(400)
    PKUDrawer(sk).plot2dSkeleton(400)

image-20250221092951467
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值