Estou usando um descritor HOG, juntamente com um classificador SVM, para reconhecer humanos em imagens. Estou usando os wrappers Python para OpenCV. Eu usei o excelente tutorial em pymagesearch , que explica o que o algoritmo faz e fornece dicas sobre como definir os parâmetros do método detectMultiScale .
Especificamente, eu faço
# 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)
Os parâmetros são escolhidos de acordo com um ajuste fino na precisão e no desempenho, seguindo as explicações no próprio tutorial.
Meu problema é que esse método, que atualmente parece o melhor método para reconhecer humanos em uma imagem de acordo com a literatura (o artigo original é de 2005) parece ter um desempenho muito ruim em minhas imagens. Tenho imagens contendo roupas, tanto com um modelo quanto sem ele, e estou tentando esta abordagem para reconhecer as que têm o modelo. Em um subconjunto de 300 imagens que digitalizei manualmente para marcá-las por conter ou não o modelo, o método falha 30% das vezes.
Estas são algumas imagens como exemplos.
Aqui, ele detectou um humano desaparecido:
Aqui não conseguiu o ser humano completo:
Aqui não o reconheceu de maneira alguma:
Entendo que o detector funciona para humanos na posição vertical. Eles também devem ser completos? Minhas imagens abrangem meia figura, figuras sem cabeça ou pés.
Antes disso, eu tentei um classificador em cascata baseado no recurso Haar para reconhecer o rosto em uma imagem e a precisão no mesmo conjunto de imagens foi de 90%, então estava tentando melhorar isso. Além disso, estou interessado em entender por que as coisas não estão funcionando aqui.