Google Cloud Vision не отвечает при использовании gunicorn + Flask - PullRequest
1 голос
/ 04 февраля 2020

Я новичок в Google Vision API, но некоторое время работал с gunicorn и flask. Я установил все необходимые библиотеки. у меня есть мой ключ API в среде через файл gunicorn bash. Всякий раз, когда я пытаюсь нажать API gcp, он просто зависает без ответа. Кто-нибудь может помочь? Вот мой gunicorn_start. bash

NAME="test"                                 
NUM_WORKERS=16                                     
PYTHONUNBUFFERED=True
FLASK_DIR=/home/user/fold/API/

echo "Starting $NAME"

cd $FLASK_DIR
conda activate tf


export development=False

export GOOGLE_APPLICATION_CREDENTIALS='/home/user/test-6f4e7.json'
exec /home/user/anaconda3/envs/tf/bin/gunicorn --bind 0.0.0.0:9349 --timeout 500 --worker-class eventlet --workers $NUM_WORKERS app:app

EDIT Он зависает во время вызова API. Код для вызова API:

client = vision.ImageAnnotatorClient()

with io.open(path, 'rb') as image_file:
    content = image_file.read()
image = vision.types.Image(content=content)


response = client.document_text_detection(image=image)

Журнала нет, он просто зависает, ничего больше

1 Ответ

0 голосов
/ 06 февраля 2020

Код выглядит нормально, и это не похоже на ошибку разрешения. Поскольку нет журналов, проблему трудно устранить; Тем не менее, у меня есть две теории о том, что может происходить. Я оставлю их ниже, с некоторой информацией о том, как их устранить.

Вызов API не достигает серверов Google

Это может происходить из-за сети ошибка. Чтобы отменить это, попробуйте сделать запрос из среды разработки (или там, где запущено приложение), используя curl.

Вы можете воспользоваться быстрым запуском CLI для Vision API, чтобы подготовить среду и сделать запрос. Если это работает, то вы можете отказаться от сети в качестве возможной причины. В случае сбоя или зависания запроса вам может потребоваться проверить сетевую конфигурацию вашей среды.

Кроме того, вы можете go на панели инструментов API в Cloud Console и посмотреть в метриках Vision API. На этих графиках вы можете увидеть, достигли ли ваши запросы сервер, а также некоторую полезную информацию, такую ​​как: ошибки по методу API, ошибки по учетным данным, задержка запросов и т. Д. c.

Возникла проблема с отправляемым изображением / документом

Примечание. Измените уровень ведения журнала приложения на DEBUG (если он еще не на этом уровне).

Если вы уверены, что запросы поступают на сервер, возможная проблема может быть связана с файлом, который вы пытаетесь отправить. Если файл слишком большой, соединение может выглядеть так, как будто оно было заморожено во время загрузки, а также может потребоваться некоторое время для обработки. Попробуйте с меньшими файлами, чтобы увидеть результаты.

Кроме того, я заметил, что вы в настоящее время используете синхронный метод для выполнения распознавания. Если файл слишком большой, вы можете попробовать подход асинхронной аннотации. По сути, вы сначала загружаете свои файлы в облачное хранилище, а затем создаете запрос, указывающий: URI хранилища, в котором находится ваш файл, и URI хранилища назначения, в который вы хотите записать результаты.

Что вы получите от службы идентификатор операции. С помощью этого идентификатора вы можете проверить состояние запроса на распознавание и подождать, пока код завершит процесс. Вы можете использовать этот пример в качестве ссылки для его реализации.

Надеемся, с помощью этой информации вы сможете определить, с какой проблемой вы столкнулись, и решить ее.

...