OpenCV imread hängt, wenn es von einer Webanfrage aufgerufen wird

Dies ist wahrscheinlich einer der seltsamsten Fehler, auf den ich jemals bei der Verwendung von OpenCV gestoßen bin. Es ist viel los, also lassen Sie mich versuchen, dies nach besten Kräften zu erklären.

Ich benutze das Django-Webframework und OpenCV (cv2) zusammen. Ich versuche, eine Datei von meiner Festplatte aus einer Ansicht in Django zu lesen.

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

Grundsätzlich befindet sich im selben Pfad wie die Datei views.py eine Datei mit dem Namen "1.jpg". Das ist alles, was dieser Code tut. Leicht genug. Aber der nächste Schritt ist, wo die Dinge verrückt werden.

Jetzt möchte ich die Bilddatei unter 'imagePath' lesen. Dies erfordert einen Aufruf von cv2.imread

image = cv2.imread(imagePath)

Aber hier fangen meine Probleme an. Irgendwie hängt Apache (oder vielleicht sogar OpenCV, kann ich nicht sagen) und die Datei wird nie geladen. Es gibt keine Fehlermeldung, keine nichts.

Als Detektiv habe ich beschlossen, eine ältere Version von OpenCV (Lebenslauf importieren) auszuprobieren. Seltsamerweise bleibt Apache beim Aufrufen von cv.LoadImage (imagePath) nicht hängen und mein Bild wird einwandfrei geladen. Ich habe absolut keine Ahnung warum.

Eine mögliche Lösung für mein Problem ist die Verwendung von PIL.

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

Ein weiteres Mal, PIL Apache bleibt nicht hängen und ich kann wie gewohnt mit meinem als Numpy-Array dargestellten Bild fortfahren und eine der cv2-Funktionen darauf anwenden.

Ich bin jedoch nicht derjenige, der sich mit Problemumgehungen zufrieden gibt, und die Tatsache, dass cv2.imread hängt, stört mich wirklich.

Hat jemand schon einmal darauf gestoßen?

BEARBEITEN: Die Verwendung von cv.imread aus einer Python-Shell funktioniert einwandfrei. Nur aus einer Apache-Anfrage heraus kommt es zum Absturz.

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage