document image processing

我正在开发一个处理文档图像(主要是发票)的应用程序,基本上,我想将某些感兴趣的区域转换为XML结构,然后根据这些数据对文档进行分类。目前我使用ImageJ来分析文档图像,并使用Asprise/tesseract进行OCR。

现在我正在寻找一些工具来简化开发。具体来说,我正在寻找一些工具来自动校正文档图像的倾斜,并分析文档结构(例如,将图像转换为四叉树结构以便于处理)。虽然我偏爱Java和ImageJ,但我对任何编程语言编写的库/代码/论文都感兴趣。

虽然我正在开发的系统应尽可能自动处理数据,但用户应监督结果,并在必要时纠正系统建议的分类。因此,我对使用机器学习技术以获得更可靠的结果感兴趣。当处理类似文档时,例如特定公司的发票,其结构通常是相同的。当用户之前已经纠正了某公司的文档数据时,这些纠正应在将来被考虑。我对机器学习技术的了解有限,想知道如何实现我的想法。


回答:

以下是Mathematica中的原型,用于查找文本块的坐标,并在每个块内执行OCR。您可能需要调整参数值以适应您实际图像的尺寸。我没有涉及问题的机器学习部分;也许您甚至不需要它来应用这个应用程序。

导入图片,创建打印部分的二进制掩码,并使用水平闭合(膨胀和侵蚀)扩大这些部分。

enter image description here

查询每个斑点的方向,聚类这些方向,并通过平均最大聚类的方向来确定整体旋转角度。

enter image description here

使用之前的角度来校正图像。此时可以进行OCR,但您会丢失文本块的空间信息,这会使后处理变得比必要的更困难。相反,通过水平闭合查找文本块。

enter image description here

对于每个连通组件,查询边界框位置和中心点位置。使用边界框位置提取相应的图像块,并对该块进行OCR。

enter image description here

此时,您有一系列字符串及其空间位置。这还不是XML,但听起来是一个很好的起点,可以直接根据您的需求进行调整。

这是代码。同样,形态学函数的参数(结构元素)可能需要根据您实际图像的尺寸进行更改;此外,如果发票倾斜得太厉害,您可能需要“旋转”结构元素,以便仍然能实现良好的“去倾斜”。

img = ColorConvert[Import@"http://www.team-bhp.com/forum/attachments/test-drives-initial-ownership-reports/490952d1296308008-laura-tsi-initial-ownership-experience-img023.jpg", "Grayscale"];b = ColorNegate@Binarize[img];mask = Closing[b, BoxMatrix[{2, 20}]]orientations = ComponentMeasurements[mask, "Orientation"];angles = FindClusters@orientations[[All, 2]]\[Theta] = Mean[angles[[1]]]straight = ColorNegate@Binarize[ImageRotate[img, \[Pi] - \[Theta], Background -> 1]]TextRecognize[straight]boxes = Closing[straight, BoxMatrix[{1, 20}]]comp = MorphologicalComponents[boxes];measurements = ComponentMeasurements[{comp, straight}, {"BoundingBox", "Centroid"}];texts = TextRecognize@ImageTrim[straight, #] & /@ measurements[[All, 2, 1]];Cases[Thread[measurements[[All, 2, 2]] -> texts], (_ -> t_) /; StringLength[t] > 0] // TableForm

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注