2015-10-19 1 views
0

J'utilise un guide fourni en ligne avec opencv2.4 qui vous montre comment détecter les visages avec opencv2 et python. J'ai suivi le guide et compris ce qu'il dit. Cependant, je n'arrive pas à trouver le problème avec mon programme parce que la vidéo montre mais maintenant le visage est détecté et la vidéo est très claire. Il n'y a pas d'erreurs J'ai couru en mode débogage et la valeur des faces reste un tuple vide donc je suppose que cela signifie qu'il ne trouve pas le visage. Ce que je ne comprends pas c'est pourquoi et je pense que cela a quelque chose à voir avec la table de hachage.Python Opencv2 + webcam facial dection, aucun visage n'est détecté aucune erreur

Par table de hachage, je veux dire le fichier xml en cascade. Je comprends que les cascades sont essentiellement les lignes directrices pour la détection des artefacts faciaux corrects?

Liens vers les guides. La table de hachage, c'est-à-dire le fichier xml est sur le github lié.

https://github.com/shantnu/FaceDetect/blob/master/haarcascade_frontalface_default.xml https://realpython.com/blog/python/face-detection-in-python-using-a-webcam/

import cv2 
import sys 
import os 
#cascPath = sys.argv[1] 
cascPath = os.getcwd()+'facehash.xml' 
faceCascade = cv2.CascadeClassifier(cascPath) 
print faceCascade 
video_capture = cv2.VideoCapture(0) 

while True: 
    # Capture frame-by-frame 
    ret, frame = video_capture.read() 

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

    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30), 
     flags=cv2.cv.CV_HAAR_SCALE_IMAGE 
      ) 
    cv2.cv 
    # Draw a rectangle around the faces 
    for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 

    # Display the resulting frame 
    cv2.imshow('Video', frame) 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

# When everything is done, release the capture 
video_capture.release() 
cv2.destroyAllWindows() 

Répondre

1

Vous avez un mauvais chemin à votre classificateur xml. (Je suppose que vous avez changé le nom pour obtenir un formulaire plus court).

Au lieu de votre cascPath:

cascPath = os.getcwd()+'facehash.xml' 

Essayez ceci:

cascPath = "{base_path}/folder_with_your_xml/haarcascade_frontalface_default.xml".format(
    base_path=os.path.abspath(os.path.dirname(__file__))) 

Et maintenant, il devrait fonctionner aussi bien.