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)
>>>