OpenCV imread pendurado quando chamado de uma solicitação da web
Este é provavelmente um dos erros mais estranhos que eu já encontrei ao usar o OpenCV. Há muita coisa acontecendo, então deixe-me tentar explicar isso da melhor maneira possível.
Eu estou usando o framework web Django e o OpenCV (cv2) juntos. Eu estou tentando ler um arquivo fora do meu disco de uma visão no Django.
imagePath = os.path.dirname(__file__) + "/1.jpg"
Basicamente, no mesmo caminho do arquivo views.py existe um arquivo chamado "1.jpg". Isso é tudo que esse código está fazendo. Bastante fácil. Mas o próximo passo é onde as coisas ficam loucas.
Agora, quero ler o arquivo de imagem localizado em 'imagePath'. Isso requer uma chamada para cv2.imprimir
image = cv2.imread(imagePath)
Mas é aí que meus problemas começam. De alguma forma, o Apache (ou talvez mesmo o OpenCV, não sei dizer) começa a ser interrompido e o arquivo nunca é carregado. Não há mensagem de erro, não há nada.
Fazendo algum trabalho de detetive, decidi experimentar uma versão mais antiga do OpenCV (import cv). Estranhamente, quando eu chamo cv.LoadImage (imagePath) o Apache não trava e minha imagem é carregada muito bem. Eu não tenho absolutamente nenhuma ideia do porquê.
Um trabalho em potencial para o meu problema é usar o PIL.
from PIL import Image
import numpy as np
image = Image.open(imagePath)
image = np.asarray(image)
Uma vez, usando o PIL, o Apache não trava e eu posso prosseguir normalmente com minha imagem representada como numpy array e aplicar qualquer uma das funções cv2 nele.
No entanto, eu não sou um para se contentar com soluções alternativas e o fato de que o cv2.imread está pendurado realmente me incomoda.
Alguém já correu para isso antes?
EDIT: Usando cv.imread de um shell Python funciona bem, é apenas a partir de um pedido do Apache que o jeito acontece.
>>> import cv2
>>> image = cv2.imread("1.jpg")
>>> image.shape
(400, 344, 3)
>>>