Python目标检测运行报IndexError列表索引越界问题求助
错误排查及解决方法
1. 核心报错原因:coco.names文件读取逻辑错误
你当前读取分类名的代码存在字符转义错误:
with open(classFile,'rt') as f: classNames = f.read().rstrip('n').split('n')
这里的'n'应该是换行符'\n',缺失了反斜杠转义符,导致你没有按行拆分coco.names的内容,所有分类名被当成了一个字符串存在classNames列表里,列表长度仅为1。当检测返回的classId大于1时,classId-1就会超出列表索引范围,触发本次IndexError报错。
修正后的代码为:
with open(classFile,'rt') as f: classNames = f.read().rstrip('\n').split('\n')
2. 其他需要修正的代码问题
你当前的代码还有两处缩进逻辑错误,虽然不会直接触发本次报错,但会导致后续运行异常:
- 读取coco.names的
with代码块结束后,后续模型初始化、摄像头循环的代码都错误缩进在了with块内部,属于不规范写法,可能引发资源读取异常 cv2.imshow和cv2.waitKey方法错误缩进在了for循环内部,会导致每一帧识别到多个物体时重复刷新窗口,建议调整到for循环外层,和if len(classIds) != 0:判断同级
3. 校验方法
你可以在读取完classNames后添加一行打印代码,确认分类列表长度是否正确:
print(len(classNames), classNames)
标准COCO数据集有80个分类,正常打印长度应为80,如果长度不符,检查你的coco.names文件是否完整、是否和代码放在同一目录下即可。
内容的提问来源于stack exchange,提问作者Abisha Bindar
相关产品推荐
相关产品推荐

