OpenCV imread зависает при вызове из веб-запроса

Вероятно, это одна из самых странных ошибок, с которыми я когда-либо сталкивался при использовании OpenCV. Происходит многое, поэтому позвольте мне попытаться объяснить это в меру своих возможностей.

I am using the Django web framework and OpenCV (cv2) together. I am trying to read a file off my disk from a view in Django.

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

Basically, in the same path as views.py file there is a file called "1.jpg". That is all this code is doing. Easy enough. But the next step is where things get crazy.

Now, I want to read the image file located at 'imagePath'. This requires a call to cv2.imread

image = cv2.imread(imagePath)

But this is where my problems start. Somehow, Apache (or maybe even OpenCV, I can't tell) starts hanging and the file is never loaded. There is no error message, no nothing.

Занимаясь детективной работой, я решил попробовать более старую версию 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 не зависает, и я могу продолжить как обычно с моим изображением, представленным в виде массива, и применить к нему любую из функций cv2.

Однако я не согласен на обходные пути, и тот факт, что cv2.imread зависает, действительно беспокоит меня.

Кто-нибудь сталкивался с этим раньше?

РЕДАКТИРОВАТЬ: Использование cv.imread из оболочки Python работает нормально, просто зависание от запроса Apache.

>>> import cv2
>>> image = cv2.imread("1.jpg")
>>> image.shape
(400, 344, 3)
>>> 
 Tickon24 июл. 2012 г., 09:01
У меня та же проблема с использованием OpenCV 2.4.2, действительно странно ...
 Mailerdaimon08 янв. 2014 г., 13:22
Я столкнулся с этой проблемой в последнее время, есть ли исправление для старых версий OpenCV? Кажется, работает нормально, используя OpenCV 2.4.6.1.
 Adrian Rosebrock09 янв. 2014 г., 13:42
Я не уверен, но думаю, что проблема на самом деле была связана с Python2.6 и обработкой потоков в WSGI. В прошлом году я использовал OpenCV 2.4.0 с Python2.7, и он работал нормально.
 Mailerdaimon10 янв. 2014 г., 08:20
Я столкнулся с проблемой со встроенным скриптом Python без кода Apache / WSGI. Таким образом, ошибка может быть связана с Python 2.6, но не (только) с WSGI. Я искал через OpenCV Bugtracker и изменения вimread но не смог найти ничего связанного с этой ошибкой там. Я сообщу здесь, если узнаю что-то большее, так как старые версии Python / OpenCV все еще широко используются.
 Adrian Rosebrock04 июл. 2012 г., 03:52
Когда я столкнулся с этой проблемой, я использовал OpenCV 2.4.1. А потом скомпилировал и установил 2.4.0 и по какой-то причине imread больше не зависает. Очень странно.

Ответы на вопрос(2)

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 зависает при импорте модуля python из .so файла http://blog.rtwilson.com/how-to-fix-flask-wsgi-webapp-hanging-when-importing-a-module-such-as-numpy-or-matplotlib/

 24 июн. 2017 г., 23:22
Спасибо большое!
 03 июл. 2018 г., 09:07
Спасибо, спас мою неделю. Застрял в этом выпуске за последние 4 дня
 06 мая 2017 г., 16:56
Благодарю. Спас мой день!

Ваш ответ на вопрос