Рубрики
Без рубрики

Обработка изображений с использованием функций Google Cloud

В этом блоге я собираюсь поделиться, как создать микросервис, используя функцию Google Cloud. Объект … с меткой GoogleCloud, микросервисам, безверенным, Python.

В этом блоге я собираюсь поделиться, как создать микросервис, используя функцию Google Cloud. Цель состоит в том, чтобы переформатировать изображение, когда он загружается в ведро Google Cloud Storage.

Настраивать

Я использую Google Cloud Shell, чтобы запустить всю команду. Подробнее о Google Cloud Shell, пожалуйста, следуйте за Официальная документация Отказ

Решение

По словам Google С

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

Шаг 1 : Создайте два ведра GCS, используя команды GCloud. Один для последовательности источника изображения и другой для обработанной последовательности изображения.

export SOURCE_BUCKET_NAME=$DEVSHELL_PROJECT_ID-source
export PROCESSED_BUCKET_NAME=$DEVSHELL_PROJECT_ID-processed

echo "Creating source bucket: gs://$SOURCE_BUCKET_NAME"
gsutil mb gs://$SOURCE_BUCKET_NAME

echo "Creating processed bucket: gs://$PROCESSED_BUCKET_NAME"
gsutil mb gs://$PROCESSED_BUCKET_NAME

Шаг 2 : Создайте функцию облака Google с помощью GCloud.

Облако функция управляются события бессерверных вычислений платформы Google Облако. Запустите свой код локально или в облаке, без необходимости предоставления серверов. Перейти от кода для развертывания с постоянными инструментами доставки и мониторинга. Облачные функции масштабируется вверх или вниз, поэтому вы платите только за вычислять ресурсы, которые вы используете. Легко создавать сквозные сценарии комплексных сценариев разработки, подключившись с существующим облаком Google или сторонним сервисом.

Теперь мы создадим Функция Google Cloud который получит срабатывает Когда изображение загружается в хранилище.

Точка входа в облачные функции должна быть определена в исходном файле Python, называемым main.py Подробности о времени выполнения Python можно найти здесь Отказ Добавьте следующую функцию в main.py Отказ

import os
import cv2
import numpy as np
from google.cloud import storage
from tempfile import NamedTemporaryFile


def reformat_image(event, context):
    """Triggered by a change to a Cloud Storage bucket.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    file = event

    client = storage.Client()
    source_bucket = client.get_bucket(file['bucket'])
    source_blob = source_bucket.get_blob(file['name'])

    image = np.asarray(bytearray(source_blob.download_as_string()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)

    scale_percent = 50  # percent of original size
    width = int(image.shape[1] * scale_percent / 100)
    height = int(image.shape[0] * scale_percent / 100)
    dim = (width, height)

    # resize image
    resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)

    with NamedTemporaryFile() as temp:
        # Extract name to the temp file
        temp_file = "".join([str(temp.name), file['name']])

        # Save image to temp file
        cv2.imwrite(temp_file, resized)

        # Uploading the temp image file to the bucket
        dest_filename = file['name']
        dest_bucket_name = os.environ.get('PROCESSED_BUCKET_NAME', 'Specified environment variable is not set.')
        dest_bucket = client.get_bucket(dest_bucket_name)
        dest_blob = dest_bucket.blob(dest_filename)
        dest_blob.upload_from_filename(temp_file)

Добавить требования .txt Со следующим контентом:

opencv-python==4.2.0.34
numpy==1.18.2
google-cloud-storage==1.27.0

Шаг 3 : Развернуть функцию

gcloud functions deploy reformat_image --set-env-vars PROCESSED_BUCKET_NAME=$PROCESSED_BUCKET_NAME --runtime python37 --trigger-resource $SOURCE_BUCKET_NAME --trigger-event google.storage.object.finalize

Вышеупомянутая команда будет развернуть функцию. Эта функция будет запущена в случае создания объекта хранения. Для получения дополнительной информации о облачных функциях триггеров, пожалуйста, смотрите Официальная документация Отказ

Теперь мы скопируем изображение в ведро, чтобы проверить нашу недавно развернутую функцию. Чтобы скопировать изображение, запустите команду, как указано ниже:

gsutil cp /path/to/images gs://$SOURCE_BUCKET_NAME

Упомянутая выше команда должна создать новый объект в ведре хранения. Это событие должно вызвать функцию облака. Чтобы проверить это, мы запустим следующую команду и посмотрите журналы:

gcloud functions logs read reformat_image --limit 50

Теперь давайте перечислим выходные изображения из ковша назначения

gsutil ls gs://$PROCESSED_BUCKET_NAME

Резюме

В этом блоге я использовал Управляемые сервисы Google Cloud Platform, чтобы изменить размер изображения без развертывания любого сервера. Чтобы избежать каких-либо зарядов на GCP, убедитесь, что удалите ведра GCS и облачные функции.

Надеюсь, что этот блог поможет вам понять функцию облака, и это полезность.

Свяжитесь на LinkedIn или Twitter Отказ

Оригинал: “https://dev.to/dheerajbhadani/image-processing-using-google-cloud-functions-9l2”