¿Cómo usar correctamente peopledetect.py en opencv?

Soy un principiante de opencv y tengo una gran necesidad de detectar personas / humanos en algunas imágenes, encuentro la interfaz de python llamada peopledetect.py y busco un código como este …

#!/usr/bin/env python import numpy as np import cv2 help_message = ''' USAGE: peopledetect.py  ... Press any key to continue, ESC to stop. ''' def inside(r, q): rx, ry, rw, rh = r qx, qy, qw, qh = q return rx > qx and ry > qy and rx + rw < qx + qw and ry + rh < qy + qh def draw_detections(img, rects, thickness = 1): for x, y, w, h in rects: # the HOG detector returns slightly larger rectangles than the real objects. # so we slightly shrink the rectangles to get a nicer output. pad_w, pad_h = int(0.15*w), int(0.05*h) cv2.rectangle(img, (x+pad_w, y+pad_h), (x+w-pad_w, y+h-pad_h), (0, 255, 0), thickness) if __name__ == '__main__': import sys from glob import glob import itertools as it print help_message hog = cv2.HOGDescriptor() hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() ) for fn in it.chain(*map(glob, sys.argv[1:])): print fn, ' - ', try: img = cv2.imread(fn) except: print 'loading error' continue found, w = hog.detectMultiScale(img, winStride=(8,8), padding=(32,32), scale=1.05) found_filtered = [] for ri, r in enumerate(found): for qi, q in enumerate(found): if ri != qi and inside(r, q): break else: found_filtered.append(r) draw_detections(img, found) draw_detections(img, found_filtered, 3) print '%d (%d) found' % (len(found_filtered), len(found)) cv2.imshow('img', img) ch = 0xFF & cv2.waitKey() if ch == 27: break cv2.destroyAllWindows() 

Para ser honesto, realmente no entiendo el principio de HOG.

Preparo una imagen del sitio web de opencv y trato de hacer una prueba básica usando este código, tal vez así …

 $ ./peopledetect.py abba.png $ ./peopledetect.py luna.jpg 

pero no veo ningún retangle dentro del código en pantalla, tal vez lo hice mal … ¿podría alguien ayudarme? muchas gracias..

abba.pngluan.jpg

Este código utiliza la implementación de OpenCV del detector HOG; consulte este tutorial para obtener una buena explicación del algoritmo. Este clasificador está entrenado en imágenes de todo el cuerpo de personas que están de pie más o menos erguidas, y eso es lo que detectará. Si desea detectar personas cuando puede ver su cara, pero no la totalidad de su cuerpo, en su lugar, eche un vistazo a los algoritmos de detección de cara de OpenCV .