表单识别器的 v2 到 v3 转换

v2 to v3 Transition for Form Recognizer

因为FR v3.0还是Preview模式,所以我去了v2.1Quickstarts, "Analyze using a Prebuilt model", Navigate to the Form Recognizer Sample Tool。 使用 Form Type = "Invoice" 来测试许多大小和文本包括手写,对结果非常满意,尤其是 returned JSON 文件结构:

...
"analyzeResult":
  {
    ...
    readResults:[...],
    pageResults:[...]
    ...
  }

对于large/complex image/doc,在rowIndexcolumnIndex的基础上使用pageResults.tables[0].cells,我可以很容易地把每一行文本拼凑起来还原整个文档。对于 small/simple image/doc 或当 pageResults.tables.length==0 时,使用 readResults.lines 实现相同的 OCR 结果,如一刀切,完美!

接下来是我对相同图像的亲身实践,样本JavaScript。因为我一直只使用 Invoice,所以我选择了 recognizeInvoice.js,很好的示例,简单易懂。即使它是 v3 并且缺少 readResultspageResutls,我仍然能够使用 invoice.pages[0].tables[0].cells 为 large/complex image/doc 获得相同的结果。 small/simple 图片发现 2 个问题:

  1. invoice.pages[0].tables.length = 0,因此没有文本值。
  2. 只有文本值是 invoice.fields.VendorName.valueNRT LLC.,所有其他由 v2.1 编辑的印刷文本和手写 return 都消失了!

我相信微软方面对上述变化一定有一些原因,对我们来说这意味着 v3 不向后兼容。更重要的是,在提交之前,我们无法知道图像是否适合模型 and/or 将 return 某些东西,即使我们提供了模型选择列表,用户也可能会因额外的手动工作而感到沮丧。目前我们所能做的就是切换回 Google。所以,

下面是我的导航路线。谢谢您,非常感谢您的出色工作!

有点混乱,但是 NPM 上 @azure/ai-form-recognizer 包的版本比表单识别器 API 版本早一个主要版本。预览 API 版本“2021-09-30-preview”(REST API “v3”)可以与表单识别器 SDK 版本 4.0.0-beta.2. REST API 版本 v2.1 (GA) 与 SDK 版本 3.2.0 一起使用。在 README for @azure/ai-form-recognizer 3.2.0 上,它解释了这一点:

Note: This package targets Azure Form Recognizer service API version 2.x.

根据您所说的,我猜测您使用的是最新的 stable SDK 版本 3.2.0。在此版本中使用预构建或自定义模型提取数据时,tables 附加到 pagespages 附加到表单,因此您可以通过查看访问 table通过表格:

const poller = await client.beginRecognizeInvoices(inputs);
const invoices = await poller.pollUntilDone();

const table = invoices[0].pages[0].tables[0];

如果 table 出现在未与任何表单相关联的页面上(该页面上未出现任何表单),则无法使用此方法访问它。该功能存在于新预览的新 beta SDK 中 API,但在当前 SDK 中要获取所有页面(无论它们是否包含表单),您可以考虑使用 beginRecognizeContent方法。