Estoy usando un descriptor HOG, junto con un clasificador SVM, para reconocer a los humanos en imágenes. Estoy usando los envoltorios de Python para OpenCV. He utilizado el excelente tutorial en pymagesearch , que explica lo que hace el algoritmo y proporciona sugerencias sobre cómo establecer los parámetros del método detectMultiScale .
Específicamente, lo hago
# 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)
Los parámetros se eligen de acuerdo con un ajuste fino tanto en la precisión como en el rendimiento, siguiendo las explicaciones del tutorial.
Mi problema es que este método, que parece ser el mejor método actualmente para reconocer a los humanos en una imagen de acuerdo con la literatura (el documento original está fechado en 2005) parece funcionar bastante mal en mis imágenes. Tengo imágenes que contienen ropa, tanto con una modelo como sin ella, y estoy intentando este enfoque para reconocer a las personas con la modelo. En un subconjunto de 300 imágenes que escaneé manualmente para etiquetarlas por contener el modelo o no, el método falla el 30% de las veces.
Estas son algunas imágenes como ejemplos.
Aquí detectó un humano perdido:
Aquí no obtuvo el humano completo:
Aquí no lo reconoció en absoluto:
Entiendo que el detector funciona para humanos en posición vertical. ¿Deberían también ser de figura completa? Mis imágenes abarcan media figura, figuras sin cabeza o pies.
Antes de esto, probé un clasificador en cascada basado en la función Haar para reconocer la cara en una imagen y la precisión en el mismo conjunto de imágenes ha sido del 90%, por lo que estaba tratando de mejorar esto. Además, estoy interesado en entender por qué las cosas no funcionan aquí.