Операция OpenCV (imread) застряла в эластичном бобовом стебле - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь прочитать png-файл и вывести на терминал цифровую матрицу изображения, используя imread функцию opencv на сервере, как это

import cv2
from flask import Flask
import os

@application.route('/readImage',methods=['POST'])
def handleHTTPPostRequest():
    imagePath = f'{os.getcwd()}/input.png'
    print('image path is', imagePath)
    print(cv2.__version__)
    im = cv2.imread(imagePath,cv2.IMREAD_COLOR)
    print(im)
    return 'success'

Это дает ожидаемый результат на моей локальной машине (Ubuntu 18.04), независимо от того, сколько раз я его выполняю. Я перенес это в эластичный бобовый стебель (CentOS) с необходимой настройкой. Запрос выполняется нормально (дает правильные журналы и успех), когда я делаю первый звонок. Но когда я делаю пост-вызов во второй раз, он выводит только первые два журнала (версия imagepath и cv2) и на некоторое время застревает там. и через некоторое время он показывает эту ошибку

End of script output before headers: application.py

Я добавил еще одну строку перед cv2.imread, чтобы убедиться, что файл существует

print('does the file exists',os.path.isfile(imagePath) )

Это возвращает истину каждый раз. Я перезагружал сервер несколько раз, похоже, он работает только в первый раз, а cv2.imread () зависает после первого звонка. Что мне не хватает

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Для всех, кто столкнулся с этой проблемой, я нашел решение . Добавьте это в ваш конфигурационный файл ebextensions

container_commands:  
  AddGlobalWSGIGroupAccess: 
    command: "if ! grep -q 'WSGIApplicationGroup %{GLOBAL}' ../wsgi.conf ; then echo 'WSGIApplicationGroup %{GLOBAL}' >> ../wsgi.conf; fi;"
0 голосов
/ 01 июля 2018

Когда вы print из обработчика запросов, Flask пытается сделать что-то разумное, но print на самом деле не то, что вы хотите делать, так как рискует отключить ведение учета запросов / ответов HTTP.

Полностью поддерживаемый способ получения диагностической информации из обработчика - использовать модуль logging. Это потребует небольшой настройки. Смотри http://flask.pocoo.org/docs/1.0/logging/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...