使用 AI 驱动的 Azure Form Recognizer 创建和训练自定义 ML 模型以读取销售收据





3.00/5 (1投票)
本文将引导您完成创建自定义 ML 模型、训练模型并使用该模型分析销售收据所需的步骤。
引言
在上一篇文章中,我们看到了如何利用预构建模型从销售收据中读取数据。在本文中,我们将学习如何创建自己的 ML 模型,对其进行训练,然后从销售收据中提取信息。这里的自定义模型是指完全根据特定需求或用例量身定制的模型。
涉及的步骤
要执行此端到端工作流程,需要经过 4 个主要步骤。
第一步 - 创建训练数据集
要训练模型,我们至少需要 5 个相同类型的文档,这意味着如果我们计划分析收据,那么至少需要 5 个销售收据样本。如果我们计划从名片中提取数据,那么至少需要 5 张名片样本,依此类推,这些文档可以是打印的或手写的。
第二步 - 上传训练数据集
收集好训练文档后,我们需要将其上传到 Azure 存储。要执行此步骤,您应该已经在 Azure 门户上创建了一个 **存储帐户**,并且可以通过以下步骤将图像上传到容器中:
上面的截图将指导您如何创建一个名为 `receipts` 的容器。成功创建容器后,可以通过单击下面的“**上传**”按钮将文档上传到新创建的容器中:
下面的截图显示了上传到容器的五个图像。
收集完训练数据后,我们需要决定是采用监督学习还是无监督学习。对于监督学习,我们必须标记我们的训练数据,这意味着除了样本训练数据之外,我们还需要其他文件来保存有关 **OCR** 和 **标签** 的信息。
第三步 - 运行 OCR 并标记训练数据集
用于数据标记和训练,我使用的是 **Form Recognizer 示例标记工具**,该工具在线上 FOTT 网站上提供。
打开网页后,需要点击屏幕中央的 **新建项目** 按钮,将打开一个新页面,如下所示:
添加新连接
点击“**添加连接**”按钮将打开一个新页面,我们需要在此提供 **SAS URI**。要获取 **SAS URI**,我们需要打开相同的 Azure 存储资源并生成 **SAS**,如下所示:
获取 Form Recognizer 服务 URI 和密钥
要获取 URI 和密钥,我们需要打开 **Azure Form Recognizer** 资源并复制所需的字段,如下所示:
成功保存项目后,您会注意到所有 blob 对象都已加载到左侧,如下所示:
运行 OCR
接下来,我们需要为所有 5 个文档运行 OCR。执行此操作后,将用黄色矩形标记识别出的文本区域,并将相应的坐标保存在一个名称以 `.ocr.JSON` 结尾的新文件中。如果需要,可以更改和更正这些标记。完成此过程后,您会注意到容器已更新为新文件,如下所示:
构建标签列表
在运行 **OCR** 后,接下来我们需要构建标签列表,可以通过单击右侧的按钮完成,如下所示:
这将允许我们添加所有必需的标签,如下所示:
标记数据集
在标记方面,我们需要为所有训练文档执行此操作。为此,请选择收据上的文本,然后单击右侧的相应标签。执行此操作后,将为相应的标签添加值。完成后,看起来会是这样:
在继续之前,我们需要验证是否已为所有文档完成标记,可以通过查看我们的容器来完成。如果一切顺利,您会注意到已添加以 **labels.json** 结尾的新文件,如下所示:
第四步 - 训练模型
要训练模型,我们需要单击左侧显示的 **训练** 按钮,如下所示:
训练过程完成后,将显示完整的摘要,如下所示:
在右下角,您可以看到 **平均准确率**,它显示了模型在给定训练集上的表现。如果此数字不令人满意,我们可以向训练数据集中添加更多文档并重新访问标记步骤。
第五步 - 测试模型
这是非常重要的一步,我们需要测试我们的模型并查看它在测试数据上的表现。在此步骤中,我们需要编写几行 Python 代码,这些代码将使用我们的训练数据集和模型 ID 来执行此测试。这是 Python 代码:
import json
import time
from requests import get, post
endpoint = "FORMRECOGNIZER_ENDPOINT"
key = "FORMRECOGNIZER_KEY"
model_id = "MODEL_ID"
post_at = endpoint + "/formrecognizer/v2.0/custom/models/%s/analyze" % model_id
input_image = "IMAGE_TO_TEST"
headers = {
'Content-Type': 'image/jpeg',
'Ocp-Apim-Subscription-Key': key,
}
f = open(input_image, "rb")
try:
response = post(url = post_at, data = f.read(), headers = headers)
if response.status_code == 202:
print("POST operation successful")
else:
print("POST operation failed:\n%s" % json.dumps(response.json()))
quit()
get_url = response.headers["operation-location"]
except Exception as ex:
print("Exception details:%s" % str(ex))
quit()
response = get(url = get_url, headers = {"Ocp-Apim-Subscription-Key": key})
json_response = response.json()
if response.status_code != 200:
print("GET operation failed:\n%s" % json.dumps(json_response))
quit()
status = json_response["status"]
if status == "succeeded":
print("Operation successful: %s" % json.dumps(json_response))
quit()
if status == "failed":
print("Analysis failed:\n%s" % json.dumps(json_response))
执行上述代码后,您将看到带有置信度的 JSON 输出。
摘要
在本文中,我们已经看到了如何使用自定义 ML 模型分析销售收据。要查看本文的完整演示,您可以参阅我的视频,点击此处。
历史
- 2021 年 7 月 14 日:初始版本