J'essaie d'apprendre cv2 en python 2.7, mais lorsque je lance mon code, dans sa partie spécifique:
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 retourne 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, c'est que je dois charger le face_cascade dans le mauvais sens ... Une aide?
Le fichier XML ou le fichier est manquant ou son chemin est incorrect ou le chemin create_capture est incorrect.
Les chemins dans l'exemple ouvert 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')
J'ai couru le même code. Il y a deux choses à noter ici . 1. Indiquez le chemin d'accès complet aux fichiers .xml . 2. Donner une instruction d'événement de touche à la fin.
Ajoutez ce bloc de code à la fin et lancez votre fichier, a travaillé 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 à entrez la description de l'image ici
Le fichier XML est manquant, vous pouvez le récupérer dans le 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 . Il suffit de télécharger 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.
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')
Utilisez le chemin d'accès complet au fichier et utilisez "\\" au lieu de "\" dans le chemin du fichier XML.
Le chemin du fichier devrait être comme suit:
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")
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.
Vous pouvez trouver ce type d'erreur 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 ') "
Probablement le face_cascade
est vide. Vous pouvez vérifier si la variable est vide ou non en tapant la commande suivante:
face_cascade.empty()
Si c'est vide, vous aurez 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'
"\ Anaconda3\Lib\site-packages\cv2\data \" J'ai trouvé le fichier xml dans ce chemin pour Anaconda
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
à l'aide du moteur de recherche de votre système d'exploitation, obtenez le chemin complet et mettez-le comme argument de cv2.CascadeClassifier
sous la forme d'une chaîne.
L'erreur se produit en raison de l'absence de fichiers XML ou du chemin d'accès incorrect du fichier XML.
S'il vous plaît essayez 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()
Votre fichier XML n'a pas été trouvé. Essayez d’utiliser des chemins absolus comme:
/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)
Veuillez ne pas copier coller le contenu du fichier xml, car une fois que vous le collez dans le bloc-notes, il sera enregistré dans un fichier texte. Donc, téléchargez directement le fichier à partir de la source donnée.