Я создал проект Python с Flask и загрузил его на Heroku
как приложение. Цель этого приложения - определить марку по фотографии продукта / пакета с картофельными чипсами, отправленного с внешнего интерфейса. В частности:
- клиент отправляет фото продукта с картофельными чипсами
- приложение на
Heroku
получает это фото
- приложение вызывает
GCP Vision API
для получения информации об этом продукте (с помощью OCR и т. Д.)
- приложение отправляет марку продукта на внешний интерфейс
Основной скрипт 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, как я это делал локально?