Как я могу исправить ValueError в приложении обнаружения объектов? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь добавить ограничивающие рамки к изображению, используя onnxruntime и opencv для обнаружения объектов с нейронной сетью yolov2 . Вместо этого я получаю сообщение об ошибке во время выполнения.

Я преобразовал входное изображение в совместимый тензор / массив 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)

Полный код здесь , если это поможет.

1 Ответ

0 голосов
/ 24 апреля 2019

Массив pred_onnx не соответствует форме, ожидаемой текущим кодом, - необходимо выполнить еще некоторую постобработку. См. здесь для получения подробной информации о выходе.

Например, используя 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]
        ...
...