如何在对象检测应用程序中修复ValueError?

问题描述 投票:1回答:1

我正在尝试使用onnxruntime和opencv为图像添加边界框以使用yolov2神经网络检测对象。相反,我在运行时收到错误。

我将输入图像转换为兼容的tensor / numpy数组以输入模型。一旦我知道一切都完美无缺,我添加了以下代码来添加边界框:


    while True:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        for x, y, w, h in pred_onnx:
            cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
            roiGray = gray[y:y+h, x:x+w]
            roiColor = img[y:y+h, x:x+w]

        cv2.imshow("Detect", cv2.resize(img, (500, 500)))
        cv2.waitKey(0)

我期待图像显示(绿色)边界框。相反,我收到此错误:

File "C:\Users\MyName\Desktop\OnnxCV\onnxcv\object_detector.py", line 27, in <module>
    for x, y, w, h in pred_onnx:
ValueError: not enough values to unpack (expected 4, got 1)

完整的代码是here,如果它有帮助。

python opencv computer-vision python-3.6 onnxruntime
1个回答
0
投票

pred_onnx数组不是当前代码所期望的形状 - 还有一些后处理要做。有关输出的详细信息,请参阅here

例如,使用链接帖子建议的30%阈值,您将循环并过滤边界框,如下所示:

for r in range(13):
    for c in range(13):
        confidence = pred_onnx[0, 4, r, c]
        if confidence < 0.3:
            continue
        x = pred_onnx[0, 0, r, c]
        y = pred_onnx[0, 1, r, c]
        w = pred_onnx[0, 2, r, c]
        h = pred_onnx[0, 3, r, c]
        ...
© www.soinside.com 2019 - 2024. All rights reserved.