В этом руководстве мы осмотрим, как мы можем использовать функцию облачных функций Appwrite для выполнения определенных задач, когда определенные события проходят на сервере. Вы можете найти полный список доступных системных событий здесь Отказ
В этом примере мы продемонстрируем, как мы можем обнаружить объекты в изображении, который пользователь загрузил. Это может быть полезно, если вы строете что-то вроде фото Google, где вы хотели бы классифицировать фотографии на основе объектов на изображении.
Ради этого примера мы будем использовать CloudMersive’s Люди и обнаружение объекта API Отказ Аналогичная концепция применяется к другим поставщикам API, таких как API Google Vision API или API Amazon. Так что давайте начнем.
Создайте свою облачную функцию
Первый шаг состоит в том, чтобы создать учетную запись CloudMersive и получить ключ API свободного уровня. Теперь пришло время создать свою облачную функцию в консоли Appwrite. Перейти к Функции Раздел вашей консоли и выберите Добавить функцию Отказ Вы можете придать вашу функцию в стиле фанк и выбирать предпочтительную среду. Мы будем использовать Python для этого примера.
Давайте напишем какой-нибудь код
Следующим шагом является запись кода, который будет выполнен и загрузить его. Создайте каталог, чтобы удерживать свою облачную функцию. Затем создайте основной файл кода и требования .txt
Отказ
$ mkdir cloud-functions-demo $ cd cloud-functions-demo $ touch main.py $ touch requirements.txt
Мы будем использовать две зависимости для этого примера
- CloudMersive-Image-API-клиент
- appwrite.
Добавьте это к вашему требования .txt
Отказ Мы обычно выпустили Установка PIP
на этом этапе Но это будет установить библиотеки в пути общего библиотека. Нам нужны библиотеки, которые будут установлены в той же папке, чтобы их можно было легко упаковано.
Запустите следующую команду, чтобы установить библиотеки внутри локального .appwrite
каталог. Среда Python Appwrite будет знать, как автоматически загрузить файл из этого каталога без какой-либо специальной конфигурации.
PIP_TARGET=./.appwrite pip install -r ./requirements.txt --upgrade --ignore-installed
Большой. Пришло время начать редактирование main.py
файл. Мы начинаем, импортируя соответствующие библиотеки.
from __future__ import print_function import time from pprint import pprint import json import os # For cloud vision API import cloudmersive_image_api_client from cloudmersive_image_api_client.rest import ApiException # Appwrite SDK from appwrite.client import Client from appwrite.services.storage import Storage
Мы будем использовать временный файл для доступа к изображению во время выполнения функции. Давайте дадим этот файл имя. Это требуется, потому что библиотека CloudMersive ожидает, что путь к файлу и не двоичные данные в качестве ввода.
FILENAME = "temp.jpg"
Когда функция запущена событием, мы можем получить много метаданных о событии из некоторых специальных переменных среды, которые устанавливаются AppWrite. Полный список доступен здесь Отказ В нашем случае нам нужен идентификатор файла, который был загружен, чтобы получить его. AppWrite удобно предоставляет эту информацию в качестве переменной среды с именем Appwrite_function_event_payload
Отказ Давайте проанализируем эту строку JSON, чтобы получить идентификатор файла.
# Triggered by the storage.files.create event payload = json.loads(os.environ["APPWRITE_FUNCTION_EVENT_PAYLOAD"]) fileID = payload["$id"]
Теперь пришло время настроить Appwrite SDK
# Setup appwrite client client = Client() client.set_endpoint('http://192.168.1.6/v1') # PRIVATE IP OF YOUR APPWRITE CONTAINER client.set_project('5fca866c65afc') # YOUR PROJECT ID client.set_key(os.environ["APPWRITE_KEY"])
Примечание. В рамках функции облака вы не можете использовать Localhost, чтобы обратиться к вашему серверу AppWrite, поскольку localhost относится к вашей собственной среде выполнения. Вам придется найти частную IP-адрес вашего сетевого интерфейса по умолчанию, используя IFConfig (обычно ETH0 в Linux или EN0 в MacOS).
Используя SDK, давайте извлечь изображение и сохранить его:
# Get the image file storage = Storage(client) result = storage.get_file_preview(fileID) # Save the file to the container with open(FILENAME, "wb") as newFile: newFile.write(result)
Мы почти закончили. Теперь мы создадим CloudMersive SDK и сделаем нашу запрос API
# Configure API key authorization: Apikey configuration = cloudmersive_image_api_client.Configuration() configuration.api_key['Apikey'] = os.environ['API_KEY'] # create an instance of the API class api_instance = cloudmersive_image_api_client.RecognizeApi(cloudmersive_image_api_client.ApiClient(configuration)) image_file = FILENAME # file | Image file to perform the operation on. Common file formats such as PNG, JPEG are supported. try: # Detect objects including types and locations in an image api_response = api_instance.recognize_detect_objects(image_file) pprint(api_response) except ApiException as e: print("Exception when calling RecognizeApi->recognize_detect_objects: %s\n" % e)
Упаковка облака функция
Прежде чем мы сможем упаковать нашу облачную функцию, нам нужно убедиться, что наш каталог имеет следующую структуру.
. ├── .appwrite/ ├── main.py └── requirements.txt
Мы упаковываем функцию, создавая TAR-файл из нашей папки.
$ cd .. $ tar -zcvf code.tar.gz cloud-functions-demo
Теперь мы можем загрузить эту панель нашей функции нашей функции, выбрав Развертывать тег вариант. Наша команда точек входа, в этом случае, будет:
$ python main.py
Примечание. Вы также можете автоматизировать процесс загрузки кода, используя последнюю версию AppWrite Server SDK и ваш сервер CI. В будущих версиях AppWrite также поддержит этот процесс, используя специальный инструмент CLI, непосредственно с вашего терминала.
После создания нам нужно определить триггер для функции. В нашем случае мы хотим вызвать его всякий раз, когда новый файл загружен на сервер Appwrite. Итак, мы были бы заинтересованы в Storage.files.create
мероприятие. Триггер может быть включен под Настройки вкладки функции.
Как только триггеры включены, пришло время на наш последний шаг, Функциональные переменные Отказ AppWrite позволяет вам надежно хранить секретные клавиши, используя переменные функции AppWrite, которые будут доступны в качестве переменных среды для вашей программы. Лучшая часть состоит в том, что эти клавиши зашифрованы и надежно хранятся на внутренней БД Appwrite. В этом примере мы использовали две переменные среды, а именно API_KEY
(CloudMersive API ключ) и Appwrite_key.
(Appwrite api ключ) Итак, давайте добавим их в функциональные переменные. Не забудьте нажать Опция обновления Как только вы довольны своими настройками.
Большой! Мы закончили со всей установкой. Все, что сейчас осталось, это проверить функцию облака.
Теперь пришло время проверить свою блестящую новую облачную функцию! Перейти к Хранение Раздел AppWrite и создайте новый файл, нажав кнопку «+» в правом нижнем углу. Выберите изображение по вашему выбору и нажмите Создать Отказ
Ваша облачная функция теперь была бы вызвана. Вы можете проверить это, отправившись на Функции> Название вашей функции> Журналы
После завершения выполнения вы можете проверить ответ от API.
И в нескольких простах мы успешно развернули нашу первую облачную функцию. Возможности с облачными функциями бесконечны! Оставайтесь настроек для получения дополнительных идей облачных функций из команды AppWrite.
Учить больше
- Вы можете найти полный код и множество других демонстраций в нашем Облачные функции демонстрационные репо Отказ
- Проверить Appwrite’s Github repo.
- Наш дискордер сервер это место, если вы когда-нибудь застряли.
- Вы можете найти всю нашу документацию здесь Отказ
Кредиты
Фото Арсений Тогулев на Бессмысленно
Оригинал: “https://dev.to/appwrite/learn-how-to-add-object-detection-capabilities-to-your-appwrite-storage-using-cloud-functions-4j6j”