gpt4 book ai didi

image - 发票/OCR : Detect two important points in invoice image

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:44 25 4
gpt4 key购买 nike

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

然而,扫描的发票可能有几个“缺陷”:

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

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

Example invoice

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

但是,在我可以对检索到的所有数据进行任何实际计算之前,我需要知道发票的比例和左/右偏移量。

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

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

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

在 (1) 如何识别发票中的重点以及 (2) 我应该重点关注的重点方面,我真的需要你的帮助。

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

最佳答案

检测旋转

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

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

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

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

检测翻译

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

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

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

关于image - 发票/OCR : Detect two important points in invoice image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19113525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com