web-dev-qa-db-fra.com

Détection des visages à l'aide de Cascade Classifier dans opencv python

J'utilise le classificateur de cascade intégré pour la détection des visages. Voici comment est le code ( OpenCV Python Tutorials ):

import numpy as np
import cv2

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

img = cv2.imread('ammma.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x,y,w,h) in faces:
    cv2.Rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for(ex,ey,ew,eh) in eyes:
        cv2.Rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Mais lorsque j'exécute le code, j'obtiens l'erreur suivante:

C:\Python27\python.exe C: /Users/Dell/Downloads/Amma/code/fd.py

Erreur OpenCV: Échec de l'assertion (! Empty ()) dans cv :: CascadeClassifier :: detectMultiScale, fichier C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\objdetect\src\cascadedetect.cpp, ligne 1634 Traceback ( dernier appel le plus récent): Fichier "C: /Users/Dell/Downloads/Amma/code/fd.py", ligne 10, dans faces = face_cascade.detectMultiScale (img, 1.3, 5) cv2.error: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\objdetect\src\cascadedetect.cpp: 1634: erreur: (-215)! empty () dans la fonction cv :: CascadeClassifier :: detectMultiScale

7
praddy4

Reportez-vous à la ligne de code this , elle a échoué lors de la vérification que la cascade n'est pas vide. Veuillez vérifier le chemin vers les fichiers XML avec des cascades formées. Vous devrez peut-être spécifier le chemin d'accès complet au XML comme ceci:

face_cascade = cv2.CascadeClassifier('D:\opencv\data\haarcascades\haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('D:\opencv\data\haarcascades\haarcascade_eye.xml')

Ou mettez simplement ces fichiers dans le répertoire contenant votre script.

28
akarsakov

Vous n'avez PAS besoin de télécharger ou de copier les fichiers .xml. Selon la page OpenCV-Python PyPi , vous pouvez simplement utiliser le chemin packagé vers les cascades installées - cv2.data.haarcascades:

import cv2

# Globals
FACE_CLASSIFIER = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
EYE_CLASSIFIER = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
SCALE_FACTOR = 1.3
BLUE_COLOR = (255, 0, 0)
MIN_NEIGHBORS = 5

# Then use it however you'd like
try:
    faces = FACE_CLASSIFIER.detectMultiScale(gray, SCALE_FACTOR, MIN_NEIGHBORS)
    for (x, y, w, h) in faces:
        cv2.rectangle(self.roi_frame, (x, y), (x+w, y+h), BLUE_COLOR, HAAR_LINE_THICKNESS)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = self.roi_frame[y:y+h, x:x+w]
        eyes = EYE_CLASSIFIER.detectMultiScale(roi_gray)
        for (ex, ey, ew, eh) in eyes:
            cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), GREEN_COLOR, HAAR_LINE_THICKNESS)
except Exception as e:
    warnings.warn('{}.show_haar_features: got exception {}'.format(__name__, e))
7
Zhanwen Chen

Je viens de voir ce post lorsque j'ai rencontré un problème similaire. J'ai réussi à résoudre l'erreur en exécutant les 2 lignes ci-dessous:

face_cascade = cv2.CascadeClassifier('opencv-3.0.0/data/harcascades/haarcascade_frontalface.xml')

eye_cascade = cv2.CascadeClassifier('opencv-3.0.0/data/harcascades/haarcascade_eye.xml')

Peut-être que cela aidera les autres à résoudre le même problème!

2
SBhandari

J'ai fait face au même problème. Vous devrez d'abord donner le chemin correct du fichier au système, qui ressemble à ceci: /home/xxxx/Desktop/Projects/haarcascade_eye.xml. Ensuite, vous devrez ouvrir le code sur github et enregistrer la version brute du code pour son exécution. Il est conseillé que les deux fichiers se trouvent dans le dossier où vous stockez votre fichier de projet. Codage heureux

1
Vakkalagadda Tarun

Eh bien, si vous obtenez cette erreur, vous devez télécharger ces 2 fichiers .xml, car python ne les trouve pas sur le PC. J'ai eu le même problème, puis j'ai téléchargé les fichiers .xml et Je l'ai gardé dans le dossier où se trouve mon fichier .py, puis j'ai obtenu la sortie parfaite. Pour télécharger les fichiers, recherchez le nom du fichier et téléchargez-le depuis sourceforge.

0
Shashank tiwari

Ce message est ancien, mais voici ma réponse quand même. L'utilisation du chemin absolu n'a pas fonctionné. Il s'avère que le fichier XML que j'avais téléchargé (en utilisant curl) était corrompu. J'ai dû copier et coller manuellement le contenu du dossier github, après quoi tout a commencé à fonctionner. La réponse de Zhanwen Chen fonctionne également (ce qui, selon moi, est la bonne façon de le faire pour les classificateurs intégrés).

0
Sarvavyapi

Dans les versions plus récentes de hacascades opencv est également installé, vous avez juste besoin de l'emplacement du fichier des haarcascades, pour l'obtenir, vous pouvez utiliser cv2.data.haarcascades comme indiqué ci-dessous

cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + cascPath)

0
Ajinkya Gholape

Peut-être que vous utilisez virtualenv pour python comme moi. Vous essayez cela.

import os

base_directory = os.path.abspath(os.getcwd())
directory_cv2 = os.path.join(base_directory, "Lib", "site-packages", "cv2","data")
print("la carpeta es: {}".format(directory_cv2))
0
Yerry Aguirre