Учебник. Отправка и анализ файла с помощью Функций Azure и Хранилища BLOB-объектов

В этом учебнике вы узнаете, как отправить изображение в Хранилище BLOB-объектов Azure и обработать его с помощью Функций Azure и службы "Компьютерное зрение". В рамках этого процесса вы также узнаете, как реализовать триггеры и привязки функции Azure. Вместе эти службы анализируют отправленное изображение, содержащее текст, извлекают текст из него, а затем сохраняют текст в строке базы данных для последующего анализа или других целей.

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

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

В этом учебнике рассматривается следующее.

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

Необходимые компоненты

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

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

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

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

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

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

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

    Снимок экрана: создание учетной записи хранения в Azure.

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

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

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

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

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

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

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

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

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

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

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

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

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

Создание службы "Компьютерное зрение"

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

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

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

  3. На странице создания Компьютерного зрения укажите следующее:

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

    Снимок экрана: создание службы

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

  5. После завершения операции выберите Перейти к ресурсу.

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

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

  1. На странице обзора Компьютерного зрения выберите Ключи и конечная точка.

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

    Снимок экрана: получение ключей и конечной точки URL-адреса для службы

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

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

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

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

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

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

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

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

// 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; }
}

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

Функция ProcessImage также использует второй вызываемый метод AnalyzeImage, как показано ниже. Этот код использует конечную точку URL-адреса и ключ учетной записи Компьютерного зрения, чтобы сделать запрос на этот сервер для обработки нашего изображения. Запрос вернет весь текст, обнаруженный на изображении, который затем будет записан в Хранилище таблиц с помощью выходной привязки к методу 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

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

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

  2. В диалоговом окне Опубликовать выберите Azure и нажмите кнопку Далее.

    Снимок экрана: выбор Azure в качестве целевого объекта развертывания.

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

    Снимок экрана: выбор службы

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

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

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

    Снимок экрана: создание приложения-функции в Azure.

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

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

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

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

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

  1. В верхней части портала Azure выполните поиск функция и выберите Приложение-функция из результатов.

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

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

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

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

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

    Снимок экрана: добавление нового параметра приложения в службе

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

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

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

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

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

Передача изображения в Хранилище BLOB-объектов

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

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

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

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

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

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

    Снимок экрана: отправка BLOB-объекта в контейнер хранилища.

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

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

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

    Снимок экрана: текстовая запись в Хранилище таблиц Azure.

Поздравляем! Вам удалось обработать изображение, которое было отправлено в Хранилище BLOB-объектов с помощью Функций Azure и Компьютерного зрения.

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

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

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