es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

OpenCV para la detección de rostros: el módulo ‘cv2’ no tiene el atributo ‘data’ AND !empty() en la función ‘detectMultiScale’.

Me gustaría usar HAAR para detectar caras.

Primero ejecuté el siguiente código:

import cv2

# usar el cascade HAAR para detectar caras
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# detectar caras
faces = face_cascade.detectMultiScale(img)

Al hacerlo, obtengo el siguiente error:

error: OpenCV(4.1.0) /home/vocuser/tmp/xeus/4.1.opencv/opencv/modules/objdetect/src/cascadedetect.cpp:1658: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

Leí que estoy obteniendo el error porque no se pudo encontrar el archivo XML. Así que hice lo siguiente:

import cv2

# usar el cascade HAAR para detectar caras
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# detectar caras
faces = face_cascade.detectMultiScale(img)

Pero ahora obtengo el siguiente error:

AttributeError: module 'cv2' has no attribute 'data'

Entonces, ¿cuál es el enfoque correcto? ¿Cómo puedo usar la función detectMultiScale?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la ubicación del archivo XML. Aquí hay una posible solución:

    1. Asegúrese de que OpenCV esté correctamente instalado en su sistema.
    2. Verifique la ubicación del archivo XML. Debe estar en el mismo directorio que su script de python o en un directorio especificado en cv2.data.haarcascades.
    3. Intente utilizar la ruta completa al archivo XML:
    face_cascade = cv2.CascadeClassifier('/ruta/al/haarcascade_frontalface_default.xml')
    
    1. Si ninguna de las soluciones anteriores funciona, intente reinstalar OpenCV o descargar manualmente el archivo XML del repositorio de GitHub de OpenCV:
    import urllib.request
    
    url = 'https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml'
    filename = 'haarcascade_frontalface_default.xml'
    urllib.request.urlretrieve(url, filename)
    
    face_cascade = cv2.CascadeClassifier(filename)
    

    Una vez que haya cargado el archivo XML correctamente, detectMultiScale debería funcionar como se espera.

Comments are closed.