Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本教程介绍如何将图像上传到 Azure Blob 存储,并使用 Azure Functions 和计算机视觉对其进行处理。 此外,还了解如何在此过程过程中实现 Azure 函数触发器和绑定。 这些服务将一起分析包含文本的上传图像,从中提取文本,然后将文本存储在数据库行中,供以后分析或用于其他用途。
Azure Blob 存储是 Azure 针对云提供的可大规模缩放的对象存储解决方案。 Blob 存储设计用于存储图像和文档、流式处理媒体文件、管理备份和存档数据等等。 有关 Blob 存储的详细信息,请阅读概述页面。
Azure Functions 是一种无服务器计算机解决方案,允许你编写和运行小块代码作为高度可缩放、无服务器、事件驱动的函数。 有关 Azure Functions 的详细信息,请阅读概述页面。
本教程中,您将学习如何:
- 将图像和文件上传到 Blob 存储
- 使用 Azure Function 事件触发器处理上传到 Blob 存储的数据
- 使用 Foundry 工具分析图像
- 使用 Azure Functions 输出绑定将数据写入表格存储
先决条件
- 具有活动订阅的 Azure 帐户。 创建试用帐户。
- Visual Studio 2022
创建存储帐户和容器
第一步是创建存储帐户来保存上传的 Blob 数据,在此方案中是包含文本的图像。 存储帐户提供多种不同的服务,但本教程使用 Blob 存储和表存储。
登录到 Azure 门户。
在门户顶部的搜索栏中,搜索“存储”并选择标有“存储帐户”的结果。
在“存储帐户”页面上,选择左上角的“+ 创建”。
在“创建存储帐户”页面上,输入以下值:
- 订阅:选择所需的订阅。
- 资源组:选择“新建”并输入名称 ,然后选择“确定”。
-
存储帐户名称:输入值
msdocsstoragefunction。 存储帐户名称在 Azure 中必须是唯一的,因此可能需要在名称后添加数字,例如msdocsstoragefunction123。 - 区域:选择离你最近的区域。
- 性能:选择“标准”。
- 冗余:保持选中默认值。
在底部选择 “查看 + 创建 ”,Azure 会验证输入的信息。 验证设置后,选择“ 创建 ”,Azure 将开始预配存储帐户,这可能需要一段时间。
创建容器
预配存储帐户后,选择“转到资源”。 下一步是在帐户内创建一个存储容器来保存要进行分析的上传图像。
在导航面板上,选择“容器”。
在“容器”页面上,选择顶部的“+ 容器”。 在侧边栏中,输入“imageanalysis”作为名称,并确保将“公共访问级别”设置为“Blob(仅限 blob 的匿名读取访问)”。 然后选择“创建”。
你应该会看到新容器出现在容器列表中。
检索连接字符串
最后一步是检索存储帐户的连接字符串。
在左侧导航面板上,选择“访问密钥”。
在“访问密钥”页面上,选择“显示密钥”。 复制 key1 部分下的连接字符串值,并将密钥粘贴到某个位置供以后使用。 记下存储帐户名称
msdocsstoragefunction,供以后使用。
当我们需要将 Azure Function 连接到此存储帐户时,需要用到这些值。
创建计算机视觉服务
接下来,创建处理已上传文件的计算机视觉服务帐户。 Computer Vision是 Foundry 工具的一部分,提供用于从图像中提取数据的各种功能。 有关计算机视觉的详细信息,请阅读概述页面。
在门户顶部的搜索栏中,搜索“计算机”并选择标有“计算机视觉”的结果。
在“计算机视觉”页面上,选择“+ 创建”。
在“创建计算机视觉”页面上,输入以下值:
- 订阅:选择所需的订阅。
-
资源组:使用之前创建的
msdocs-storage-function资源组。 - 区域:选择离你最近的区域。
-
名称:输入名称
msdocscomputervision。 - 定价层:如果可用,请选择“免费”,否则选择“标准 S1”。
- 选中“负责任的 AI 声明”框(如果同意这些条款)
选择底部的“查看 + 创建”。 Azure 需要一点时间验证输入的信息。 验证设置后,选择“ 创建 ”,Azure 将开始预配计算机视觉服务,这可能需要一些时间。
作完成后,选择“ 转到资源”。
检索密钥
接下来,我们需要找到计算机视觉服务的密钥和终结点 URL,以在 Azure Function App 中使用。
在“计算机视觉”概述页面上,选择“密钥和终结点”。
在“密钥和终结点”页面上,复制“密钥 1”值和“终结点”值,并将它们粘贴到某处供稍后使用。
下载并配置示例项目
本教程中使用的 Azure Function 的代码可在此 GitHub 存储库中找到。 还可以使用以下命令克隆项目:
git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet
示例项目代码将完成以下任务:
- 检索环境变量以连接到存储帐户和计算机视觉服务
- 接受上传的文件作为 blob 参数
- 使用计算机视觉服务分析 blob 数据块
- 使用输出绑定将分析后的图像文本发送到新表行
下载并打开项目后,您需要了解以下在主方法 Run 中的一些基本概念。 Azure Function 使用触发器和输出绑定,这些绑定通过 Run 方法签名上的属性来应用。
Table 属性使用两个参数。 第一个参数指定要写入函数返回的已分析图像文本值的表的名称。 第二个 Connection 参数从环境变量中请求表存储连接字符串,以便 Azure Function 可以访问它。
属性 BlobTrigger 用于将我们的函数绑定到 Blob 存储中的上传事件,并将上传的 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.chinacloudapi.cn/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 Function 环境后,将这些环境变量添加到其中。
该函数还利用名为 ProcessImageAnalyzeImage 的第二种方法。 此代码使用计算机视觉帐户的 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 Functions
现在可以使用 Visual Studio 将应用程序部署到 Azure。 在部署过程中,还可以同时在 Azure 中创建 Azure Functions 应用。
首先,右键单击 ProcessImage 项目节点并选择“发布”。
在“发布”对话框屏幕上,选择 Azure 并选择“下一步”。
在下一个屏幕上选择“Azure Function App (Windows)”或“Azure Function App (Linux)”,然后再次选择“下一步”。
在“Functions 实例”步骤中,请确保选择您希望部署的订阅。 接下来,选择对话框右侧的绿色 + 符号。
此时会打开一个新对话框。 为新的 Function App 输入以下值。
- 名称:输入 msdocsprocessimage 或类似名称。
- 订阅名称:选择你想使用的任何订阅。
-
资源组:使用之前创建的
msdocs-storage-function资源组。 - 计划类型:选择“消耗”。
- 位置:选择离你最近的区域。
- Azure 存储:选择之前创建的存储帐户。
填写所有这些值后,选择“ 创建”。 Visual Studio 和 Azure 将开始预配请求的资源,这需要一些时间才能完成。
进程完成后,选择“ 完成 ”关闭对话框工作流。
部署 Azure Function 的最后一步是选择屏幕右上角的“发布”。 发布函数可能也需要一些时间才能完成。 完成后,应用程序在 Azure 上运行。
连接服务
Azure Function 已成功部署,但它还无法连接到存储帐户和计算机视觉服务。 必须先将正确的密钥和连接字符串添加到 Azure Functions 应用的配置设置。
在 Azure 门户顶部,搜索“function”并从结果中选择“Function App”。
在“Function App”屏幕上,选择在 Visual Studio 中创建的 Function App。
在 函数应用 概述页上,选择左侧导航上的 “配置 ”以打开一个页面,我们可以在其中管理应用的各种类型的配置设置。 目前,我们对“应用程序设置”部分感兴趣。
下一步是为存储帐户名称和连接字符串、计算机视觉密钥和计算机视觉终结点添加设置。
在“应用程序设置”选项卡上,选择“+ 新建应用程序设置”。 在出现的浮出控件中,输入以下值:
- 名称:输入值 ComputerVisionKey。
- 值:粘贴之前保存的计算机视觉密钥。
选择 “确定 ”,将此设置添加到应用。
接下来,让我们使用以下值对计算机视觉服务的终结点重复此过程:
- 名称:输入值“ComputerVisionEndpoint”。
- 值:粘贴先前保存的端点 URL。
使用以下值对存储帐户连接再次重复此步骤:
- 名称:输入值 StorageConnection。
- 值:粘贴之前保存的连接字符串。
最后,使用以下值对存储帐户名称再次重复此过程:
- 名称:输入一个值为 StorageAccountName。
- 值:输入创建的存储帐户的名称。
添加这些应用程序设置后,请确保在配置页面顶部选择“ 保存 ”。 保存完成后,还可以点击“刷新”以确保设置已生效。
将 Azure Function 连接到不同服务所需的所有环境变量现已到位。
将图像上传到 Blob 存储
现在可以测试应用程序了! 你可以将 blob 上传到容器,然后验证图像中的文本是否已保存到表存储。
首先,在 Azure 门户顶部,搜索“存储”并选择“存储帐户”。 在“存储帐户”页面上,选择之前创建的帐户。
接下来,选择左侧导航栏中的“容器”,然后导航到之前创建的 ImageAnalysis 容器。 在此处,可以直接在浏览器中上传测试图像。
你可以在可下载示例项目的根目录的 images 文件夹中找到一些示例图像,也可以使用自己的图像。
在 ImageAnalysis 页面顶部,选择“上传”。 在打开的浮出控件中,选择文件夹图标以打开文件浏览器。 选择要上传的图片,然后选择“上传”。
该文件应出现在 blob 容器中。 接下来,可以验证上传是否触发了 Azure Function,以及图像中的文本是否已正确分析并保存到表存储中。
使用页面顶部的痕迹导航,在存储帐户中向上导航一级。 在左侧导航中找到并选择存储浏览器,然后选择表。
ImageText 表应该现在可用。 在表格中选择以预览表内的数据行。 你应该会看到上传的已处理图像文本的相应条目。 可以使用时间戳或通过查看“文本”列的内容来验证这一点。
恭喜! 你已成功使用 Azure Functions 和计算机视觉处理上传到 Blob 存储的图像。
清理资源
如果不打算继续使用此应用程序,可以通过删除资源组来删除创建的资源。
- 从主导航栏中选择“资源组”
- 从列表中选择
msdocs-storage-function资源组。 - 选择资源组概述页面顶部的“删除资源组”按钮。
- 在确认对话框中输入资源组名称 msdocs-storage-function。
- 选择“删除”。 删除资源组的过程可能需要几分钟才能完成。