当从Web请求调用OpenCV imread挂

这可能是使用OpenCV时遇到的最奇怪的错误之一。 有很多事情要做,所以让我尽我所能解释这一点。

  1. 我正在使用Django Web框架和OpenCV(cv2)。 我想从Django的视图中读取我的磁盘上的文件。

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

    基本上,在views.py文件的path中有一个名为“1.jpg”的文件。 这就是所有这些代码正在做的事情。 很简单。 但下一步就是事情变得疯狂。

  2. 现在,我想读取位于'imagePath'的图像文件。 这需要调用cv2.imread

     image = cv2.imread(imagePath) 

    但这是我的问题开始的地方。 不知何故,Apache(或者甚至OpenCV,我不知道)开始挂起,文件从不加载。 没有错误信息,什么也没有。

做一些侦探工作,我决定尝试一个旧版本的OpenCV(import cv)。 奇怪的是,当我调用cv.LoadImage(imagePath)Apache不会挂起,我的图像加载就好了。 我完全不知道为什么。

一个潜在的解决我的问题是使用PIL。

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

再一次,使用PIL的Apache不会挂起,我可以正常进行,我的图像表示为numpy数组,并将任何cv2函数应用到它。

然而,我不是一个解决变通办法和cv2.imread悬挂真的困扰我的事实。

有没有人遇到过这个?

编辑:从Pythonshell使用cv.imread工作正常,它只是从一个Apache请求挂起发生。

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

错误

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

 from os.path import abspath, join, dirname imagePath = abspath( join(dirname(__file__), "1.jpg") ) 

我有一个类似的问题,并找到了一个修复 – >只是添加到您的Apache配置:

 WSGIScriptAlias application-group=%{GLOBAL} 

显然,当你有一个扩展模块不能在子解释器中工作时,会发生这种情况。 上面的这些强迫它在主要翻译中运行。

资料来源: django apache mod-wsgi挂在从.so文件导入python模块 http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such -as-numpy的或- matplotlib /