2015-05-28 9 views
21

sto cercando di imparare CV2 in Python 2.7, ma quando ho eseguito il mio codice, nella parte specifica di essa::! (-215) vuoto() nella funzione detectMultiScale

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) 

esso restituisce questo:

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 

ho provato a cercare la risposta qui, ma il migliore che ho trovato è che devo essere il caricamento del face_cascade nel modo sbagliato ... Qualsiasi aiuto?

+4

il file xml non è stato trovato. prova un percorso assoluto come "/my/files/bla/cacade.xml" – berak

+0

@berak Ho sostituito il percorso originale per quello che hai suggerito ma il codice restituisce lo stesso errore – arthurckl

+0

puoi verificare che l'immagine non sia vuota (es. se non caricato correttamente) aggiungendo un test o la visualizzazione di immagini? – Micka

risposta

21

Manca il file XML o il percorso non è corretto oppure il percorso create_capture non è corretto.

I percorsi nello sguardo del campione OpenCV come questo:

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

ho eseguito lo stesso codice. Ci sono due cose da notare qui. 1. Fornire l'intero percorso dei file .xml. 2. Alla fine, dare un comando chiave all'evento.

Aggiungere questo blocco di codice alla fine ed eseguire il file, ha lavorato per me:

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

Per esempio, il mio codice sembrava

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

La mia uscita sembrava enter image description here

5

Utilizza l'intero percorso del file e usa "\\" invece di "\" nel percorso del file xml.

percorso Il file dovrebbe essere la seguente:

face_cascade = cv2.CascadeClassifier('C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml') 

invece di:

cascade_fn = args.get('--cascade', "..\..\data\haarcascades\haarcascade_frontalface_alt.xml") 
+0

grazie, funziona per me – Statham

5

Se si utilizza Anaconda si dovrebbe aggiungere il percorso Anaconda.

new_path = 'C:/Users/.../Anaconda/Library/etc/haarcascades/' 

face_cascade = cv2.CascadeClassifier(new_path + 'haarcascade_frontalface_default.xml') 
0

Il file XML non è stato trovato. Prova a utilizzare percorsi assoluti come:

/path/to/my/file (Mac, Linux) 
C:\\path\\to\\my\\file (Windows) 
2

Potresti trovare questo tipo di errori quando non hai definito il percorso completo del tuo file XML. Provate questo se si utilizza opencv3.1.0 in Raspberry Pi 3: "faceCascade = cv2.CascadeClassifier ('/ home/PI/opencv3.1.0/dati/haarcascades/haarcascade_frontalface_default.xml')"

1

Probabilmente lo face_cascade è vuoto. È possibile verificare se la variabile è vuota o non digitando seguente comando:

face_cascade.empty() 

Se è vuoto otterrete True e questo significa che il file non è disponibile nel percorso che hai menzionato. Provare ad aggiungere il percorso completo del file XML come segue:

r'D:\folder Name\haarcascade_frontalface_default.xml' 
0

Su OSX con un homebrew installare il percorso completo della cartella OpenCV dovrebbe funzionare:

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

prendersi cura dei numero di versione nel sentiero.

Problemi correlati