Adr*_*ock 14 python apache django opencv
这可能是我在使用OpenCV时遇到的最奇怪的错误之一.有很多事情要发生,所以让我尽力解释这个问题.
我一起使用Django Web框架和OpenCV(cv2).我试图从Django的视图中读取我的磁盘上的文件.
imagePath = os.path.dirname(__file__) + "/1.jpg"
Run Code Online (Sandbox Code Playgroud)
基本上,在与views.py文件相同的路径中,有一个名为"1.jpg"的文件.这就是所有这些代码正在做的事情.很容易.但下一步是事情变得疯狂.
现在,我想读取位于'imagePath'的图像文件.这需要调用cv2.imread
image = cv2.imread(imagePath)
Run Code Online (Sandbox Code Playgroud)
但这是我的问题开始的地方.不知何故,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)
Run Code Online (Sandbox Code Playgroud)
再一次,使用PIL Apache不会挂起,我可以正常进行,我的图像表示为numpy数组,并将任何cv2函数应用于它.
但是,我不是一个满足于变通办法的人,而且cv2.imread悬挂的事实真的让我烦恼.
有没有人遇到过这个?
编辑:使用Python shell中的cv.imread工作正常,它只是来自发出挂起的Apache请求.
>>> import cv2
>>> image = cv2.imread("1.jpg")
>>> image.shape
(400, 344, 3)
>>>
Run Code Online (Sandbox Code Playgroud)
小智 8
我有一个类似的问题,找到了一个解决方法->仅添加到您的apache配置中:
WSGIScriptAlias application-group=%{GLOBAL}
Run Code Online (Sandbox Code Playgroud)
显然,当您有一个扩展模块未设计为在子解释器中工作时,就会发生这种情况。以上迫使它在主解释器中运行。
来源: django apache mod-wsgi暂停从.so文件 http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such 导入python模块-as-numpy-或-matplotlib /
错误的
imagePath = os.path.dirname(__file__) + "/1.jpg"
Run Code Online (Sandbox Code Playgroud)
正确的
from os.path import abspath, join, dirname
imagePath = abspath( join(dirname(__file__), "1.jpg") )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2137 次 |
| 最近记录: |