示例:创建表单识别器自定义技能 (存档)
此示例已存档,不受支持。 其中介绍了如何使用 C# 和 Visual Studio 创建表单识别器自定义技能。
先决条件
- Visual Studio (任何版本) 。
- 至少 5 种相同类型的窗体。 你可以使用本指南中提供的示例数据。
创建表单识别器资源
请参阅创建表单识别器资源
训练模型
使用此技能之前,需要使用输入窗体训练表单识别器模型。 使用表单识别器模型介绍了如何训练模型。 可以使用示例数据或提供自己的数据。
模型训练完成后,将其 ID 值复制到安全位置。
设置自定义技能
本教程使用 Azure Search Power Skills GitHub 存储库中的 AnalyzeForm 项目。 将此存储库克隆到本地计算机,并导航到 Vision/AnalyzeForm/ 以访问该项目。 然后在 Visual Studio 中打开 AnalyzeForm.csproj。 此项目将创建一个 Azure 函数资源,用于满足自定义技能接口,并可用于 Azure 认知搜索扩充。 它采用窗体文档作为输入,并以文本形式输出指定的键/值对。
首先,添加项目级环境变量。 在左侧窗格中找到“AnalyzeForm”项目,右键单击该项目,然后选择“属性”。 在 “属性” 窗口中,选择“ 调试 ”选项卡,然后找到“ 环境变量” 字段。 选择“ 添加” 以添加以下变量:
-
FORMS_RECOGNIZER_ENDPOINT_URL
值设置为终结点 URL。 -
FORMS_RECOGNIZER_API_KEY
值设置为你的订阅密钥。 -
FORMS_RECOGNIZER_MODEL_ID
值设置为你训练的模型的 ID。 -
FORMS_RECOGNIZER_RETRY_DELAY
值设置为 1000。 此值是程序重试查询前等待的时间(以毫秒为单位)。 -
FORMS_RECOGNIZER_MAX_ATTEMPTS
值设置为 100。 此值是程序在尝试获取成功响应时将查询服务的次数。
接下来,打开 AnalyzeForm.cs 并找到 fieldMappings
变量,该变量引用“field-mappings.json”文件。 此文件(和引用它的变量)定义要从窗体中提取的键的列表,以及每个键的自定义标签。 例如,如果值为 { "Address:", "address" }, { "Invoice For:", "recipient" }
则表示脚本将仅保存检测到的 Address:
和 Invoice For:
字段的值,并且将分别将这些值标记为 "address"
和 "recipient"
。
最后,请记下 contentType
变量。 此脚本在 URL 引用的远程文档上运行给定的表单识别器模型,因此内容类型为 application/json
。 如果要通过在 HTTP 请求中包含字节流来分析本地文件,则需要将更改 contentType
为文件的相应 MIME 类型。
从 Visual Studio 中测试函数
编辑项目后,将其保存,并在 Visual Studio 中将“AnalyzeForm”项目设置为启动项目(如果尚未设置该项目)。 然后按“F5”在本地环境中运行该函数。 使用 REST 服务(如 Postman)调用函数。
HTTP 请求
你将发出以下请求来调用函数。
POST http://localhost:7071/api/analyze-form
请求正文
从请求正文模板开始
{
"values": [
{
"recordId": "record1",
"data": {
"formUrl": "<your-form-url>",
"formSasToken": "<your-sas-token>"
}
}
]
}
在这里,你将需要提供与你训练的窗体具有相同类型的窗体的 URL。 出于测试目的,可以使用你的一种训练窗体。 如果遵循了 cURL 快速入门,则窗体将位于 Azure Blob 存储帐户中。 打开 Azure 存储资源管理器,找到一个窗体文件,右键单击该文件,然后选择“获取共享访问签名”。 下一个对话框窗口将提供 URL 和 SAS 令牌。 将这些字符串分别输入请求正文的 "formUrl"
和 "formSasToken"
字段。
如果要分析不在 Azure Blob 存储中的远程文档,请在 "formUrl"
字段中粘贴其 URL,并将 "formSasToken"
字段留空。
注意
在技能组中集成了技能后,认知搜索将提供 URL 和令牌。
响应
你应该看到类似于以下示例的响应:
{
"values": [
{
"recordId": "record1",
"data": {
"address": "1111 8th st. Bellevue, WA 99501 ",
"recipient": "Southridge Video 1060 Main St. Atlanta, GA 65024 "
},
"errors": null,
"warnings": null
}
]
}
将函数发布到 Azure
当你对函数行为满意时,可将其发布。
- 在 Visual Studio 的“解决方案资源管理器”中,右键单击该项目并选择“发布”。 选择“新建”>“发布” 。
- 如果尚未将 Visual Studio 连接到 Azure 帐户,请选择“添加帐户...”
- 请按照屏幕上的提示操作。 请为应用服务、Azure 订阅、资源组、托管计划以及要使用的存储帐户指定唯一名称。 如果还没有,可以创建新的资源组、托管计划和存储帐户。 完成后,请选择“创建”。
- 部署完成后,请记下站点 URL。 这是 Azure 中函数应用的 URL 地址。 将其保存到临时位置。
- 在Azure 门户中,导航到资源组,然后查找发布的
AnalyzeForm
函数。 在“管理”部分下,应可看到主机密钥。 复制“默认”主机密钥并将其保存到临时位置。
连接到管道
若要在认知搜索管道中使用此技能,需要向技能组合添加技能定义。 下面的 JSON 块是一个示例技能定义(应更新输入和输出,以反映特定方案和技能组合环境)。 将 AzureFunctionEndpointUrl
替换为函数 URL,并将 AzureFunctionDefaultHostKey
替换为主机密钥。
{
"description":"Skillset that invokes the Form Recognizer custom skill",
"skills":[
"[... your existing skills go here]",
{
"@odata.type":"#Microsoft.Skills.Custom.WebApiSkill",
"name":"formrecognizer",
"description":"Extracts fields from a form using a pre-trained form recognition model",
"uri":"[AzureFunctionEndpointUrl]/api/analyze-form?code=[AzureFunctionDefaultHostKey]",
"httpMethod":"POST",
"timeout":"PT30S",
"context":"/document",
"batchSize":1,
"inputs":[
{
"name":"formUrl",
"source":"/document/metadata_storage_path"
},
{
"name":"formSasToken",
"source":"/document/metadata_storage_sas_token"
}
],
"outputs":[
{
"name":"address",
"targetName":"address"
},
{
"name":"recipient",
"targetName":"recipient"
}
]
}
]
}