Ich versuche, cv2 in Python 2.7 zu lernen, aber wenn ich meinen Code ausführte, im spezifischen Teil davon:
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)
es gibt das zurück:
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
Ich habe versucht, die Antwort hier zu suchen, aber das Beste, was ich finden konnte, ist, dass ich die face_cascade falsch laden muss ...
Die XML-Datei oder Datei fehlt oder der Pfad dazu ist falsch oder der Pfad create_capture ist falsch.
Die Pfade im opencv-Beispiel sehen folgendermaßen aus:
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')
Ich habe den gleichen Code ausgeführt. Hier sind zwei Dinge zu beachten ... 1. Geben Sie den gesamten Pfad der XML-Dateien an . 2. Geben Sie am Ende eine Tastendruckereignisanweisung an.
Fügen Sie diesen Codeblock am Ende hinzu und führen Sie Ihre Datei aus, die für mich funktioniert hat:
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()
Zum Beispiel sah mein Code so aus
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()
Meine Ausgabe sah aus wie Bildbeschreibung hier eingeben
Die XML-Datei fehlt. Sie können die Datei aus dem GitHub-Repository abrufen und im selben Verzeichnis wie Ihr Projekt ablegen. Der Link zu dem Ordner auf GitHub ist hier . Laden Sie einfach die Datei mit dem Namen haarcascade_frontalface_default.xml..__ herunter. Die Datei ist tatsächlich auf Ihrem System vorhanden. Gehen Sie einfach in den Ordner site-packages Ihres Python-Installationsordners und überprüfen Sie den Ordner cv2/data auf die Datei
Wenn Sie Anaconda verwenden, sollten Sie den Anaconda-Pfad hinzufügen.
new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/'
face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml')
Verwenden Sie den gesamten Dateipfad und verwenden Sie "\\" anstelle von "\" im XML-Dateipfad.
Der Dateipfad sollte wie folgt aussehen:
face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml')
anstatt:
cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml")
Unter OSX mit einer Homebrew-Installation sollte der vollständige Pfad zum opencv-Ordner funktionieren:
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')
Achten Sie auf die Versionsnummer im Pfad.
der Code muss nicht geändert werden
laden Sie die XML-Datei herunter und geben Sie den Pfad der Datei an
es wird den Fehler beheben (100%)
Solche Fehler können auftreten, wenn Sie nicht den vollständigen Pfad Ihrer XML-Datei definiert haben. Verwenden Sie opencv3.1.0 in raspberrypi 3: "FaceCascade = cv2.CascadeClassifier (' /home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml ') "
Wahrscheinlich ist der face_cascade
leer. Sie können überprüfen, ob die Variable leer ist oder nicht, indem Sie den folgenden Befehl eingeben:
face_cascade.empty()
Wenn es leer ist, wird True
angezeigt. Dies bedeutet, dass Ihre Datei in dem von Ihnen genannten Pfad nicht verfügbar ist. Fügen Sie den vollständigen Pfad der XML-Datei wie folgt hinzu:
r'D:\folder Name\haarcascade_frontalface_default.xml'
"\ Anaconda3\Lib\site-packages\cv2\data \" Ich habe die XML-Datei in diesem Pfad für Anaconda gefunden
der Fehler kann darauf zurückzuführen sein, dass die erforderlichen XML-Dateien nicht ordnungsgemäß geladen wurden. Suchen Sie nach der Datei haarcascade_frontalface_default.xml
, indem Sie die Suchmaschine Ihres Betriebssystems verwenden, erhalten Sie den vollständigen Pfad und setzen Sie ihn als Argument in cv2.CascadeClassifier
als Zeichenfolge
Ich hatte das gleiche Problem mit opencv-python
und ich benutzten eine virtuelle Umgebung. In diesem Fall sollten Sie die xml
-Dateien unter folgender Adresse finden:
/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
Bitte stellen Sie sicher, dass Sie den absoluten Pfad verwenden. Andernfalls funktioniert es nicht.
Der Fehler tritt aufgrund fehlender XML-Dateien oder eines falschen Pfads der XML-Datei auf.
Bitte versuchen Sie den folgenden Code,
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()
Ihre XML-Datei wurde nicht gefunden. Verwenden Sie absolute Pfade wie:
/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)
Bitte kopieren Sie nicht den Inhalt der XML-Datei, denn sobald Sie ihn in den Editor einfügen, wird die Textdatei gespeichert. Laden Sie die Datei also direkt von der angegebenen Quelle herunter.