python - 从 Web 请求调用时 OpenCV imread 挂起

标签 python django apache opencv

这可能是我在使用 OpenCV 时遇到的最奇怪的错误之一。发生了很多事情,所以让我尽力解释一下。

  1. 我同时使用 Django 网络框架和 OpenCV (cv2)。我正在尝试从 Django 中的 View 中读取磁盘上的文件。

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

    基本上,在与 views.py 文件相同的路径中有一个名为“1.jpg”的文件。这就是这段代码所做的一切。很容易。但下一步是事情变得疯狂。

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

    image = cv2.imread(imagePath)
    

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

做一些侦探工作后,我决定试用旧版本的 OpenCV(导入 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 挂起这一事实真的让我很困扰。

有人遇到过这个吗?

编辑:从 Python shell 使用 cv.imread 工作正常,它只是来自 Apache 请求,挂起发生。

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

最佳答案

我遇到了类似的问题并找到了解决方法 -> 只需添加到您的 apache 配置中即可:

WSGIScriptAlias application-group=%{GLOBAL}

显然,当您的扩展模块不是为在子解释器中工作而设计时,就会发生这种情况。以上强制它在主解释器中运行。

资料来源: 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/

关于python - 从 Web 请求调用时 OpenCV imread 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315043/

相关文章:

apache - 谷歌云管理 Tomcat 服务

java - Tomcat 不显示带有集群和 apache 的页面

Python Eve 框架身份验证未应用于选定的 API

python - 将 python 脚本从 sqlite3 更改为 mysql 的语法

python - 在 Python 上阅读钢琴音符

django - 如何在 Django 表单中创建依赖下拉列表?

python - 我们如何定义接受参数的@list_route

python - 从 CharField 获取字符串

python - 使用 Django ModelForms 保存数据

php - "413 Request Entity Too Large"用于 AJAX POST 请求但不用于普通文件上传