You need to enable JavaScript to run this app. 处理2D姿态关键点时NumPy触发IndexError索引越界该如何修复?
优惠活动
大模型
产品
解决方案
定价
更多

处理2D姿态关键点时NumPy触发IndexError索引越界该如何修复?

错误定位

结合报错和打印输出可直接定位问题:

  • 打印的joints2d形状为(2, 3493, 13, 1),索引为3的轴(第四维)长度为1,合法索引只有0
  • 报错触发时person_index的值为1,超出该轴的索引范围
  • 本质是joints2d初始化时的人数维度大小,和实际传入的person_index不匹配
修复方案

根据业务场景选择对应方案:

方案1:修改初始化逻辑支持多人数组

如果需要存储多个人的姿态数据,调整joints2d的初始化代码,把第四维的长度从固定的1改为业务允许的最大人数:

# 原初始化(类似逻辑):joints2d = np.zeros((2, max_num_frames, 13, 1))
# 修改后:
joints2d = np.zeros((2, max_num_frames, 13, max_person_count))

max_person_count设为你业务中需要支持的最大目标人数即可。

方案2:固定索引为0处理单目标场景

如果当前流程只需要处理单个人的姿态,直接将赋值时的索引写死为0,不要使用动态的person_index变量:

# 原错误代码
joints2d[0, :, :, person_index] = keypoints_x
joints2d[1, :, :, person_index] = keypoints_y
# 修改后
joints2d[0, :, :, 0] = keypoints_x
joints2d[1, :, :, 0] = keypoints_y

方案3:动态扩展维度适配不确定人数

如果人数是动态变化的,在赋值前判断索引是否越界,自动扩展第四维长度:

# 赋值前增加判断逻辑
if person_index >= joints2d.shape[3]:
    pad_size = person_index + 1 - joints2d.shape[3]
    joints2d = np.pad(joints2d, 
                       ((0,0), (0,0), (0,0), (0, pad_size)),
                       mode='constant', 
                       constant_values=0)
# 后续赋值逻辑保持不变
joints2d[0, :, :, person_index] = keypoints_x
joints2d[1, :, :, person_index] = keypoints_y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 11:36:07