Как настроить учетные данные Google для вызова API Google из приложения Python на Heroku - PullRequest
0 голосов
/ 08 мая 2018

Я создал проект Python с Flask и загрузил его на Heroku как приложение. Цель этого приложения - определить марку по фотографии продукта / пакета с картофельными чипсами, отправленного с внешнего интерфейса. В частности:

  1. клиент отправляет фото продукта с картофельными чипсами
  2. приложение на Heroku получает это фото
  3. приложение вызывает GCP Vision API для получения информации об этом продукте (с помощью OCR и т. Д.)
  4. приложение отправляет марку продукта на внешний интерфейс

Основной скрипт Python, который вызывает GCP Vision API, выглядит следующим образом:

from google.cloud import vision
from google.cloud.vision import types
import os

# For local
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/User/PycharmProjects/Project_brand/Credentials.json"

brands = ['lays', 'pringles', 'ruffles', 'kettle']

def brand_detect(image):
    web, text = annotate(image)

    response_text = brand_text(text, brands)

    if (response_text is not None):

        return response_text

    else:

        response_web = brand_web(web, brands)

        if (response_web is not None):

            return response_web

        else:
            return 'Not Found'




def annotate(image):
    """Returns web annotations given the path to an image."""
    client = vision.ImageAnnotatorClient()

    image = types.Image(content=image)

    web_detection = client.web_detection(image=image).web_detection

    text_detection = client.document_text_detection(image=image)

    return web_detection, text_detection


def brand_web(web, brands):
    if web.web_entities:

        for entity in web.web_entities:

            for brand in brands:

                if (brand in entity.description.lower()) and (entity.score > 0.65):

                    return brand


def brand_text(text, brands):
    if text.full_text_annotation.text:

        for brand in brands:

            if (brand in text.full_text_annotation.text.lower()):
                return brand

Затем вызывается функция brand_detect() из основной функции flask (которая написана в другом скрипте в этом приложении), чтобы отправить марку продукта во внешний интерфейс.

Файл Credentials.json находится в папке проекта и содержит учетные данные для вызова GCP Vision API. Это выглядит так:

{
  "type": "service_account",
  "project_id": "**********************",
  "private_key_id": "**********************",
  "private_key": "-----BEGIN PRIVATE KEY-----**********************-----END PRIVATE KEY-----\n",
  "client_email": "**********************",
  "client_id": "**********************",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "**********************"
}

Приложение отлично работает локально с PyCharm, но, очевидно, мне нужно еще кое-что сделать, чтобы вызвать GCP Vision API из моего приложения на Heroku и выполнить ту же задачу. Под этим я подразумеваю, что строка os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/User/PycharmProjects/Project_brand/Credentials.json" не имеет никакого смысла / утилиты в Heroku, поэтому я должен изменить вышеописанный сценарий и сделать некоторые вещи в Heroku, чтобы установить учетные данные Google и вызвать GCP Vision API из моего приложения python на Heroku.

Может кто-нибудь объяснить мне пошагово , как изменить мой сценарий выше и что делать на Heroku, чтобы вызвать GCP Vision API на Heroku, как я это делал локально?

1 Ответ

0 голосов
/ 09 мая 2018

Решение моей проблемы было (на удивление) очень простым.

Мне осталось только заменить

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/User/PycharmProjects/Project_brand/Credentials.json"

с

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "Credentials.json"

и это работает как для моего приложения на Heroku, так и локально, когда файл Credentials.json находится в папке проекта / приложения.

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