2012-07-03 9 views
9

Este es probablemente uno de los errores más extraños que he encontrado al usar OpenCV. Están sucediendo muchas cosas, así que déjame tratar de explicar esto lo mejor que pueda.OpenCV imread colgando cuando se llama desde una solicitud web

  1. Estoy utilizando el marco web de Django y OpenCV (cv2) juntos. Intento leer un archivo de mi disco desde una vista en Django.

    imagePath = os.path.dirname(__file__) + "/1.jpg" 
    

    Básicamente, en la misma ruta que el archivo views.py, hay un archivo llamado "1.jpg". Eso es todo lo que este código está haciendo. Suficientemente fácil. Pero el siguiente paso es donde las cosas se vuelven locas.

  2. Ahora, quiero leer el archivo de imagen ubicado en 'imagePath'. Esto requiere una llamada a cv2.imread

    image = cv2.imread(imagePath) 
    

    Pero aquí es donde comienzan mis problemas. De alguna manera, Apache (o tal vez incluso OpenCV, no puedo decirlo) comienza a colgar y el archivo nunca se carga. No hay mensaje de error, no hay nada.

Haciendo un poco de trabajo detectivesco Decidí probar una versión anterior de OpenCV (import cv). Por extraño que parezca, cuando llamo a cv.LoadImage (imagePath) Apache no cuelga y mi imagen se carga muy bien. No tengo absolutamente ninguna idea de por qué.

Un posible problema para mi problema es utilizar PIL.

from PIL import Image 
import numpy as np 
image = Image.open(imagePath) 
image = np.asarray(image) 

Una vez más, usando PIL Apache no se cuelga y me puede proceder como normal con mi imagen representa como numpy matriz y aplicar cualquiera de las funciones CV2 a ella.

Sin embargo, no soy de los que se conforman con las soluciones y el hecho de que cv2.imread cuelgue realmente me molesta.

¿Alguien ha encontrado esto antes?

EDITAR: Usar cv.imread desde un shell de Python funciona bien, es solo por una solicitud de Apache que ocurre el bloqueo.

>>> import cv2 
>>> image = cv2.imread("1.jpg") 
>>> image.shape 
(400, 344, 3) 
>>> 
+0

estaba corriendo OpenCV 2.4.1 cuando se produjo este problema. Y luego compiló e instaló 2.4.0 y por cualquier razón, imread ya no se cuelga. Muy extraño. –

+0

Tengo el mismo problema al usar OpenCV 2.4.2, extraño de hecho ... – Tickon

+0

He encontrado este problema últimamente, ¿hay alguna solución para versiones anteriores de OpenCV? Parece funcionar bien usando OpenCV 2.4.6.1. – Mailerdaimon

Respuesta

3

incorrecto

imagePath = os.path.dirname(__file__) + "/1.jpg" 

derecho

from os.path import abspath, join, dirname 

imagePath = abspath(join(dirname(__file__), "1.jpg")) 
2

tuve un problema similar y se encontró una solución -> acaba de añadir a su configuración de Apache:

WSGIScriptAlias application-group=%{GLOBAL} 

Al parecer, sucede cuando tienes un módulo de extensión n ot diseñado para trabajar en subinterpretación. Lo anterior lo obliga a ejecutarse en el intérprete principal.

Fuentes: django apache mod-wsgi hangs on importing a python module from .so file http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such-as-numpy-or-matplotlib/

+0

Gracias. ¡Salvó mi día! – valter

+0

¡Muchas gracias! – robrant

Cuestiones relacionadas