使用TesserOCR读取收据

我的室友和我每次去购物(特别是去Costco)时,都厌倦了手动分割收据,所以我想使用图像识别技术制作一个收据分割器。

我使用Python的Tesserocr将收据的图片转换成文本,然后使用正则表达式匹配文本并进行计算。问题是Tesseract在将图像转换为文本方面的表现非常糟糕。下面是一张我们的收据的图片,使用api.SetImageFile(img)api.GetUTF8Text()后的输出如下:

”Wm-Belfsville #214j|0925 Balfimore Rve. (R1.Belfsvlll B, MD 207054P Member 111869052983E 1952 SNEET8SRTLY 11.79E 0000165287 CPN/1952 3.80“E 1952 SNEET&SHTLY 11.79E 0000165287 CPN/1952 3.80-87745 ROTISSERIE 4.99 H1 5597 BLUEBERRIES 6.99E. 5597 BIUEBERRIES 6.99E. 979210 CHOC MRNGOS 9.99 HF‘ 24311 VHR. MUFFIN 7.991 1060788 PRETZELCRISP 6.8987745 ROTISSERIE 4.99 H- 87745 ROTISSERIE 4.99 HEZ 71096 RED DEL 7.99El 1027557 KOREHNNOODLE 8.79Ei 382861 KS IN CK BST 16.79[S 91610 FROSTED FLKS 6.79[3 11422 3 YR CHDR 12_27[5 46849 SESNDPRKTEND 12.55SUBTOTRL 13 _THX 1,33xu** TOTAL IIIIIIIBEEIHflIxxxxx XXXXXXX4540 CHIP Read

你可以看到输出很难处理。它将”A”识别为”H”,有时将”E”识别为”F”或其他随机字符。我认为我有两个选择:

  1. 以某种方式训练Tesseract更好地读取收据,但我之前没有机器学习的经验。我尝试阅读了Tesseract的训练指南,但其中有很多我并不熟悉的技术细节。我认为实际过程应该不难,因为我读取的图像非常具体。

  2. 拍摄收据的多张照片,使用像Fred’s ImageMagick Scripts这样的工具,对所有照片应用不同的滤镜,将所有照片的排列组合通过Tesseract处理并整合结果。这样做的问题是1)我不确定如何进行整合。使用正则表达式会很困难。2)我认为仍然会存在基本问题,比如将”A”识别为”H”。

有谁能帮助我实现这两个选项中的任何一个,指导我完成这个任务吗?或者告诉我还有其他我可以尝试的方法?


回答:

如果你可以使用ImageMagick,并且在类Unix系统上(Linux,MacOSX,带Cygwin的Windows或Windows 10的Unix环境),那么你可以尝试我的bash shell脚本,textdeskew和textcleaner,网址是http://www.fmwconcepts.com/imagemagick/index.php。例如:

textdeskew input.jpg deskew.png

校正结果

然后

textcleaner -f 25 -o 10 -g -e normalize -s 1 deskew.png deskew_clean.png

校正和清理结果

或者在任何操作系统上的ImageMagick中,只需使用-deskew和-lat:

convert input.jpg -deskew 40% input_deskew.png

ImageMagick校正结果

convert input_deskew.png -negate -lat 25x25+10% -negate input_deskew_lat.png

ImageMagick校正和lat结果

或者将它们一起运行:

convert input.jpg -deskew 40% -negate -lat 25x25+10% -negate input_deskew_lat.png

这些方法对你的OCR有帮助吗?

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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