表单识别器的 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,在rowIndex
和columnIndex
的基础上使用pageResults.tables[0].cells
,我可以很容易地把每一行文本拼凑起来还原整个文档。对于 small/simple image/doc 或当 pageResults.tables.length==0
时,使用 readResults.lines
实现相同的 OCR 结果,如一刀切,完美!
接下来是我对相同图像的亲身实践,样本,JavaScript。因为我一直只使用 Invoice,所以我选择了 recognizeInvoice.js,很好的示例,简单易懂。即使它是 v3 并且缺少 readResults
和 pageResutls
,我仍然能够使用 invoice.pages[0].tables[0].cells
为 large/complex image/doc 获得相同的结果。 small/simple 图片发现 2 个问题:
invoice.pages[0].tables.length = 0
,因此没有文本值。
- 只有文本值是
invoice.fields.VendorName.value
的 NRT LLC.
,所有其他由 v2.1 编辑的印刷文本和手写 return 都消失了!
我相信微软方面对上述变化一定有一些原因,对我们来说这意味着 v3 不向后兼容。更重要的是,在提交之前,我们无法知道图像是否适合模型 and/or 将 return 某些东西,即使我们提供了模型选择列表,用户也可能会因额外的手动工作而感到沮丧。目前我们所能做的就是切换回 Google。所以,
- v2.x 示例代码在哪里,MS 何时停止 v2.x?
- v2.x 如何过渡到 v3?
下面是我的导航路线。谢谢您,非常感谢您的出色工作!
有点混乱,但是 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
附加到 pages
,pages
附加到表单,因此您可以通过查看访问 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
方法。
因为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,在rowIndex
和columnIndex
的基础上使用pageResults.tables[0].cells
,我可以很容易地把每一行文本拼凑起来还原整个文档。对于 small/simple image/doc 或当 pageResults.tables.length==0
时,使用 readResults.lines
实现相同的 OCR 结果,如一刀切,完美!
接下来是我对相同图像的亲身实践,样本,JavaScript。因为我一直只使用 Invoice,所以我选择了 recognizeInvoice.js,很好的示例,简单易懂。即使它是 v3 并且缺少 readResults
和 pageResutls
,我仍然能够使用 invoice.pages[0].tables[0].cells
为 large/complex image/doc 获得相同的结果。 small/simple 图片发现 2 个问题:
invoice.pages[0].tables.length = 0
,因此没有文本值。- 只有文本值是
invoice.fields.VendorName.value
的NRT LLC.
,所有其他由 v2.1 编辑的印刷文本和手写 return 都消失了!
我相信微软方面对上述变化一定有一些原因,对我们来说这意味着 v3 不向后兼容。更重要的是,在提交之前,我们无法知道图像是否适合模型 and/or 将 return 某些东西,即使我们提供了模型选择列表,用户也可能会因额外的手动工作而感到沮丧。目前我们所能做的就是切换回 Google。所以,
- v2.x 示例代码在哪里,MS 何时停止 v2.x?
- v2.x 如何过渡到 v3?
下面是我的导航路线。谢谢您,非常感谢您的出色工作!
有点混乱,但是 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
附加到 pages
,pages
附加到表单,因此您可以通过查看访问 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
方法。