andreysharypov
@andreysharypov

Как бороться с false positive результатами в OpenCV?

Ребята, пробую настроить OpenCV, для того, чтобы мог находить на фото нужный товар. Но столкнулся с проблемой ложных срабатываний (показывает якобы границы товара в том месте, где его нет).
К примеру, есть вот такое фото мышки:
9b6cf859e04749319328566c84334da8.jpg
На ее основе делаю собственный haar cascade.
Затем с помощью данного кода, пытаюсь найти мышку на фото:
import cv2
import sys

imagePath = sys.argv[1]
cascMouse = 'logitech_cascade.xml'
mouseCascade = cv2.CascadeClassifier(cascMouse)

# Read the image
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

mouses = mouseCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(100, 100),
)

for (x, y, w, h) in mouses:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 255), 2)

cv2.imshow("Electronic items detector", image)


Получаю вот такой результат:
d4e64188dfb34120b1bad1c80d7e7b3d.png

Видим ложные срабатывания. Пробую поиграть с параметрами detectMultiScale()
mouses = mouseCascade.detectMultiScale(
    gray,
    scaleFactor=1.5,
    minNeighbors=10,
    minSize=(100, 100),
)

Результат становится лучше:
1c89d095bbe74299b1abc8fc7d59a650.png

Пробую найти тот же самый объект на другой фотографии:
51758791415348d59772f00231311702.png
При тех же самых настройках ложно определяет область где нет объекта и не определяет область где есть сожий объект.

Подскажите, как лучше настраивать OpenCV? Уверен, что делаю, что то не так и скорее всего упускаю какие-то моменты.
  • Вопрос задан
  • 546 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы