YOLO社交距离检测调用cv2.dnn.NMSBoxes报Can't parse 'scores'错误求助
错误排查与修复方案
核心错误原因
报错TypeError: Can't parse 'scores'. Input argument doesn't provide sequence protocol是变量名拼写错误导致的参数类型不匹配:cv2.dnn.NMSBoxes接口的第二个参数要求传入所有检测框对应的置信度列表,你代码中调用该接口时传入的是confidence——这是遍历检测结果时定义的、存储单个检测对象置信度的单浮点变量,而你提前定义的、存储所有检测结果置信度的列表变量名为confidences(复数形式),单值不符合接口要求的序列类型参数规则,所以触发报错。
修复步骤
修改detection.py第58行代码:
原代码:
idxs = cv2.dnn.NMSBoxes(boxes, confidence, MIN_CORP, NMS_THRESH)
修改为:
idxs = cv2.dnn.NMSBoxes(boxes, confidences, MIN_CORP, NMS_THRESH)
修改完成后重新运行程序即可解决该报错。
其他警告的可选处理
运行日志中的两个警告不影响核心功能,如需处理可参考以下方案:
- CUDA警告:
DNN module was not built with CUDA backend; switching to CPU是因为当前安装的OpenCV是默认CPU编译版本,无法调用GPU加速。需要GPU加速可先卸载现有版本pip uninstall opencv-python opencv-python-headless,再安装对应CUDA版本的GPU版OpenCV即可。 - 视频流警告:
terminating async callback是Windows平台默认媒体框架的兼容性问题,可在打开摄像头的代码中指定后端消除警告,例如将cv2.VideoCapture(0)修改为cv2.VideoCapture(0, cv2.CAP_DSHOW)。
内容的提问来源于stack exchange,提问作者Syasa
相关产品推荐
相关产品推荐

