发票/OCR:检测发票图像中的两个重要点

Posted

技术标签:

【中文标题】发票/OCR:检测发票图像中的两个重要点【英文标题】:Invoice / OCR: Detect two important points in invoice image 【发布时间】:2013-10-07 10:56:25 【问题描述】:

我目前正在开发 OCR 软件,我的想法是使用模板来尝试识别发票中的数据。

但是扫描的发票可能有几个“缺陷”:

并非所有基于单一模板的发票都在扫描仪下正确对齐。 人们可以在发票上写字 等

发票示例:(必须谷歌它,遗憾的是无法添加更具体的版本,因为客户数据显然是机密的)

我根据文本的 x 值在发票中找到我的数据。

但是,我需要知道发票的比例和从左/右的偏移量,然后才能对检索到的所有数据进行任何实际计算。

到目前为止我尝试了什么?

1) 使图像成为单色并使用第一个出现的黑色像素的左右边界。这失败了,因为人们可以在发票上写字。

2) 将发票分成垂直部分,使用黑色像素最多的部分。由于相似模板之间的分布并不总是一致的事实而失败。

我真的可以在 (1) 如何识别发票中的重点和 (2) 我应该关注的重点方面提供帮助。

我希望这个问题足够清楚,因为它很难解释。

【问题讨论】:

您可以依赖发票的哪些固定部分?表格本身,特别是它的黑框,会在所有扫描中使用吗?灰色背景是否也可以使用,或者它们会在某些扫描中丢失?即使应该旋转图像以进行扫描,比例是否相同,或者您是否也期望比例变化? 您使用什么样的技术在表格中定位描述和编号? 【参考方案1】:

检测旋转

我建议你从检测直线开始。

寻找(可能是随机的)具有高对比度的小区域,即大部分是白色但也有相当数量的非常黑色的像素。然后尝试为这些黑色像素拟合一条线,例如使用最小二乘法。删除异常值,并将另一条线拟合到其余点。根据需要进行迭代。评估拟合的好坏,即观察区域中有多少像素真正靠近线,以及该线超出观察区域的距离。对多个区域执行此过程,您应该得到一个加权的行列表。

对于每条线,您可以计算线本身的方向以及与其正交的方向。这些数字之一可以从区间 [0°, 90°) 中选择,另一个将是 90° 加上该值,因此存储一个就足够了。采取所有这些方向,并找到一个最适合所有方向的角度。您可以使用例如滑动窗口来做到这一点。 5°:滑过该(循环)区域并找到最大线数在窗口内的值,然后计算该窗口内角度的平均值或中值。所有这些计算都可以在考虑线的权重的情况下完成。

找到线条的方向后,您可以旋转图像,使线条与坐标轴完美对齐。

检测翻译

假设图像在任何时候都没有缩放,那么您可以尝试使用基于 FFT 的图像相关性来将其与模板匹配。将两个图像都转换为灰色,用零填充它们,直到原件最多占据填充图像边缘长度的 1/2,最好应该是 2 的幂。在两个方向上对两个图像进行 FFT,将它们逐元素相乘并返回 iFFT。生成的图像将编码两个图像在给定偏移下相对于彼此的一致程度。只需找到最大值,您就知道如何使它们匹配。

添加的文本不会引起任何问题。这种方法最适合大面积区域,例如公司徽标和灰色背景框。细线将提供较差的匹配,因此在这些情况下,您可能必须在进行相关之前模糊图片,以扩大特征。您不必使用模糊图像进行进一步处理;一旦知道偏移量,您就可以返回到旋转但未模糊的版本。

现在您知道旋转和平移,并且假设没有缩放或剪切,因此您确切知道模板的哪个部分对应于扫描的哪个部分。继续。

【讨论】:

有趣的阅读,感谢您的回答。然而,我已经设计了一种处理旋转的方法。您知道同时检测缩放和平移的方法吗?至少我现在知道我需要在(任意?)图像中寻找翻译和缩放,或者更具体地说是发票。 @skiwi:检测缩放的一种可能方法是(重新)使用在我的方法中检测到的线条:它们应该与表单中的线条相匹配,因此可以寻找一个匹配的所有缩放距离均匀。我也曾经和一个人一起工作,他将扫描的图像与线条相交,通过查看相交图案能够获得有关原始图像的一些信息。不过,我不确定我是否会直接获得详细信息。也不确定它是否适用于此。【参考方案2】:

如果已经解决了旋转问题,我只需将所有像素颜色值水平和垂直汇总为一条水平/垂直“线”。这应该会在表单中有水平线和垂直线的地方提供清晰的尖峰。

附言使用 Gimp 的缩放功能生成了相应的水平图像,附在下面(有点难以看到,因为它只有一个像素高,并且可能会因为 > 700 px 宽而被缩小;网址是 http://i.stack.imgur.com/Zy8zO.png)。

【讨论】:

以上是关于发票/OCR:检测发票图像中的两个重要点的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV Java 实现票据纸张的四边形边缘检测与提取摆正

本周优秀开源项目分享:基于yolov3的轻量级人脸检测增值税发票OCR识别 等8大项目

github优秀项目分享:基于yolov3的轻量级人脸检测增值税发票OCR识别 等8大项目

发票捕手,一款超好用的发票OCR识别软件

应付发票捕获或提取自动化[关闭]

财务报表OCR自动识别方案,发票识别,,OCR发票识别