65.9K
CodeProject 正在变化。 阅读更多。
Home

读取销售收据并提取详细信息(使用预构建 ML 模型 - Azure Cognitive Services)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2021年7月9日

CPOL

3分钟阅读

viewsIcon

6239

从销售收据中提取信息的几种方法,以及如何使用预构建 ML 模型进行详细演示。

引言

现在,几乎所有事物都在转向在线和虚拟模式,任何组织都面临着一个非常常见的问题,即处理为了报销目的而电子扫描和提交的收据。

现在,为了让任何索赔或报销获得批准,首先这些收据必须到达基于组织和部门的适当会计部门,而执行此活动的一种方法是通过人工干预。必须有人或团队手动处理所有这些数字扫描的收据,并根据部门或他们可能拥有的任何其他验证和资格标准对其进行过滤。

当此类扫描收据的数量过高时,情况会变得更加糟糕。 因此,为了摆脱这种手动工作,许多组织已经选择了基于人工智能的解决方案,并且很多组织正在这样做。

当然,可以使用 OCR(Optical Character Recognization,光学字符识别)技术来提取数据,但问题不仅仅在于数据提取,还在于数据解释。 因为可能会发生这样的情况:用户上传了完全错误的文件,而不是收据。 因此,解决方案应该足够强大,可以过滤掉这些情况。

如何实现基于人工智能的解决方案?

与许多其他 Azure 服务一样,在这里我们也可以使用一项名为 Form Recognizer(表单识别器)的服务,该服务包含智能处理功能,并允许我们自动处理表单和收据。 基本上,它是 OCR 和预测模型的组合,进而属于 Azure 认知服务的范畴。

在这里,OCR 将用于文本提取,而模型将帮助我们过滤有用的信息,例如发票日期、地址、金额、描述、名称,或者可能是业务需要的任何其他相关字段。

表单识别器支持哪些模型?

表单识别器支持两种类型的模型:预构建模型和自定义模型。

  • 预构建模型 – 开箱即用,并且已经根据美国销售格式的一些基本销售数据进行了训练
  • 自定义模型 – 可以根据我们自己的数据和业务需求量身定制

因此,在本文中,我将重点介绍预构建的模型,并将自定义模型集成作为另一篇文章的一部分进行介绍。

如何开始使用表单识别器?

我们需要做的第一件事是登录到 portal.azure.com 上的 Azure 门户以创建 Azure 资源。 有两种创建 Azure 资源的方法

  • 使用 Azure 表单识别器
  • 使用 Azure 认知服务

如果有人计划使用认知服务下的其他服务,则可以使用现有/新资源。 但是,如果只需要使用表单识别器服务,也可以像下面这样操作

选择表单识别器后,需要在下面的表单中提供所有基本详细信息

单击 Review + Create(查看 + 创建),它将创建一个具有密钥和终结点的 Azure 资源。

Using the Code

对于开发,我使用 Python 作为一种语言,以及具有 Jupyter Notebook 的 Visual Studio Code。 这是核心实现

key = "KEY_TO_BE_REPLACED" 
endPoint = "ENDPOINT_TO_BE_REPLACED" 

import os
from azure.ai.formrecognizer import FormRecognizerClient 
from azure.core.credentials import AzureKeyCredential 

client = FormRecognizerClient(endpoint = endPoint, credential = AzureKeyCredential(key))
image = "IMAGE_FILE_PATH" fd = open(image, "rb") 
analyzeReceipt = client.begin_recognize_receipts(receipt = fd) 
result = analyzeReceipt.result() 

print('Address: ', result[0].fields.get("MerchantAddress").value) 
print('Contact Number: ', result[0].fields.get("MerchantPhoneNumber").value) 
print('Receipt Date: ', str(result[0].fields.get("TransactionDate").value)) 
print('Tax Paid: ', result[0].fields.get("Tax").value) 
print('Total Amount Paid: ', result[0].fields.get("Total").value) 

items = result[0].fields.items() 
for name, field in items: if name=="Items":
  for items in field.value:
    for item_name, item in items.value.items():
      print(item_name, ': ', item.value)

示例输入和输出

我使用了下面的收据作为输入

生成的输出如下

摘要

本文提到了如何使用预构建的机器学习模型从销售收据中读取信息的高级步骤,并假设读者已经知道如何使用 Python、VS Code、Jupyter Notebook 以及如何导入 Python 模块。 但是,如果您对这些都不熟悉,我建议您观看此实现的视频 here

历史

  • 2021 年 7 月 9 日:初始版本
© . All rights reserved.