Sto usando un descrittore HOG, associato a un classificatore SVM, per riconoscere gli umani nelle immagini. Sto usando i wrapper Python per OpenCV. Ho usato l'eccellente tutorial su pymagesearch , che spiega cosa fa l'algoritmo e fornisce suggerimenti su come impostare i parametri del metodo detectMultiScale .
In particolare, lo faccio
# initialize the HOG descriptor
hog = cv2.HOGDescriptor()
# Set the support vector machine to be pre-trained for people detection
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# Detect people in the image
(rects, weights) = hog.detectMultiScale(image,
winStride=(4, 4),
padding=(8, 8),
scale=1.05)
I parametri sono scelti in base a un'accurata regolazione di precisione e prestazioni, seguendo le spiegazioni del tutorial stesso.
Il mio problema è che questo metodo, che sembra il metodo attualmente migliore per riconoscere gli umani in un quadro secondo la letteratura (l' articolo originale è datato 2005) sembra avere prestazioni scarse sulle mie immagini. Ho immagini che contengono vestiti, sia con una modella che senza di essa e sto provando questo approccio per riconoscere quelle con la modella. Su un sottoinsieme di 300 immagini che ho scansionato manualmente per contrassegnarle o meno per contenere il modello, il metodo fallisce il 30% delle volte.
Queste sono alcune immagini come esempi.
Qui ha rilevato un essere umano scomparso:
Qui non ha ottenuto l'intero essere umano:
Qui non lo riconosceva affatto:
Capisco che il rivelatore funziona per gli esseri umani retti. Dovrebbero anche essere a figura intera? Le mie immagini comprendono mezza figura, figure senza testa o senza piedi.
Prima di questo, ho provato un classificatore a cascata basato su funzionalità Haar per riconoscere il volto in un'immagine e l'accuratezza sullo stesso set di immagini è stata del 90%, quindi stavo cercando di migliorare. Inoltre, sono interessato a capire perché le cose non funzionano qui.