Otwarte wiszące OpenCV, gdy wywołane z żądania WWW

Jest to prawdopodobnie jeden z najdziwniejszych błędów, z jakimi kiedykolwiek miałem do czynienia podczas korzystania z OpenCV. Dużo się dzieje, więc pozwól, że spróbuję wyjaśnić to najlepiej, jak potrafię.

Korzystam ze struktury WWW Django i OpenCV (cv2) razem. Próbuję odczytać plik z mojego dysku z widoku w Django.

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

Zasadniczo w tej samej ścieżce co plik views.py znajduje się plik o nazwie „1.jpg”. To wszystko, co robi ten kod. Wystarczająco łatwe. Ale następnym krokiem jest szaleństwo.

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

image = cv2.imread(imagePath)

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

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

Potencjalnym problemem dla mojego problemu jest użycie PIL.

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

Po raz kolejny, użycie PIL Apache nie powiesza się i mogę postępować normalnie z moim obrazem reprezentowanym jako tablica numpy i zastosować do niego dowolne funkcje cv2.

Jednak nie jestem jedynym, który zadowala się obejściami i faktem, że cv2.imread wisi naprawdę mnie niepokoi.

Czy ktoś wpadł na to wcześniej?

EDYCJA: Używanie cv.imread z powłoki Pythona działa dobrze, to tylko z żądania Apache, że zawiesza się.

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

questionAnswers(2)

yourAnswerToTheQuestion