对照片进行分类并从中提取文本的方法

人工智能 机器学习 深度学习 计算机视觉
2021-11-17 08:15:35

我正在尝试制作一个个人 ML 项目,我的目标是使用发票中的照片,例如沃尔玛发票,将其归类为沃尔玛发票并提取总支出。然后,我会将这些信息保存在关系数据库中,并推断出一些关于我的支出的统计数据。目标是不仅对来自沃尔玛的发票进行分类,而且对来自我花钱最多的商店的发票进行分类,然后提取总支出金额。我已经手动完成了这个过程,我将我的支出插入到关系数据库中。我有一堆来自不同发票的照片,这些照片是我在过去一年中为此目的(训练模型)记录的。

你们会推荐什么算法?从我的角度来看,我认为我需要一些自然语言处理来提取花费的总金额,也许还需要一个卷积神经网络来将发票归类为来自特定商店?

谢谢!

2个回答

这个项目有三个功能方面,每个方面都可以是一个子项目,即使它们是相互关联的。相关研发中这些方面的脱钩可能会提高开发速度。

  1. 对图像进行分类——在这种情况下,供应商品牌
  2. 定位和定位文本
  3. OCR 文本 - 在这种情况下,总

这些在供应商发票的特定情况下当然是可行的,所以整个项目当然是。

目标是从输入图像中生成两个信息域。

  • 供应商代码
  • 某些特定货币单位的总计

过去的发票、供应商的名称以及每张发票的总额都可以作为培训数据使用,这可能会有所帮助。训练数据量是否足够,只能通过对某些数据指标进行非常复杂的理论应用或通过试验来确定。建议两者都做。

你们会推荐什么算法?

用人们推荐的算法来定义人工智能设计是不负责任的。这些人推荐的算法已经被算法目录路径中的文件路径名、示例的目录路径以及任何好的 AI 框架的文档部分所涵盖。让我们先谈谈设计,然后是算法选项,因此算法选择的基础比网站成员的大部分随机阅读选择要多。

所涉及的模型以及可以参数化以便可以通过训练进行调整的模型部分由上述三个子项目定义。

分析

对于这个项目,人工智能没有理由识别发票上的哪个文本是供应商名称。如果有一百种供应商发票类型,一个人识别每种发票类型的关键边界的速度比开发一个完全通用的算法方法自动化该工作所需的工作快几个数量级。如果有成千上万的供应商和不断变化的发票模板,那么开发这种自动化只会节省资源,这很可能发生在个人理财的情况下。

这些是以下对象所在的四边形(四边多边形)形式的关键边界。

  • 供应商名称文本框
  • 总金额文本框
  • 整个表格周围的矩形

通过其中一个标记程序将十二个点数字化是一个比三个矩形边界框和倾斜表示更可能产生可靠系统的模型。这是因为倾斜角度无论如何都需要至少两个相邻点,并且在实际扫描场景中,当扫描仪可能被更换或产生不同比率的磨损或纸质发票的平滑或磨损特性时,纵横比不能保持恒定。

使用网络完成这三件事将需要一个人十年以上的发票,除非这个人是亿万富翁的强迫性买家,拥有一组秘书进行扫描和数据输入。

模型就是这些。

  • 具有不同对比度、亮度、倾斜度、每英寸水平像素、每英寸垂直像素、供应商名称的相对位置和大小以及发票总额的相对位置和大小的四边形文档的数字化
  • 矩形框中的数字字符和其他货币字符
  • 供应商的品牌形象,可能包括徽标和任意且可能是唯一字体的类型

现在我们可以谈谈人工网络方法。

  • 调整对比度、亮度、倾斜度、分辨率、位置和大小将需要基于所涉及的几何形状的自定义输入、损失函数和层排列。如果文档可以按时间顺序排序,GRU 网络可能会获得一些优势,因为集合会变成时间序列,可以利用其趋势。
  • 货币价值最好使用 OCR 库来完成。
  • 识别品牌可能最好将 CNN 用作分类机器。

如果未找到供应商和总数,系统必须指出,在这种情况下,将指示新模板,并且必须为这种新类型将十二个点数字化。

可以使用一个单一的深度卷积网络来做到这一点,但同样需要扩充数据集。另一种方法是创建一个填写完整的发票生成器,以在上面列出的各种可变性维度上生成大量随机变量数据,以训练深度 CNN。

由于这些问题中的许多问题已经得到了较早的解决,并且我们有很多很好的工具来处理图像和文本,因此这项任务似乎并不那么困难。但是,只有在实际尝试了建议的解决方案后,您才会发现。

我建议采用以下方法:

  1. 使用 Tesseract 和 OpenCV 从您保存的图像中提取文本。您可以在此处参考使用 tesseract 和 python 的一个很好的示例 - https://www.pyimagesearch.com/2018/09/17/opencv-ocr-and-text-recognition-with-tesseract/

  2. 评估结果以计划并考虑您的下一步。请参阅与教程相关的出版物,例如描述挑战的 EAST 算法,并指出有关该主题的其他研究。这将帮助您评估其他研究人员针对不同案例研究过的其他方法。

  3. 假设文本检测运行良好,继续通过使用行检测(找到水平延伸的连续空白)和制表位检测(垂直连续空白)检测文档的某些部分。为此,请使用 Tesseract/openCV 检测到的文本块。

  4. 根据行/列标识的布局重新组织检测到的文本。接下来,识别并丢弃您可能不需要的文本,例如徽标、其他相关详细信息,例如商店的电话号码、税收减免、给定的零钱等。这些可以通过精心设计的正则表达式轻松获取。

  5. 运行拼写检查器以消除识别错误(aspell、pyenchant 等)

  6. 最后,根据获得的结果,您可以评估剩余的错误并通过编写一组易于识别的 OCR 错误的正则表达式来修复它们,或者构建一个文本模型来学习和修复类似的错误。