You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python编程提取c3d文件中MARKER对应的LABEL标签?

从C3D文件提取标记点标签的Python实现方案

方案1:基于当前使用的c3d库直接提取

你使用的c3d库的Reader实例本身已经内置了标记点标签属性,不需要在帧遍历逻辑中获取,直接访问对应属性即可,标签顺序和读取到的points数组的点顺序一一对应:

import c3d

with open('capture.c3d', 'rb') as f:
    r = c3d.Reader(f)
    # 提取标记点标签,默认存储会带空白字符,需去除
    point_labels = [label.strip() for label in r.point_labels]
    print("所有标记点标签列表:", point_labels)

    # 标签和每帧点数据对应示例
    for frame_no, points, analog in r.read_frames():
        print(f"\n第 {frame_no} 帧数据:")
        for label, point_info in zip(point_labels, points):
            x, y, z, residual = point_info
            print(f"{label}:坐标({x:.2f}, {y:.2f}, {z:.2f}),残差{residual:.2f}")

你还可以通过Reader实例获取其他C3D元信息:

  • 标记点总数量:r.point_count
  • 运动捕捉采样帧率:r.point_rate
  • 模拟通道标签:r.analog_labels
  • 文件总帧数:r.header.last_frame - r.header.first_frame + 1

方案2:使用ezc3d库提取(兼容性更强)

如果遇到部分旧版本C3D格式文件用上述方法读取标签异常,可以换用运动捕捉领域更常用的ezc3d库,对C3D格式的支持覆盖更全面:

  1. 先安装库:pip install ezc3d
  2. 读取标签与数据的示例代码:
import ezc3d

# 读取C3D文件
c3d_file = ezc3d.c3d('capture.c3d')
# 提取标记点标签
point_labels = c3d_file['parameters']['POINT']['LABELS']['value']
print("所有标记点标签列表:", point_labels)

# 提取所有帧的点坐标数据,维度为 [标记点数量, 3(x/y/z), 总帧数]
point_data = c3d_file['data']['points'][:3, :, :].transpose(1, 0, 2)
# 标签与数据对应示例
for label, frame_points in zip(point_labels, point_data):
    print(f"\n{label} 全帧坐标序列:\n{frame_points}")

内容的提问来源于stack exchange,提问作者RETOTU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:21:00