指定光学字符识别的最佳方法是什么?

数据挖掘 Python 深度学习 nlp 正则表达式 ocr
2021-09-30 20:11:36

我有一个非常容易理解的请求,即从扫描的发票(数字格式是图像,而不是 PDF)中提取信息(发票编号、发票数据、到期日、总数等),最好是用 Python。好消息是页面上或多或少肯定存在必要的信息,并且这些(类似正则表达式的)文本格式也往往是随之而来的。另一方面的缺点是发票的布局非常多样化。

我玩过以下可能的方法:

  • 使用字符识别来提取纯文本,然后尝试与片段进行拼图。这种方法有一些相当大的问题:OCR 的质量(至少在 tesseract 库中实现的)相当平庸,输出毫无希望地是非结构化的(实际上是一大堆单词),很难拿出任何正则表达式或其他规则,即使是常规短语。
  • 我的另一种方法是将某种深度学习应用于原始图像本身或文本堆,我们将繁重的工作留给网络,但在这种情况下,我不确定应该是什么输出?它是某种序列到序列的映射吗?

确实是非常不寻常的任务。

2个回答

光学字符识别是一个经过充分研究的问题,有许多可能的解决方案(资源)。CNN 已被证明即使对于手写字符识别也非常有效。看看这两篇论文:

是一个初学者教程,可以使用 Tensorflow 做到这一点。

如果您需要额外的数据来训练您的模型,请查看MNIST 数据集

一种方法是应用一种好的分割技术,然后使用一些算法(如(ann,svm,knn...))对所有区域进行分类,这种方法根本不需要大量的训练样本。另一种方法是应用深度学习(但这意味着需要大量训练样本),您可以使用执行回归的 CNN,以便输出它为您提供文本(这意味着您必须设置最大句子长度)。但是为了避免最大句子长度,您可以使用带有一些 RNN 层的 CNN,然后将图像的一部分提供给网络(级联方法)。