Android:如何改善tesseract ocr检索到的图像中的数字?

use*_*924 11 java ocr android tesseract

我做了一个简单的应用程序,读取图像并使用android检索数字图像作为文本.但问题是精度仅为60%左右,并且也会出现一些不需要的噪音.我确实认为准确度不可能达到100%,但是,我认为必须有一种方法来改进它.但是,既然我是业余爱好者,我觉得很难.我搜索了谷歌,但无法获得可靠的信息.

我想从东方幸运票中读取数字596,00和012345,如下图所示.

在此输入图像描述

spa*_*lug 1

Tesseract-ocr 在满足以下条件的字符图像上效果最佳:

  • 输入图像的分辨率应至少为 300 dpi

  • 输入图像应该是黑白的

  • 输入图像中的噪声应最小(即文本应与背景清晰区分)

  • 文本行应该是直的

  • 图像应以要检测的文本为中心

(有关更多详细信息,请参阅 tesseract-ocr wiki)

对于给定的输入图像,tesseract 将尝试对图像进行预处理和清理以满足这些标准,但为了最大限度地提高检测精度,最好自己进行预处理。

根据您提供的输入图像,主要问题是背景噪声太多。为了从图像中的文本中去除背景噪声,我发现应用具有阈值的描边宽度变换 (SWT) 算法来去除噪声可以得到有希望的结果。libCCV 库中提供了具有许多可配置参数的 SWT 快速实现它清理图像的效果取决于许多因素,包括图像大小、笔划宽度的均匀性以及算法的其他输入参数。此处提供了可配置参数的列表。

然后,将 SWT 的输出传递给 tesseract 以获取图像中字符的文本值。

如果传递给 tesseract 的图像仍然包含一些噪声,它可能会返回一些错误检测,例如标点符号字符。鉴于您正在处理的图像可能只包含字母和数字 az AZ 0-9,您可以简单地将正则表达式应用于输出以消除任何最终的错误检测。