使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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