functions/automl/main.py (38 lines of code) (raw):
# Copyright 2018 Google LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Cloud Function for performing AutoML Vision predictions.
"""
import base64
import json
import os
from google.cloud import automl_v1beta1
from google.cloud import firestore
from google.cloud import storage
AUTOML_MODEL_ID = os.environ.get('AUTOML_MODEL_ID')
AUTOML_PROJECT = os.environ.get('AUTOML_PROJECT')
if not AUTOML_PROJECT:
AUTOML_PROJECT = os.environ.get('GCP_PROJECT')
BUCKET = os.environ.get('GCS_BUCKET')
automl_predict_client = automl_v1beta1.PredictionServiceClient()
firestore_client = firestore.Client()
storage_client = storage.Client()
def automl(data, context):
if 'data' in data:
request_json = base64.b64decode(data.get('data')).decode()
request = json.loads(request_json)
product_id = request.get('event_context').get('product_id')
product_image = request.get('event_context').get('product_image')
bucket = storage_client.get_bucket(BUCKET)
blob = bucket.blob(f'{product_image}.png')
image_data = blob.download_as_string()
model_name = f'projects/{AUTOML_PROJECT}/locations/us-central1/models/{AUTOML_MODEL_ID}'
payload = {
'image': {
'image_bytes': image_data
}
}
response = automl_predict_client.predict(model_name, payload)
top_result = response.payload[0]
label = top_result.display_name
score = top_result.classification.score
firestore_client.collection('promos').document(product_id).set({
'label': label,
'score': score
})
return ''