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

Узнайте, как добавить возможности обнаружения объектов на хранение AppWrite с использованием облачных функций

В этом руководстве мы осмотрим, как мы можем использовать функцию облачных функций Appwrite для выполнения CER … Теги с учебным пособием, неверным, Python, MachineLearning.

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

Мы будем использовать две зависимости для этого примера

  1. CloudMersive-Image-API-клиент
  2. 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.

Учить больше

Кредиты

Фото Арсений Тогулев на Бессмысленно

Оригинал: “https://dev.to/appwrite/learn-how-to-add-object-detection-capabilities-to-your-appwrite-storage-using-cloud-functions-4j6j”