В этом блоге я собираюсь поделиться, как создать микросервис, используя функцию 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”