it-swarm.com.de

fehler: (-215)! empty () in der Funktion detectMultiScale

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

43
arthurckl

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')
39
Person

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

8
avneesh mishra

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')
6
Ale

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")
5
Anubhav

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.

3
Bernhard Essl

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%)

3
Coder

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 ') "

2
Sahil Sharma

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'
2
Vaibhav K

"\ Anaconda3\Lib\site-packages\cv2\data \" Ich habe die XML-Datei in diesem Pfad für Anaconda gefunden

2
My3

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 

1

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.

0
lenhhoxung

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()
0
Codemaker

Ihre XML-Datei wurde nicht gefunden. Verwenden Sie absolute Pfade wie:

/path/to/my/file (Mac, Linux)
C:\\path\\to\\my\\file (Windows)
0
Clyde McQueen

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.