Ребята, пробую настроить OpenCV, для того, чтобы мог находить на фото нужный товар. Но столкнулся с проблемой ложных срабатываний (показывает якобы границы товара в том месте, где его нет).
К примеру, есть вот такое фото мышки:
На ее основе делаю собственный 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)
Получаю вот такой результат:
Видим ложные срабатывания. Пробую поиграть с параметрами detectMultiScale()
mouses = mouseCascade.detectMultiScale(
gray,
scaleFactor=1.5,
minNeighbors=10,
minSize=(100, 100),
)
Результат становится лучше:
Пробую найти тот же самый объект на другой фотографии:
При тех же самых настройках ложно определяет область где нет объекта и не определяет область где есть сожий объект.
Подскажите, как лучше настраивать OpenCV? Уверен, что делаю, что то не так и скорее всего упускаю какие-то моменты.