Uso un classificatore opencv in cascata per rilevare le mani nei fotogrammi video e desidero abbassare il tasso di falsi positivi. Leggendo la rete, ho visto che è possibile farlo accedendo alle informazioni rejectLevels
e levelWeights
restituite dal metodo detectMultiScale. Ho visto here che questo è possibile in C++, la mia domanda è: qualcuno è riuscito a farlo in Python? Una domanda simile è stata richiesta here ma era per una versione precedente del metodo di rilevamento.Ottenere il livello di confidenza di detectMultiscale in OpenCV con Python?
Se è possibile, qual è la sintassi corretta per chiamare il metodo? Se ha funzionato per te, menziona la versione OpenCV che stai utilizzando. Sono al 2.4.9.
Il 2.4.11 API fornisce la seguente sintassi
Python: cv2.CascadeClassifier.detectMultiScale(image, rejectLevels, levelWeights[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize[, outputRejectLevels]]]]]])
Quindi di conseguenza, ho cercato
import cv2
import cv2.cv as cv
import time
hand_cascade = cv2.CascadeClassifier('cascade.xml')
img = cv2.imread('test.jpg')
rejectLevels = []
levelWeights = []
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = hand_cascade.detectMultiScale(gray,rejectLevels,levelWeights, 1.1, 5,cv.CV_HAAR_FIND_BIGGEST_OBJECT,(30, 30),(100,100),True)
Ma l'uscita ottengo è
[[259 101 43 43]
[354 217 43 43]
[240 189 43 43]
[316 182 47 47]
[277 139 92 92]]
[]
[]
Grazie per il help,
Ronen
detectMultiScale3 non ha funzionato per me. detectMultiScale2 restituisce intensità (o confidenza) come una seconda var. – thecheech