События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы узнаете, как загрузить изображение в Blob-хранилище Azure и обработать его с помощью функций Azure, компьютерного зрения и базы данных Cosmos DB. В рамках этого процесса вы также узнаете, как реализовать триггеры и привязки функции Azure. Вместе эти службы анализируют загруженное изображение, содержащее текст, извлекают из него текст, а затем хранят текст в строке таблицы базы данных для анализа в будущем или других целей.
Хранилище BLOB-объектов Azure — это решение корпорации Майкрософт для хранения масштабируемых объектов в облаке. Blob Storage предназначено для хранения изображений и документов, потоковой передачи мультимедийных файлов, управления данными резервного копирования и архивирования, а также многого другого. Дополнительные сведения о Хранилище BLOB-объектов см. на странице обзора.
Предупреждение
Это руководство предназначено для быстрого внедрения и поэтому не следует принципу безопасности по умолчанию. Дополнительные сведения об этом сценарии с целью обеспечения безопасности по умолчанию см. в статье "Вопросы безопасности".
Azure Cosmos DB — это полностью управляемая база данных NoSQL и реляционная база данных для современной разработки приложений.
Функции Azure — это бессерверное компьютерное решение, которое позволяет создавать и запускать небольшие блоки кода в виде функций с высоким уровнем масштабируемости, без сервера, управляемых событиями. Дополнительные сведения о Функциях Azure см. на странице обзора.
Из этого руководства вы узнаете, как:
Первым шагом создайте аккаунт хранения, который будет хранить загруженные блобы данных; в этом сценарии это будут изображения с текстом. В учетной записи хранения предлагаются различные службы, но в этом руководстве используется только хранилище объектов Blob.
В Visual Studio Code нажмите клавиши CTRL + SHIFT + P, чтобы открыть палитру команд.
Выполните поиск по запросу Служба хранилища Azure: создание учетной записи хранения (расширенные параметры).
Создайте ресурс хранилища с помощью таблицы ниже.
Параметр | Значение |
---|---|
Имя | Введите msdocsstoragefunction или что-то подобное. |
Группа ресурсов | Выберите группу ресурсов msdocs-storage-function , созданную ранее. |
Статический веб-хостинг | № |
В Visual Studio Code нажмите клавиши SHIFT + ALT + A, чтобы открыть Azure Explorer.
Разверните раздел Хранилище, разверните узел своей подписки и дождитесь создания ресурса.
images
. При этом создается частный контейнер.Для этой процедуры необходим общедоступный контейнер. Чтобы изменить соответствующую конфигурацию, внесите изменения на портале Azure.
images
и выберите ...
(многоточие) в конце строки.msdocsstoragefunction
учетной записи хранения для последующего использования.Затем создайте учетную запись службы распознавания искусственного интеллекта Azure, которая будет обрабатывать отправленные файлы. Визуальное распознавание является частью служб ИИ Azure и предлагает различные функции для извлечения данных из изображений. Дополнительные сведения о Azure AI Vision см. на странице обзора.
В строке поиска в верхней части портала выполните поиск Компьютер и выберите результат с именем Компьютерное зрение.
На странице Компьютерное зрение выберите + Создать.
На странице создание компьютерного зрения укажите следующее:
msdocs-storage-function
, созданную ранее.msdocscomputervision
.В нижней части выберите Просмотр и создание. Azure занимает некоторое время для проверки введенных сведений. После проверки параметров нажмите кнопку Создать и Azure начнет подготовку службы "Компьютерное зрение", что может занять некоторое время.
После завершения операции выберите Перейти к ресурсу.
Затем необходимо найти секретный ключ и URL-адрес конечной точки для службы "Компьютерное зрение", чтобы использовать в приложении-функции Azure.
На странице обзора Компьютерного зрения выберите Ключи и конечная точка.
На странице "Ключи" и "EndPoint" скопируйте значение Key 1 и значения EndPoint и вставьте их где-то для последующего использования. Конечная точка должна иметь следующий формат: https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com/
Снимок экрана, показывающий, как получить ключи и URL-адрес конечной точки для службы "Компьютерное зрение".
Создайте учетную запись службы Cosmos DB для хранения анализа файлов. Azure Cosmos DB — это полностью управляемая база данных NoSQL и реляционная база данных для современной разработки приложений. Дополнительные сведения о Cosmos DB и его поддержке API для нескольких различных отраслевых баз данных.
Хотя в этом руководстве указывается API при создании ресурса, привязки функций Azure для Cosmos DB настраиваются одинаково для всех API Cosmos DB.
В строке поиска в верхней части портала найдите Azure Cosmos DB и выберите результат.
На странице Azure Cosmos DB нажмите кнопку +Создать. Выберите Azure Cosmos DB для NoSQL из списка вариантов API.
На странице "Создание Cosmos DB" введите следующие значения:
msdocs-storage-function
, созданную ранее.msdocscosmosdb
.В нижней части выберите Просмотр и создание. Azure понадобиться некоторое время, чтобы проверить введенную информацию. После проверки параметров нажмите кнопку Создать и Azure начнет подготовку службы "Компьютерное зрение", что может занять некоторое время.
После завершения операции выберите Перейти к ресурсу.
Выберите Обозреватель данных и выберите новый контейнер.
Создайте базу данных и контейнер со следующими параметрами:
StorageTutorial
analysis
/type
Оставьте остальные параметры по умолчанию и нажмите кнопку "ОК".
Получите строка подключения для учетной записи службы Cosmos DB, используемой в нашем приложении-функции Azure.
На странице обзора Cosmos DB выберите "Ключи".
На странице "Ключи" скопируйте основную строку подключения, чтобы использовать ее позже.
Код функции Azure, используемой в этом руководстве, можно найти в этом репозитории GitHub в подкаталоге JavaScript-v4
. Вы также можете клонировать проект с помощью приведенной ниже команды.
git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/javascript-v4 \
code .
Пример проекта выполняет следующие задачи:
После скачивания и открытия проекта нужно уяснить несколько основных понятий.
Концепция | Цель |
---|---|
Функция | Функция Azure определяется как кодом функции, так и привязками. Они находятся в ./src/functions/process-blobs.js. |
Триггеры и привязки | Триггеры и привязки указывают на данные, которые ожидаются на входе или выходе функции, и на то, какая служба будет отправлять или получать эти данные. |
Триггеры и привязки, используемые в этом руководстве для ускорения процесса разработки, удаляя необходимость написания кода для подключения к службам.
Код, указывающий, что функция активируется при загрузке BLOB в контейнер изображений. Функция активируется для любого имени объекта BLOB, включая иерархические папки.
// ...preceding code removed for brevity
app.storageBlob('process-blob-image', {
path: 'images/{name}', // Storage container name: images, Blob name: {name}
connection: 'StorageConnection', // Storage account connection string
handler: async (blob, context) => {
// ... function code removed for brevity
path
: путь, который триггер отслеживает на предмет событий. Путь содержит имя контейнера images
и подстановочную переменную для имени большого двоичного объекта. Это имя BLOB извлекается из свойства name
.{name}
: имя загруженного большого двоичного объекта. Использование blob
означает имя параметра для большого двоичного объекта, передаваемого в функцию. Не меняйте значение blob
.connection
: строка подключения учетной записи хранения. Значение StorageConnection
совпадает с именем в файле при разработке на локальной машине.После завершения функции функция использует возвращаемый объект в качестве данных для вставки в Cosmos DB.
// ... function definition object
app.storageBlob('process-blob-image', {
// removed for brevity
// Data to insert into Cosmos DB
const id = uuidv4().toString();
const analysis = await analyzeImage(blobUrl);
// `type` is the partition key
const dataToInsertToDatabase = {
id,
type: 'image',
blobUrl,
blobSize: blob.length,
analysis,
trigger: context.triggerMetadata
}
return dataToInsertToDatabase;
}),
// Output binding for Cosmos DB
return: output.cosmosDB({
connection: 'CosmosDBConnection',
databaseName:'StorageTutorial',
containerName:'analysis'
})
});
Для контейнера в этой статье приведены следующие обязательные свойства:
id
: идентификатор, необходимый для Cosmos DB для создания новой строки.
/type
: ключ секции, указанный в контейнере, был создан.
output.cosmosDB — триггер вывода Cosmos DB используется для вставки результата функции в Cosmos DB.
connection
: строка подключения учетной записи хранения. Значение StorageConnection
соответствует имени в файле local.settings.json
.databaseName
: база данных Cosmos DB для подключения к ней.containerName
: имя таблицы, в которую записывается текстовое значение изображения, возвращаемое функцией. Таблица должна уже существовать.Ниже приведен полный код функции.
const { app, input, output } = require('@azure/functions');
const { v4: uuidv4 } = require('uuid');
const { ApiKeyCredentials } = require('@azure/ms-rest-js');
const { ComputerVisionClient } = require('@azure/cognitiveservices-computervision');
const sleep = require('util').promisify(setTimeout);
const STATUS_SUCCEEDED = "succeeded";
const STATUS_FAILED = "failed"
const imageExtensions = ["jpg", "jpeg", "png", "bmp", "gif", "tiff"];
async function analyzeImage(url) {
try {
const computerVision_ResourceKey = process.env.ComputerVisionKey;
const computerVision_Endpoint = process.env.ComputerVisionEndPoint;
const computerVisionClient = new ComputerVisionClient(
new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': computerVision_ResourceKey } }), computerVision_Endpoint);
const contents = await computerVisionClient.analyzeImage(url, {
visualFeatures: ['ImageType', 'Categories', 'Tags', 'Description', 'Objects', 'Adult', 'Faces']
});
return contents;
} catch (err) {
console.log(err);
}
}
app.storageBlob('process-blob-image', {
path: 'images/{name}',
connection: 'StorageConnection',
handler: async (blob, context) => {
context.log(`Storage blob 'process-blob-image' url:${context.triggerMetadata.uri}, size:${blob.length} bytes`);
const blobUrl = context.triggerMetadata.uri;
const extension = blobUrl.split('.').pop();
if(!blobUrl) {
// url is empty
return;
} else if (!extension || !imageExtensions.includes(extension.toLowerCase())){
// not processing file because it isn't a valid and accepted image extension
return;
} else {
//url is image
const id = uuidv4().toString();
const analysis = await analyzeImage(blobUrl);
// `type` is the partition key
const dataToInsertToDatabase = {
id,
type: 'image',
blobUrl,
blobSize: blob.length,
...analysis,
trigger: context.triggerMetadata
}
return dataToInsertToDatabase;
}
},
return: output.cosmosDB({
connection: 'CosmosDBConnection',
databaseName:'StorageTutorial',
containerName:'analysis'
})
});
Этот код также извлекает важные значения конфигурации из переменных среды, таких как строка подключения Хранилища блобов и ключ компьютерного зрения. Эти переменные среды добавляются в среду функций Azure после ее развертывания.
Функция по умолчанию также использует второй метод AnalyzeImage
. Этот код использует конечную точку URL и ключ учетной записи компьютерного зрения, чтобы отправить запрос в службу компьютерного зрения для обработки изображения. Запрос возвращает весь текст, обнаруженный на изображении. Этот текст записывается в Cosmos DB с помощью исходящей привязки.
Чтобы запустить проект локально, укажите переменные среды в файле ./local.settings.json
. Замените заполнители сохранёнными ранее значениями при создании ресурсов Azure.
Хотя код функции Azure выполняется локально, он подключается к облачным службам хранилища, а не использует локальные эмуляторы.
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "node",
"AzureWebJobsStorage": "",
"StorageConnection": "STORAGE-CONNECTION-STRING",
"StorageAccountName": "STORAGE-ACCOUNT-NAME",
"StorageContainerName": "STORAGE-CONTAINER-NAME",
"ComputerVisionKey": "COMPUTER-VISION-KEY",
"ComputerVisionEndPoint": "COMPUTER-VISION-ENDPOINT",
"CosmosDBConnection": "COSMOS-DB-CONNECTION-STRING"
}
}
Теперь вы готовы развернуть приложение в Azure с помощью расширения Visual Studio Code.
В Visual Studio Code нажмите клавиши SHIFT + ALT + A, чтобы открыть Azure Explorer.
В разделе Функции найдите и щелкните подписку правой кнопкой мыши и выберите Создать приложение-функцию в Azure (дополнительно).
Чтобы создать ресурс функции, используйте таблицу ниже.
Настройка | Значение |
---|---|
Имя | Введите msdocsprocessimage или что-то подобное. |
Стек среды выполнения | Выберите версию Node.js LTS. |
Модель программирования | Выберите версию 4. |
ОС | Щелкните Linux. |
Группа ресурсов | Выберите группу ресурсов msdocs-storage-function , созданную ранее. |
Местонахождение | Выберите тот же регион, что указан для группы ресурсов. |
Тип плана | Выберите Потребление. |
Хранилище Azure | Выберите учетную запись хранения, созданную ранее. |
Application Insights | пока пропустить. |
Azure начнет подготовку запрошенных ресурсов, что займет несколько минут.
Если вы выбрали Параметры отправки в уведомлении, пропустите этот раздел.
Функция Azure успешно развернута, но она пока не может подключиться к учетной записи хранения и службам "Компьютерное зрение". Правильные ключи и строки подключения необходимо сначала добавить в параметры конфигурации приложения Функций Azure.
Найдите свой ресурс в разделе Функции Azure Explorer, щелкните правой кнопкой мыши пункт Параметры приложения и выберите Добавить новый параметр.
Введите новый параметр приложения для указанных ниже секретов. Скопируйте и вставьте значения секретов из локального проекта в файле local.settings.json
.
Настройка |
---|
StorageConnection |
Имя_учетной_записи_хранения |
ИмяКонтейнераХранилища |
ComputerVisionKey |
ComputerVisionEndPoint |
CosmosDBConnection |
Все необходимые переменные среды для подключения функции Azure к разным службам теперь внесены.
Теперь вы готовы протестировать приложение. Вы можете загрузить blob в контейнер и затем убедиться, что текст из изображения сохранен в Cosmos DB.
images
, а затем выберите Загрузить файлы./
.Затем можно убедиться, что отправка активировала функцию Azure, а текст в изображении был проанализирован и сохранен в Cosmos DB должным образом.
В Visual Studio Code, в Azure Explorer, в узле Azure Cosmos DB выберите ваш ресурс и разверните его, чтобы найти вашу базу данных StorageTutorial.
Разверните узел базы данных.
Теперь должен быть доступен контейнер анализа . Выберите узел "Документы" контейнера, чтобы просмотреть данные внутри. Вы увидите запись для обработанного текста изображения из отправленного файла.
{
"id": "3cf7d6f0-a362-421e-9482-3020d7d1e689",
"type": "image",
"blobUrl": "https://msdocsstoragefunction.blob.core.windows.net/images/presentation.png",
"blobSize": 1383614,
"analysis": { ... details removed for brevity ...
"categories": [],
"adult": {},
"imageType": {},
"tags": [],
"description": {},
"faces": [],
"objects": [],
"requestId": "eead3d60-9905-499c-99c5-23d084d9cac2",
"metadata": {},
"modelVersion": "2021-05-01"
},
"trigger": {
"blobTrigger": "images/presentation.png",
"uri": "https://msdocsstorageaccount.blob.core.windows.net/images/presentation.png",
"properties": {
"lastModified": "2023-07-07T15:32:38+00:00",
"createdOn": "2023-07-07T15:32:38+00:00",
"metadata": {},
... removed for brevity ...
"contentLength": 1383614,
"contentType": "image/png",
"accessTier": "Hot",
"accessTierInferred": true,
},
"metadata": {},
"name": "presentation.png"
},
"_rid": "YN1FAKcZojEFAAAAAAAAAA==",
"_self": "dbs/YN1FAA==/colls/YN1FAKcZojE=/docs/YN1FAKcZojEFAAAAAAAAAA==/",
"_etag": "\"7d00f2d3-0000-0700-0000-64a830210000\"",
"_attachments": "attachments/",
"_ts": 1688743969
}
Поздравляем! Вам удалось обработать изображение, загруженное в хранилище объектов Blob, с помощью функций Azure и технологии компьютерного зрения.
Используйте следующую таблицу, чтобы устранить неполадки во время этой процедуры.
Проблема | Решение |
---|---|
Ошибки await computerVisionClient.read(url); с Only absolute URLs are supported |
Убедитесь, что конечная точка ComputerVisionEndPoint имеет формат https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com/ . |
Это решение, являясь вводным руководством, не демонстрирует методики, которые безопасны по умолчанию. Это намеренно позволяет успешно развертывать решение. Следующий шаг после успешного развертывания — обеспечить безопасность ресурсов. В этом решении используются три службы Azure, каждая из которых имеет собственные функции безопасности и рекомендации по настройке по умолчанию:
Если вы не собираетесь продолжать использовать это приложение, вы можете удалить созданные вами ресурсы, удалив группу ресурсов.
msdocs-storage-function
.События
Присоединение к вызову ИИ Навыков
8 апр., 15 - 28 мая, 07
Отточите свои навыки ИИ и введите подметки, чтобы выиграть бесплатный экзамен сертификации
Зарегистрируйтесь!