Руководство. Отправка и анализ файла с помощью Azure Functions и Blob Storage

В этом руководстве описано, как отправить изображение в Azure Blob Storage и обработать его с помощью Azure Functions и Computer Vision. Вы также узнаете, как реализовать триггеры и привязки функций Azure в рамках этого процесса. Вместе эти службы анализируют загруженное изображение, содержащее текст, извлекают из него текст, а затем хранят текст в строке таблицы базы данных для анализа в будущем или других целей.

Azure Blob Storage — это масштабируемое решение для объектного хранилища в облаке от Microsoft. Blob Storage предназначен для хранения изображений и документов, потоковой передачи файлов мультимедиа, управления резервными копиями и архивными данными и многое другое. Дополнительные сведения о Blob Storage см. на странице overview.

Azure Functions — это бессерверное компьютерное решение, которое позволяет создавать и запускать небольшие блоки кода как высокомасштабируемые, бессерверные, управляемые событиями функции. Дополнительные сведения о Azure Functions см. на странице overview.

В этом руководстве вы узнаете, как:

  • Отправка изображений и файлов в Blob Storage
  • Использование триггера события функции Azure для обработки данных, отправленных в Blob Storage
  • Использование средств Foundry для анализа изображения
  • Запись данных в хранилище таблиц с помощью выходных привязок функции Azure

Prerequisites

Создание учетной записи и контейнера

Первым шагом является создание учетной записи для хранения, чтобы разместить загруженные данные объектов Blob, которые в этом сценарии представлены изображениями, содержащими текст. Учетная запись хранения предоставляет разные услуги, но в этом руководстве используется хранилище блобов и хранилище таблиц.

Войдите на портал Azure.

  1. В строке поиска в верхней части портала выполните поиск Хранилище и выберите результат с именем Учетные записи хранения.

  2. На странице Учетные записи хранения в левом верхнем углу выберите + Создать.

  3. На странице Создание учетной записи хранения введите следующие значения:

    • Подписка. Выберите нужную подписку.
    • Группа ресурсов. Выберите Создать и введите имя msdocs-storage-function, а затем нажмите кнопку OK.
    • Имя учетной записи хранения. Введите значение msdocsstoragefunction. Имя учетной записи хранения должно быть уникальным в Azure, поэтому может потребоваться добавить номера после имени, например msdocsstoragefunction123.
    • Регион. Выберите ближайший к вам регион.
    • Производительность: Выберите Стандарт.
    • Избыточность. Оставьте значение по умолчанию.

    Скриншот, показывающий, как создать учетную запись хранения в Azure.

  4. Выберите Review + Create в нижней части и Azure проверяет введенные сведения. После проверки параметров выберите Create и Azure начнет подготовку учетной записи хранения, которая может занять некоторое время.

Создание контейнера

  1. После создания учетной записи хранения выберите Перейти к ресурсу. Следующим шагом является создание контейнера хранилища в учетной записи для хранения отправленных образов для анализа.

  2. На панели навигации выберите Контейнеры.

  3. На странице Контейнеры в верхней части страницы выберите + Контейнер. На выдвижной панели введите имяimageanalysis и убедитесь, что уровень общедоступного доступа установлен на Blob (анонимный доступ только для чтения больших двоичных объектов). Затем выберите Создать.

    Снимок экрана: создание контейнера хранилища.

Вы увидите, что ваш новый контейнер появится в списке контейнеров.

Получите строку подключения

Последний шаг — получить строку подключения для аккаунта хранилища.

  1. В левой области навигации выберите Ключи доступа.

  2. На странице Ключи доступа выберите Показать ключи. Скопируйте значение строки подключения в разделе key1 и вставьте ключ, который будет использоваться позже. Запишите имя msdocsstoragefunction учетной записи хранения для дальнейшего использования.

    Снимок экрана: получение доступа к контейнеру хранилища.

Эти значения необходимы, если необходимо подключить функцию Azure к этой учетной записи хранения.

Создание службы Computer Vision

Затем создайте учетную запись службы Computer Vision, которая обрабатывает отправленные файлы. Computer Vision входит в состав средств Foundry и предлагает различные функции для извлечения данных из изображений. Дополнительные сведения о Computer Vision см. на странице overview.

  1. В строке поиска в верхней части портала выполните поиск Компьютер и выберите результат с именем Компьютерное зрение.

  2. На странице Компьютерное зрение выберите + Создать.

  3. На странице Create Computer Vision введите следующие значения:

    • Подписка. Выберите нужную подписку.
    • Группа ресурсов. Используйте группу ресурсов msdocs-storage-function, созданную ранее.
    • Регион. Выберите ближайший к вам регион.
    • Имя. Введите имя msdocscomputervision.
    • Ценовая категория. Выберите тип Бесплатный, если доступен, в противном случае выберите Стандартный S1.
    • Установите флажок Уведомление об ответственном использовании ИИ, если вы согласны с условиями.

    Скриншот, демонстрирующий создание нового сервиса компьютерного зрения.

  4. В нижней части выберите Просмотр и создание. Azure занимает некоторое время, чтобы проверить введенные сведения. После проверки параметров выберите Create и Azure начнет подготовку службы Computer Vision, что может занять некоторое время.

  5. Когда операция завершится, выберите "Перейти к ресурсу".

Получение ключей

Затем необходимо найти URL-адрес секретного ключа и конечной точки для службы Computer Vision, используемой в приложении-функции Azure.

  1. На странице обзора Computer Vision выберите пункты Ключи и Конечная точка.

  2. На странице Ключи и конечная точка скопируйте значение Key 1 и значения EndPoint и вставьте их куда-нибудь, чтобы использовать в дальнейшем.

    Скриншот, показывающий, как получить ключи и URL-адрес конечной точки для сервиса компьютерного зрения.

Скачивание и настройка примера проекта

Код функции Azure, используемой в этом руководстве, можно найти в репозитории this GitHub. Вы также можете клонировать проект с помощью следующей команды:

git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet

Пример кода проекта выполняет следующие задачи:

  • Извлекает переменные среды для подключения к учетной записи хранения и службе Computer Vision
  • Принимает загруженный файл как параметр блоба.
  • Анализирует BLOB с помощью Службы Computer Vision
  • Отправляет анализируемый текст на изображении в новую строку таблицы, используя выходные привязки.

После скачивания и открытия проекта есть несколько основных понятий, которые необходимо понять в основном Run методе, показанном ниже. Функция Azure использует привязки триггера и вывода, которые применяются с помощью атрибутов к сигнатуре метода Run.

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

Атрибут BlobTrigger используется для привязки нашей функции к событию загрузки в Blob Storage и передачи загруженного двоичного объекта в функцию Run. Триггер большого двоичного объекта имеет два параметра: один для имени контейнера большого двоичного объекта для отслеживания отправки, а другой для строки подключения нашей учетной записи хранения опять.

// Azure Function name and output Binding to Table Storage
[FunctionName("ProcessImageUpload")]
[return: Table("ImageText", Connection = "StorageConnection")]
// Trigger binding runs when an image is uploaded to the blob container below
public async Task<ImageContent> Run([BlobTrigger("imageanalysis/{name}", 
        Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
    // Get connection configurations
    string subscriptionKey = Environment.GetEnvironmentVariable("ComputerVisionKey");
    string endpoint = Environment.GetEnvironmentVariable("ComputerVisionEndpoint");
    string imgUrl = $"https://{ Environment.GetEnvironmentVariable("StorageAccountName")}
                        .blob.core.windows.net/imageanalysis/{name}";

    ComputerVisionClient client = new ComputerVisionClient(
        new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };

    // Get the analyzed image contents
    var textContext = await AnalyzeImageContent(client, imgUrl);

    return new ImageContent { 
        PartitionKey = "Images",
        RowKey = Guid.NewGuid().ToString(), Text = textContext 
    };
}

public class ImageContent
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}

Этот код также извлекает основные значения конфигурации из переменных среды, таких как строка подключения учетной записи хранения и ключ службы Computer Vision. Мы добавим эти переменные среды в среду функции Azure после его развертывания.

Функция ProcessImage также использует второй метод AnalyzeImage. Этот код использует конечную точку URL-адреса и ключ учетной записи Computer Vision, чтобы отправить запрос на этот сервер для обработки образа. Запрос возвращает весь текст, обнаруженный на изображении, который записывается в хранилище таблиц с помощью выходной привязки Run метода.

static async Task<string> ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    // Analyze the file using Computer Vision Client
    var textHeaders = await client.ReadAsync(urlFile);
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);
    
    // Complete code omitted for brevity, view in sample project
    
    return text.ToString();
}

Запуск на локальной машине

Если вы хотите запустить проект локально, можно заполнить переменные среды с помощью файла local.settings.json. Внутри этого файла заполните заполнители значениями, которые вы сохранили ранее при создании ресурсов Azure.

Хотя код функции Azure выполняется локально, он по-прежнему подключается к динамическим службам в Azure, а не с помощью локальных эмуляторов.

{
    "IsEncrypted": false,
    "Values": {
      "AzureWebJobsStorage": "UseDevelopmentStorage=true",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet",
      "StorageConnection": "your-storage-account-connection-string",
      "StorageAccountName": "your-storage-account-name",
      "ComputerVisionKey": "your-computer-vision-key",
      "ComputerVisionEndPoint":  "your-computer-vision-endpoint"
    }
}

Развертывание кода для Azure Functions

Теперь вы готовы развернуть приложение для Azure с помощью Visual Studio. Вы также можете создать приложение Azure Functions в Azure одновременно с процессом развертывания.

  1. Для начала щелкните правой кнопкой мыши узел проекта ProcessImage и выберите Опубликовать.

  2. На экране диалогового окна Publish выберите Azure и выберите Next.

    Снимок экрана, показывающий, как выбрать Azure в качестве целевой платформы развертывания.

  3. Выберите приложение-функцию Azure (Windows) или приложение-функцию Azure (Linux) на следующем экране и выберите Next еще раз.

    Экран с выбором функции Azure в качестве конкретной цели развертывания.

  4. На этапе Экземпляр Функций обязательно выберите подписку, в которую вы хотите выполнить развертывание. Затем выберите зеленый символ + в правой части диалогового окна.

  5. Откроется новое диалоговое окно. Введите следующие значения для нового функционального приложения.

    • Имя. Введите msdocsprocessimage или что-то примерно такое же.
    • Имя подписки. Выберите любую подписку, которую вы хотели бы использовать.
    • Группа ресурсов. Выберите группу ресурсов msdocs-storage-function, созданную ранее.
    • Тип плана. Выберите Потребление.
    • Расположение. Выберите ближайший к вам регион.
    • Azure Storage: выберите созданную ранее учетную запись хранения.

    Снимок экрана, показывающий, как создать новое приложение функции в Azure.

  6. После заполнения всех этих значений нажмите кнопку "Создать". Visual Studio и Azure начинают подготовку запрошенных ресурсов, что занимает несколько мгновений.

  7. После завершения процесса нажмите кнопку "Готово ", чтобы закрыть рабочий процесс диалога.

  8. Последним шагом для развертывания функции Azure является выбор Publish в правом верхнем углу экрана. Публикация функции также может занять некоторое время. По завершении приложение будет запущено на Azure.

Подключение служб

Функция Azure была развернута успешно, но она еще не может подключиться к нашей учетной записи хранения и Computer Vision службам. В параметры конфигурации приложения Azure Functions сначала необходимо добавить правильные ключи и строки подключения.

  1. В верхней части портала Azure найдите function и выберите Function App из результатов.

  2. На экране Function App выберите приложение-функцию, созданное в Visual Studio.

  3. На странице обзора приложения-функции выберите "Конфигурация" в левой области навигации, чтобы открыть страницу, в которой можно управлять различными типами параметров конфигурации для нашего приложения. Сейчас мы заинтересованы в разделе Параметры приложения.

  4. Следующим шагом является добавление параметров для имени учетной записи хранения и строки подключения, секретного ключа Computer Vision и endpoint Computer Vision.

  5. На вкладке Параметры приложения выберите + Новый параметр приложения. В появившемся всплывающем элементе введите следующие значения:

    • Имя. Введите значение ComputerVisionKey.
    • Value: вставьте сохраненный ранее ключ Computer Vision.
  6. Нажмите кнопку "ОК ", чтобы добавить этот параметр в приложение.

    Снимок экрана, который показывает, как добавить новый параметр приложения в Azure Functions.

  7. Затем повторите этот процесс для конечной точки службы Computer Vision, используя следующие значения:

    • Имя. Введите значение ComputerVisionEndpoint.
    • Значение. Вставьте URL-адрес конечной точки, сохраненный ранее.
  8. Повторите этот шаг еще раз для подключения к учетной записи хранения, используя следующие значения:

    • Имя. Введите значение StorageConnection.
    • Value: вставьте строку подключения (connection string), сохраненную ранее.
  9. Наконец, повторите этот процесс еще раз для имени учетной записи хранения, используя следующие значения:

    • Имя. Введите значение StorageAccountName.
    • Значение: Введите имя созданной вами учетной записи хранилища.
  10. После добавления этих параметров приложения обязательно выберите "Сохранить " в верхней части страницы конфигурации. После завершения сохранения можно также выбрать Обновить, чтобы убедиться, что параметры приняты.

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

Отправка изображения в Blob Storage

Теперь вы готовы протестировать наше приложение! Вы можете загрузить объект blob в контейнер, а затем убедиться, что текст на изображении был сохранен в Табличное хранилище.

  1. Сначала в верхней части портала Azure найдите Storage и выберите сторажную учетную запись. На странице учетной записи хранения выберите учетную запись, созданную ранее.

  2. Затем выберите Контейнеры на панели навигации слева и перейдите к созданному ранее контейнеру ImageAnalysis. Отсюда вы можете отправить тестовое изображение прямо в браузере.

    Снимок экрана: переход к контейнеру хранилища.

  3. Вы можете найти несколько примеров изображений в папке изображения в корне примера проекта для скачивания или использовать свои собственные.

  4. В верхней части страницы ImageAnalysis выберите Отправить. В открываемом всплывающем элементе выберите значок папки, чтобы открыть браузер файлов. Выберите изображение, которое вы хотите отправить, а затем нажмите кнопку Отправить.

    Снимок экрана, показывающий, как загрузить BLOB-объект в контейнер хранилища.

  5. Файл должен отображаться внутри контейнера BLOB (хранилище объектов). Затем можно убедиться, что отправка активировала функцию Azure, а текст в изображении был проанализирован и сохранен в хранилище таблиц должным образом.

  6. Используя элементы навигации в верхней части страницы, перейдите на один уровень вверх в учетной записи хранения. Найдите и выберите Обозреватель хранилища на левой панели навигации, а затем выберите Таблицы.

  7. Теперь должна быть доступна таблица ImageText. Выберите таблицу, чтобы просмотреть строки данных внутри нее. Вы увидите запись для обработанного текста изображения, загруженного нами. Ее можно проверить с помощью метки времени или просмотра содержимого столбца Text.

    Снимок экрана с вводом текста в Azure Table Storage.

Congratulations! Вы успешно обработали изображение, которое было отправлено в Blob Storage с помощью Azure Functions и Computer Vision.

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, вы можете удалить созданные вами ресурсы, удалив группу ресурсов.

  1. Выберите Группы ресурсов на главной панели навигации
  2. Выберите группу ресурсов msdocs-storage-function из списка.
  3. В верхней части страницы обзора группы ресурсов нажмите кнопку Удалить группу ресурсов.
  4. В диалоговом окне подтверждения введите имя группы ресурсов msdocs-storage-function.
  5. Выберите "Удалить". Процесс удаления группы ресурсов может занять несколько минут.