python-2.7 - haarcascades - opencv python face recognition webcam
error:(-215)! empty() en la funciĆ³n detectMultiScale (15)
"/ Anaconda3 / Lib / site-packages / cv2 / data /" Encontré el archivo xml en esta ruta para Anaconda
Estoy tratando de aprender cv2 en python 2.7, pero cuando ejecuto mi código, en la parte específica de este:
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)
devuelve esto:
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
Traté de buscar la respuesta aquí, pero lo mejor que pude encontrar es que debo cargar la face_cascade de la manera incorrecta ... ¿Alguna ayuda?
Corrí el mismo código. Hay dos cosas a tener en cuenta aquí. 1. Proporcione la ruta completa de los archivos .xml. 2. Dé una instrucción de evento de pulsación de tecla al final.
Agregue este bloque de código al final y ejecute su archivo, funcionó para mí:
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()
Por ejemplo, mi código parecía
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()
Mi salida parecía ingresar la descripción de la imagen aquí
El error se produce debido a la falta de archivos xml o la ruta incorrecta del archivo xml.
Por favor, intente el siguiente código,
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()
En OSX con homebrew, la ruta completa a la carpeta opencv debería funcionar:
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'')
Cuide el número de versión en la ruta.
Falta el archivo XML o el archivo o la ruta es incorrecta o la ruta create_capture es incorrecta.
Los caminos en la muestra de opencv se ven así:
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'')
Falta el archivo XML, puede obtener el archivo del repositorio de GitHub y colocarlo en el mismo directorio que su proyecto. El enlace a la carpeta en GitHub está here . Simplemente descargue el archivo llamado haarcascade_frontalface_default.xml . En realidad, el archivo existe en su sistema. Simplemente vaya a la carpeta de paquetes del sitio de su carpeta de instalación de Python y verifique la carpeta cv2 / data para el archivo
No copie y pegue el contenido del archivo xml, porque una vez que lo pegue en el bloc de notas se guardará como archivo de texto. Así que descargue directamente el archivo de la fuente dada.
No se encontró su archivo XML. Intenta usar rutas absolutas como:
/path/to/my/file (Mac, Linux)
C://path//to//my//file (Windows)
Probablemente la
face_cascade
esté vacía.
Puede verificar si la variable está vacía o no escribiendo el siguiente comando:
face_cascade.empty()
Si está vacío, obtendrá
True
y esto significa que su archivo no está disponible en la ruta que mencionó.
Intente agregar la ruta completa del archivo xml de la siguiente manera:
r''D:/folder Name/haarcascade_frontalface_default.xml''
Puede encontrar este tipo de errores cuando no definió la ruta completa de su archivo XML. Pruebe este si está usando opencv3.1.0 en raspberrypi 3: " faceCascade = cv2.CascadeClassifier (''/ home / pi / opencv-3.1.0 / data / haarcascades / haarcascade_frontalface_default.xml '')"
Si está utilizando Anaconda, debe agregar la ruta de Anaconda.
new_path = ''C:/Users/.../Anaconda/Library/etc/haarcascades/''
face_cascade = cv2.CascadeClassifier(new_path + ''haarcascade_frontalface_default.xml'')
Tuve el mismo problema con
opencv-python
y usé un entorno virtual.
Si es su caso, debe encontrar los archivos
xml
en:
/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
Asegúrese de estar utilizando la ruta absoluta. De lo contrario, no funcionará.
Use la ruta completa del archivo y use "//" en lugar de "/" en la ruta del archivo xml.
La ruta del archivo debe ser la siguiente:
face_cascade = cv2.CascadeClassifier(''C://opencv//build//etc//haarcascades//haarcascade_frontalface_default.xml'')
en lugar de:
cascade_fn = args.get(''--cascade'', "../../data/haarcascades/haarcascade_frontalface_alt.xml")
el error puede deberse a que los archivos xml requeridos no se han cargado correctamente.
Busque el archivo
haarcascade_frontalface_default.xml
utilizando el motor de búsqueda de su sistema operativo, obtenga la ruta completa y
cv2.CascadeClassifier
como argumento para
cv2.CascadeClassifier
como cadena
no es necesario cambiar el código
descargue ese archivo .xml, luego coloque la ruta de ese archivo
resolverá el error (100%)