【译】手稿上的光学字符识别

原作:乔纳森·阿尔诺

时间:2023 年 12 月 11 日

 

在本文中,我们将解释如何解决手写人口普查的 OCR 问题,以及我们从这次实验中吸取的教训。本文将追踪我们测试的库和在线服务,以及我们如何应用鲁昂大学的科学出版物来进行历史文献分析。

为历史文档建立索引

光学字符识别 (OCR) 是一项成熟的技术,用途广泛,从文档分析到使用 Google Lens 的“扫描和翻译”功能进行实时翻译。 云平台甚至提供检测管理文档布局并从中提取结构化文本的服务。

然而,一些 OCR 任务仍然充满挑战。 例如,使用 OCR 来索引历史文档目前并不能产生足够好的结果。 这是因为档案是手写的,部分扫描件对比度较差,而且很多条目不符合文档结构,如下图所示。

Source: POPP Dataset 来源:POPP 数据集

为了执行文档分析和文本识别,我们客户当前的解决方案依赖于人类从扫描中读取和提取文本。 但这种方法速度相当慢(可能需要数月至数年才能获得结果)、容易出错且成本高昂。

我们的客户希望探索人工智能(特别是 OCR)方面的新进展,以实现部分流程的自动化并减少从文档中获取结构化数据的时间。 他们主要需要从民事登记扫描中提取名字和姓氏。

试用OCR开源库

我们测试的第一个开源库是 Tesseract,因为它在 OCR 领域很有名,并且有深度学习的支持。虽然 Tesseract 对于黑白打字文本效果非常好,但是与我们的用例不匹配:默认情况下不支持手写文本,并且需要提高图像质量来改进推理。 这就是我们决定停止对该库进行实验的原因。

使用 Tesseract 进行线条识别

我们评估的第二个开源库是 OpenCV,它是计算机视觉领域的领先库。尽管 OpenCV 具有广泛的功能(从图像处理到对象识别),但它还提供文本检测和文本识别功能。文本识别依赖于用户必须提供的外部深度学习模型。然而,我们无法对单行文本进行识别,因为 OpenCV 的文档对此功能相当模糊,这就是我们选择放弃使用 OpenCV 的原因。

由于领域限制,我们无法使用开源库对历史文档进行 OCR,因此我们决定尝试 Amazon Web Service、Microsoft Azure 和 Google Cloud 提供的云服务。

OCR云服务研究

首先,我们决定使用 1936 年的手写人口普查来测试 AWS Textract,因为我们通常在 Marmelab 的项目中与这家云提供商合作。

我们使用 Textract 来分析整个页面,并进行布局检测,结果并没有我们希望的那么好。 虽然表格检测相当不错,但模型会跳过一些单词,由于书写过于复杂而难以识别某些单词,或者将跨行的单词分成两个单元格。 当我们需要确保名称被正确检测并且不分成两部分时,这尤其是一个问题。

此外,截至目前,我们还无法使用自己的数据训练自定义模型来微调 AWS 提供的模型以改进检测,这就是我们决定不再继续使用 AWS Textract 服务的原因。

使用 AWS Textract 进行线条识别

其次,我们评估了 Azure AI Document Intelligence(前 Azure 表单识别器),因为我们的客户使用 Azure 作为其主要云提供商。 与 Textract 类似,AI Document Intelligence 除了光学字符识别之外还提供布局和表格检测。

结果与 AWS 为同一任务提供的结果相当:表格单元格检测很棒,但它在识别交叉线单词方面存在同样的问题。 与 AWS Textract 相比,Azure AI Document Intelligence 的主要优势在于它可以根据用户提供的数据进行微调。 然而,由于跨线文字问题,我们选择不再继续提供服务。

使用 Azure AI 文档智能进行线条识别

最后,我们试验的最后一个云服务是 Google Cloud Document AI,与其他云服务类似,它提供表格布局和单元格提取以及光学字符识别。

有关历史文献 OCR 的论文

在我们对该主题的研究过程中,我们发现了一篇有趣的论文,名为 Projet d'Océrisation des revensements de la Population Parisienne (POPP)。该出版物来自法国鲁昂大学 LITIS 实验室。在这个项目中,该研究团队专注于 1926 年、1931 年和 1936 年巴黎人口普查的光学字符识别。由于我们正在从事同一时期的人口普查,因此该项目引起了我们的注意,我们决定看看他们的方法。

POPP 项目定义了一种从历史表中提取数据的新颖过程。 该过程由三个不同的步骤组成:

  • 首先,作者从双页跨页中提取表格,展开它们,然后使用 DhSegment (EPFL) 从这些表格中提取行。 DhSegment 是一个经过微调的 ResNet-50 模型,致力于从历史文档中提取数据;
  • 然后,作者使用基于 BLSTM 架构的自定义模型对提取的线条执行 OCR。 为了提高检测结果,他们使用了师生模型方法,在验证数据集上获得了 4.52% 的字符错误率(CER)和 13.57% 的单词错误率(WER);
  • 最后,他们在 OCR 后整合了领域知识(人名词典、地区和国家的常用缩写列表等)以改进检测。

复制 POPP 过程

我们的客户要求我们进行一次峰值测试,以验证这种方法是否适合他们的用例。在 1 个冲刺期间(由 2 名开发人员和一名协调员组成的团队全职工作 2 周),我们对他们的程序进行了如下实验:

我们使用基于 Torch Framework 的最新版本的 DhSegment 从双页跨页中裁剪表格。为此,我们需要在 80 个双页的数据集上对模型进行标记和微调,并在验证和测试数据集上获得了良好的结果。

我们还使用 OpenCV 使用 2D 旋转矩阵来展开表格。然而,在本次冲刺期间,我们没有时间执行行提取,因为我们选择专注于 OCR 技术。

对于 OCR 部分,我们决定尝试 TrOCR,这是来自 Microsoft 的最先进的 OCR 模型。然而,当我们使用法语版本的模型对裁剪线进行检测时,我们面临这样一个事实:该模型仅返回纯文本,没有分隔符(例如逗号或斜杠)。

为了解决这一挑战,我们决定使用 POPP 项目提供的训练数据集对 French 模型进行微调,以匹配其在 Google Collab 上的输出格式(其中使用斜杠划分列,并添加其他元数据)。

经过一轮训练后,我们获得了 6% 的字符错误率 (CER) 和 22% 的单词错误率 (WER),但是,由于数据集驱动器的连接失败,我们无法在 Google Collab 上微调模型训练期间,冲刺剩余时间不足;

我们在测试期间也没有时间整合领域知识,因此跳过了这一部分。

微调 1 epoch 后得到的结果

这些结果令人鼓舞,但还不足以取代人类的工作。在峰值结束时,客户决定停止探索并与论文作者讨论,看看他们是否能为我们提供有关如何改进结果的见解。

用于全页识别的Transformers

我们会见了鲁昂大学 LITIS 实验室的研究团队,并向他们展示了我们的研究结果。他们很快告诉我们 POPP 程序的局限性,以及我们可以在哪些方面改进我们的结果。这次讨论表明该算法并不是最适合我们的用例。

他们还公开了他们在历史文献 OCR 方面的进展。他们现在正在开发一个名为 Exo-POPP 的新项目,该项目专注于使用整页文本分析来提取有关婚姻的信息。

他们现在使用基于 Transformer 的算法。 Transformers 模型在语言建模中被大量使用,因为它们捕获文本各部分之间的关​​系;这在婚姻历史文献的背景下尤其有趣,因为它们通常以全文段落的形式呈现。

他们的初步结果非常有希望,特别是因为他们不再需要检测表格和线条。 他们的新算法(迄今为止尚未发布)可处理整页扫描并使用领域知识来修复 OCR 错误。 他们的模型还能够从非结构化文本中提取命名实体(例如名字、姓氏、日期等),这比之前的方法有了很大的改进。

我们现在正在等待他们的新算法的发布,以便在我们的用例上对其进行测试。

结论

虽然光学字符识别在过去十年中迅速发展,但历史文档的分析仍然面临挑战:手写文本的连接和某些文档的扫描质量较差使得字符识别变得更加困难。 然而,领域知识的添加有助于提高检测精度。 此外,深度学习的最新进展以及基于Transformer 的模型的引入可以通过整页识别来增强检测,而不是单行分析。

在这个实验中,我们了解到基于云的文档视觉服务确实适用于许多传统用例(结构良好的文档、打字文本等)。这些服务消除了通过 SDK 使用深度学习模型的大部分困难,同时提供良好的字符识别率。

对于云服务未涵盖的用例,我们了解到使用开源库需要大量的工作和科学专业知识。开箱即用的结果永远不够好,有必要对模型进行微调以获得良好的结果。这是一项耗时的任务,需要大量数据来训练模型。

最后,当工程达到极限时,有必要求助于科学文献来寻找解决问题的新方法。与该领域的研究人员交谈是了解最新技术并了解未来的好方法。

 

作者:白鹿原老张原文地址:https://www.cnblogs.com/Leap-abead/p/18009875

%s 个评论

要回复文章请先登录注册