2015-12-08 18 views
7

Dieser Code-Block (in views.py) wird durch eine URL ausgelöst.Kein Problem beim Importieren von cv2. (Gleiche mit virtourenvwrapper versucht zeigt gleiche Ergebnis (nach alle benötigten Bibliotheken hinzufügen) Kamera initialisiert und ....Nicht in Django Gesichter (Gesichtserkennung) (mit Python-Opencv) zu finden Projekt

def caminit(request): 
    cam.open(0) 
    img=cam.read() 
    cv2.imwrite("snap"+".jpg",img[1]) 
    cam.release()        #takes the instant pic 

    faceCascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
    eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 

Wenn <type 'cv2.CascadeClassifier'> .Der geprüft Objekt für print type(faceCascade) gibt erstellt wird.

bewegen weiter in derselben caminit

image = cv2.imread("snap.jpg") 

# when checked with image.dtype it shows correct uint8 also image.shape shows correct data {Eg: (480, 640, 3)} 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

# Detect faces in the image 
faces = faceCascade.detectMultiScale(
    gray, 
    scaleFactor=1.1, 
    minNeighbors=5, 
    minSize=(30, 30), 
    flags = cv2.cv.CV_HAAR_SCALE_IMAGE 
) 

jetzt der entscheidende Teil "Die Nr. Zu finden. der Gesichter“

print "Found {0} faces!".format(len(faces)) 

OUTPUT in TERMINAL:

Found 0 faces! 

Warum geschieht dies

Ich habe das Debuggen versucht, durch Druck in terminal.I haben sie in comments.Camera erwähnt verwendet wird, ist Mein Laptop (HP Neid) Kamera, die Snap mit der Auflösung 640x480 gibt.

Ich vermute, etwas muss in faceCascade.detectMultiScale(..) Block gezwängt werden. (Die Parameter) .I mit scalefactor = 1.000001 und minNeighbors = 3 vergeblich versucht.

+1

Sie scheinen nur einen Bruchteil Ihrer Frage enthalten zu haben. Bitte fügen Sie den Rest davon hinzu, hoffentlich zusammen mit dem, was Sie bisher versucht haben und warum das nicht funktioniert – Sayse

+0

Ich habe die Frage bearbeitet Die Frage wurde versehentlich gestellt. Bitte schauen Sie sich die neue an. –

+0

Haben Sie überprüft, ob das Bild korrekt erstellt wurde? Gibt es eine klare Unterscheidung auf dem Foto von dem, was ein Gesicht sein sollte? (Beleuchtung in Bild etc) – Sayse

Antwort

0

Nach meiner Erfahrung ist der Klassifikator, der das Beste vorhersagt, dies: haarcascade_frontalface_alt2.xml, Sie können es versuchen.

Dies ist der Code, der funktioniert für mich:

min_face_size=30 
max_face_size=100 
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml") 
faces = face_cascade.detectMultiScale(img_gray, 1.05,1,0| cv2.cv.CV_HAAR_SCALE_IMAGE,(min_face_size,min_face_size),(max_face_size,max_face_size)) 

Neben dieser von dem Versuch, sollten Sie sicherstellen, dass Sie ein reelles Bild geladen werden. Es kann passieren, dass Sie ein schwarzes Bild laden, dann kann es etwas zurückgeben, was Sie sagten (480, 640, 3).