使用cvlib做目标检测时出现IndexError: invalid index to scalar variable报错如何解决
报错根因
这个错误是OpenCV版本和cvlib版本不兼容导致的:OpenCV 4.5.1及更高版本中,net.getUnconnectedOutLayers() 接口返回值格式从原来的嵌套二维数组改成了一维标量数组,而cvlib的源码还是按照旧格式编写,对返回值做i[0]索引操作时就会触发标量索引错误。
解决方案
方案1:降级OpenCV版本(最简单,无需改源码)
直接安装和cvlib适配的OpenCV版本即可,执行以下命令:
pip install opencv-python==4.5.1.48 opencv-python-headless==4.5.1.48
安装完成后重新运行代码即可正常执行。
方案2:修改cvlib源码适配高版本OpenCV(不想降级的话用)
按照报错提示找到cvlib的源码文件:/usr/local/lib/python3.9/site-packages/cvlib/object_detection.py,定位到第29行代码:
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
把代码里的i[0]改成i,修改后为:
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
保存文件后重新运行代码即可。
内容的提问来源于stack exchange,提问作者ShoboHobo
相关产品推荐
相关产品推荐

