处理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
相关产品推荐
相关产品推荐

