如何从收据中提取相关信息

时间:2017-08-21 12:09:33

标签: opencv machine-learning keras tesseract opencv3.0

我试图使用Opencv,Tesseract和Keras的组合从一系列不同的收据中提取信息。该项目的最终结果是,我应该能够使用电话拍摄收据,并从该图片中获取商店名称,付款方式(卡或现金),支付金额和更改投标。

到目前为止,我已经使用Opencv对一系列不同的样本收据进行了一些不同的预处理步骤,例如删除背景,去噪和转换为二进制图像,并留下如下图像:

receipt-scanned

然后我使用Tesseract在收据上执行ocr并将结果写入文本文件。我已经设法让ocr在可接受的水平上执行,所以我现在可以拍一张收据并在其上运行我的程序,我将得到一个包含收据上所有文本的文本文件。

我的问题是我不希望收据上的所有文字,我只想要一些信息,例如我上面列出的参数。我不确定如何培训一个可以提取我需要的数据的模型。

我是否认为我应该使用Keras对图像的不同部分进行分段和分类,然后将文本写入我的模型已归类为包含相关数据的部分中的文件?或者我需要做什么更好的解决方案?

对不起,如果这是一个愚蠢的问题,这是我的第一个Opencv /机器学习项目,我的相当远远不够。任何建设性的批评都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

使用图像是一个好主意,因为如果你只是普通的OCR,你将会松散文档的结构。我认为你走在正确的轨道上。我会将账单分成标题,总金额,订单项,并获得对其进行培训的图像分类器。然后,您可以使用它从文本中清除/提取所需的相关信息

答案 1 :(得分:0)

我的回答并不像现在流行的那样流行,但是我认为它对您有用,特别是如果这是针对产品的(而不是出于研究和出版目的)。

Example steps

我将执行论文Text/Graphics Separation Revisited。我已经在Matlab和C ++中都实现了它,并且从您的描述中保证不会花很长时间。总结:

  1. 获取所有具有统计信息的连接组件。您对每个字符的边界框特别感兴趣。

  2. 本文从直方图上获得了所连接组件的属性的阈值,这使其变得更可靠。在连接的组件的几何特性上使用这些阈值(效果非常好),丢弃所有不是字符的东西。

  3. 对于您的角色,获取所有边界框的质心,并根据自己的标准(高度,垂直位置,欧氏距离等)对紧密质心进行分组。使用获得的质心簇创建矩形文本区域。

  4. 关联具有相同高度和垂直位置的文本区域。

  5. 在您的文本区域上运行OCR并查找诸如“现金”之类的关键字。老实说,我认为您可以摆脱带有文本文件的字典的困扰,而从完成移动设备的计算机视觉后,我知道您的资源是有限的(也受隐私保护)。

老实说,我认为神经网络不会比某种关键字匹配(例如,使用Levenshtein距离或类似的方法来增加一些鲁棒性)好得多,因为无论如何,您都需要手动创建和标记这些单词,创建您的训练数据集,所以...为什么不把它们写下来呢?

基本上就是这样。您最终得到的东西非常快(特别是如果您想使用电话并且不能将图像发送到服务器),它就可以正常工作。无需机器学习,因此也不需要数据集。

但是如果这是去学校...对不起,我太没礼貌了。请使用TensorFlow以及10,000个带有手动标签的收据图像和自然语言处理方法,您的教授会很高兴。