Как я могу исправить ValueError в приложении обнаружения объектов?
Я пытаюсь добавить ограничивающие рамки к изображению, используя 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 ответ
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]
...