J'essaye d'apprendre cv2 en python 2.7, mais quand j'exécute mon code, dans la partie spécifique de celui-ci:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('2015-05-27-191152.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
il renvoie ceci:
File "face_detection.py", line 11, in <module>
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/objdetect/src/cascadedetect.cpp:1595: error: (-215) !empty() in function detectMultiScale
J'ai essayé de chercher la réponse ici mais le mieux que j'ai pu trouver est que je dois charger la face_cascade dans le mauvais sens ... Une aide?
python
python-2.7
opencv
image-recognition
Arthurckl
la source
la source
Réponses:
Le XML ou le fichier est manquant ou le chemin d'accès est incorrect ou le chemin create_capture est incorrect.
Les chemins dans l'exemple d'opencv ressemblent à ceci:
cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml") nested_fn = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml") cam = create_capture(video_src, fallback='synth:bg=../data/lena.jpg:noise=0.05')
la source
J'ai eu le même problème.
Je n'avais pas besoin de télécharger autre chose pour résoudre ce problème. CV2 avait tout ce dont j'avais besoin.
Au lieu d'essayer de déterminer où se trouvent les
.xml
fichiers et de coder en dur les valeurs, j'ai utilisé une propriété donnée par cv2.De OP
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
Devient
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
la source
J'ai exécuté le même code. Il y a deux choses à noter ici. 1. Donnez le chemin complet des fichiers .xml. 2. Donnez une instruction d'événement de pression de touche à la fin.
Ajoutez ce bloc de code à la fin et exécutez votre fichier, cela a fonctionné pour moi:
k = cv2.waitKey(0) if k == 27: # wait for ESC key to exit cv2.destroyAllWindows() elif k == ord('s'): # wait for 's' key to save and exit cv2.imwrite('messigray.png',img) cv2.destroyAllWindows()
Par exemple, mon code ressemblait à
import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_eye.xml') img = cv2.imread('lena.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) #faces = face_cascade.detectMultiScale(gray) 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) k = cv2.waitKey(0) if k == 27: # wait for ESC key to exit cv2.destroyAllWindows() elif k == ord('s'): # wait for 's' key to save and exit cv2.imwrite('messigray.png',img) cv2.destroyAllWindows()
Ma sortie ressemblait à ceci:
la source
Utilisez le chemin complet du fichier et utilisez "\\" au lieu de "\" dans le chemin du fichier xml.
Le chemin du fichier doit être le suivant:
face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
au lieu de:
cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")
la source
Le fichier XML est manquant, vous pouvez obtenir le fichier à partir du référentiel GitHub et le placer dans le même répertoire que votre projet. Le lien vers le dossier sur GitHub est ici . Téléchargez simplement le fichier nommé haarcascade_frontalface_default.xml . En fait, le fichier existe sur votre système. Allez simplement dans le dossier site-packages de votre dossier d'installation python et vérifiez le dossier cv2 / data pour le fichier
la source
Si vous utilisez Anaconda, vous devez ajouter le chemin Anaconda.
new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/' face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')
la source
pas besoin de changer le code
téléchargez ce fichier .xml, puis mettez le chemin de ce fichier
cela résoudra l'erreur (100%)
la source
Cette erreur signifie que le fichier XML est introuvable. La bibliothèque a besoin que vous lui transmettiez le chemin complet, même si vous utilisez probablement simplement un fichier fourni avec la bibliothèque OpenCV.
Vous pouvez utiliser le
pkg_resources
module intégré pour déterminer automatiquement cela pour vous. Le code suivant recherche le chemin complet vers un fichier à l'intérieur de l'endroit où lecv2
module a été chargé:import pkg_resources haar_xml = pkg_resources.resource_filename( 'cv2', 'data/haarcascade_frontalface_default.xml')
Pour moi, c'était
'/Users/andrew/.local/share/virtualenvs/foo-_b9W43ee/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml'
; le vôtre est garanti différent. Laissez simplement lapkg_resources
bibliothèque de python le comprendre.Succès!
la source
Sur OSX avec une installation homebrew, le chemin complet du dossier opencv devrait fonctionner:
face_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv/3.4.0_1/share/OpenCV/haarcascades/haarcascade_eye.xml')
Prenez soin du numéro de version dans le chemin.
la source
Probablement le
face_cascade
est vide. Vous pouvez vérifier si la variable est vide ou non en tapant la commande suivante:S'il est vide, vous obtiendrez
True
et cela signifie que votre fichier n'est pas disponible dans le chemin que vous avez mentionné. Essayez d'ajouter le chemin complet du fichier xml comme suit:r'D:\folder Name\haarcascade_frontalface_default.xml'
la source
"\ Anaconda3 \ Lib \ site-packages \ cv2 \ data \" J'ai trouvé le fichier xml dans ce chemin pour Anaconda
la source
Vous pouvez trouver ce type d'erreurs lorsque vous n'avez pas défini le chemin complet de votre fichier XML. Essayez celui-ci si vous utilisez opencv3.1.0 dans raspberrypi 3: " faceCascade = cv2.CascadeClassifier ('/ home / pi / opencv-3.1.0 / data / haarcascades / haarcascade_frontalface_default.xml ')"
la source
Vous pouvez résoudre ce problème en plaçant XML dans le même répertoire dans lequel votre fichier python principal (d'où vous avez essayé d'inclure ce fichier) a été placé. Maintenant, l'étape suivante consiste à utiliser le chemin complet. Par exemple
Cela ne fonctionnera pas
front_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')
Utilisez le chemin complet, maintenant cela fonctionnera bien
front_cascade = cv2.CascadeClassifier('/Users/xyz/Documents/project/haarcascade_eye.xml')
la source
J'ai trouvé cela dans une autre réponse, mais j'ai finalement travaillé pour moi lorsque j'ai ajouté les deux réponses.
import cv2 from matplotlib import pyplot as plt import numpy as np face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_eye.xml") img = cv2.imread('image1.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5)
la source
Vous avez juste besoin d'ajouter le chemin correct du
haarcascade_frontalface_default.xml
fichier, c'est- à- dire que vous n'avez qu'à ajouter le préfixe (cv2.data.haarcascades
)face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
la source
Votre fichier XML est introuvable. Essayez d'utiliser des chemins absolus comme:
la source
l'erreur peut être due au fait que les fichiers xml requis n'ont pas été chargés correctement. Recherchez le fichier
haarcascade_frontalface_default.xml
en utilisant le moteur de recherche de votre système d'exploitation, obtenez le chemin complet et placez-le comme argument encv2.CascadeClassifier
tant que chaînela source
Veuillez ne pas copier-coller le contenu du fichier xml, car une fois que vous le collez dans le bloc-notes, il sera enregistré en tant que fichier texte. Alors téléchargez directement le fichier à partir de la source donnée.
la source
J'ai rencontré le même problème. mais a écrit le bon emplacement.
face_cascade = cv2.CascadeClassifier('./model/haarcascade_frontalface_default.xml')
J'ai compris que je devais déclarer le chemin complet pour supprimer l'erreur.
face_cascade = cv2.CascadeClassifier('C:/pythonScript/Facial-Emotion-Detection/model/haarcascade_frontalface_default.xml')
la source
J'ai eu le même problème avec
opencv-python
et j'ai utilisé un environnement virtuel. Si c'est votre cas, vous devriez trouver lesxml
fichiers sur:/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_frontalface_default.xml
/home/username/virtual_environment/lib/python3.5/site-packages/cv2/data/haarcascade_eye.xml
Veuillez vous assurer que vous utilisez le chemin absolu. Sinon, cela ne fonctionnera pas.
la source
L'idée principale de la solution mentionnée ci-dessus: trouver le bon chemin du
.xml
fichier et l'utiliser pour accéder correctement au fichier.Dans mon cas, j'ai installé l'opencv dans anoconda env, d'abord directement sur le chemin d'Anoconda, puis
recherchez le chemin du
.xml
fichier en utilisant:$ find . -name 'haarcascade_eye.xml'
(par exemple, recherchez lehaarcascade_eye.xml
fichier dans le répertoire actuel (.))Ensuite, utilisez le retour
path
:eye_cascade = cv2.CascadeClassifier(path + 'haarcascade_eye.xml')
la source
L'erreur se produit en raison de l'absence de fichiers xml ou d'un chemin d'accès incorrect du fichier xml.
Veuillez essayer le code suivant,
import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') cap = cv2.VideoCapture(0) while 1: ret, img = cap.read() 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) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
la source