2012-07-03 11 views
9

Jest to prawdopodobnie jeden z najdziwniejszych błędów, jakie kiedykolwiek napotkałem podczas korzystania z OpenCV. Wiele się dzieje, więc pozwól mi wyjaśnić to najlepiej jak potrafię.Wczytanie pliku OpenCV po wywołaniu z żądania internetowego

  1. Używam ram sieci Django i OpenCV (cv2) razem. Próbuję odczytać plik z dysku z widoku w Django.

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

    Zasadniczo na tej samej ścieżce co plik views.py znajduje się plik o nazwie "1.jpg". To wszystko robi ten kod. Wystarczająco łatwe. Ale następnym krokiem jest sytuacja, w której szaleją.

  2. Teraz chcę przeczytać plik obrazu znajdujący się w "imagePath". Wymaga to wywołania do cv2.imread

    image = cv2.imread(imagePath) 
    

    Ale tutaj zaczynają się moje problemy. W jakiś sposób, Apache (a może nawet OpenCV, nie mogę powiedzieć) zaczyna zwisać, a plik nigdy nie jest ładowany. Nie ma komunikatu o błędzie, nie ma niczego.

Wykonując pracę detektywa postanowiłem wypróbować starszą wersję OpenCV (import cv). O dziwo, kiedy wołam cv.LoadImage (imagePath) Apache nie zawiesza się i mój obraz jest ładowany. Nie mam absolutnie pojęcia, dlaczego.

Potencjalnym zadaniem dla mojego problemu jest użycie PIL.

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

Jeden raz, używając PIL Apache nie powiesić i mogę postępować jak zwykle z mojego obrazu reprezentowane numpy tablicy i zastosowanie dowolnej funkcji CV2 do niego.

Jednak nie jestem osobą, która zadowoli się obejściami i fakt, że cv2.imread jest wiszące naprawdę przeszkadza mi.

Czy ktoś już wcześniej to robił?

EDYCJA: Korzystanie z cv.imread z powłoki Pythona działa dobrze, to tylko z żądania Apache, że zawieszenie się dzieje.

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

biegałam OpenCV 2.4.1 kiedy wystąpił ten problem. A następnie skompilowany i zainstalowany 2.4.0 i z jakiegokolwiek powodu, imread już nie wiesza. Bardzo dziwny. –

+0

Mam ten sam problem przy użyciu OpenCV 2.4.2, co dziwne ... – Tickon

+0

Ostatnio napotkałem ten problem, czy jest jakaś poprawka dla starszych wersji OpenCV? Wydaje się, że działa dobrze przy użyciu OpenCV 2.4.6.1. – Mailerdaimon

Odpowiedz

3

Niewłaściwy

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

Prawy

from os.path import abspath, join, dirname 

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

miałem podobny problem i znalazł fix -> po prostu dodać do konfiguracji apache:

WSGIScriptAlias application-group=%{GLOBAL} 

najwyraźniej dzieje się, gdy masz moduł rozszerzenia n ot przeznaczony do pracy w podległym tłumaczu. Powyższe zmusza do działania w głównym tłumaczu.

Źródła: 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

Dzięki. Uratowałem mój dzień! – valter

+0

Dziękuję bardzo! – robrant

Powiązane problemy