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
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.
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))
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!
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
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.
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).
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)
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))