使用Tesseract进行字符识别

3
我正在尝试与 tesseract API 进行交互,同时我对图像处理还很陌生,最近几天一直在努力摸索。我尝试了简单的算法,已经取得了约70%的准确率。
我希望它的准确率能达到90%以上。图像的问题在于它们的分辨率为72dpi。我也尝试增加分辨率,但效果不佳,我要识别的图像已经附在下面。
非常感谢您的帮助,如果我问了一些非常基础的问题,请见谅。

Image 1

Image 2

Image 3

编辑

我忘记提到我正在尝试在Linux平台上进行所有处理和识别,并且检测此答案中提到的文本的方法需要很长时间,希望在2-2.5秒内完成。此外,我更喜欢不使用命令行解决方案,而是使用LeptonicaOpenCV

大多数图片上传这里

我已尝试以下方法对票据进行二值化,但没有成功

票据包含:

  1. 光线有点暗
  2. 非文本区域
  3. 分辨率较低
我尝试将图像直接输入Tesseract API,平均1秒内可以获得70%的好结果。但是我想提高注意时间因素的准确性。到目前为止,我尝试了以下方法:
  1. 检测图像的边缘
  2. 使用Blob Analysis进行分析
  3. 使用自适应阈值对票据进行二值化处理
然后我尝试将这些二值化的图像输入Tesseract,准确性降至50-60%,尽管二值化图像看起来完美。

不确定您的问题是什么,您是否有任何代码可以显示问题所在? - Caesar
4个回答

3

你可以尝试以下几件事情:

  • 为了提高OCR引擎的准确性,您需要提高图像质量,这意味着在将其提供给Tesseract之前预处理图像。我建议使用OpenCV进行此操作。

  • OCR引擎的主要问题是它们无法像我们一样识别字符。因此,即使不是文本的东西有时也会被错误地识别为文本。因此,为了防止发生这种情况,最好检测文本区域并将其发送到Tesseract,而不是像使用图像#2那样发送整个图像。

  • 另一种提取图像文本区域的方法可以使用这种技术来隔离它们

  • 当您从Tesseract获得结果时,可以通过将结果与字典进行比较来提高它们。


2
一些可能的改进:
  1. 分辨率应至少为300 dpi。
  2. 使您的照明更加均匀分布。有几个暗区可能会影响结果。
  3. 尝试略微缩放字符。目前它们的大小不同,一些字母甚至变形了。
  4. 通过阈值处理和二值化对图像进行预处理。
您可以使用自己的编程完成以上操作,或者使用Fred's ImageMagick Scripts来帮助您。

有没有分发照明的教程? - Muaz Usmani
1
@MuhammadMaaz 你可以尝试侵蚀图像,然后膨胀以模拟白纸张,减法将消除不均匀的效果。更多细节请参见此帖子:http://dsp.stackexchange.com/questions/1932/what-are-the-best-algorithms-for-document-image-thresholding-in-this-example - lennon310
检测文本区域怎么样? - Muaz Usmani

0

我不确定我的帖子对您是否有用,因为我的答案与Tesseract无关。但它与高精度有关,所以我决定让您看看付费OCR SDK解决方案的工作原理可能会很有趣。

这是ABBYY Cloud OCR SDK识别的结果,没有进行任何其他设置。

enter image description here enter image description here

声明:我在ABBYY工作。


0

你可以尝试使用ScanTailor(http://scantailor.sourceforge.net/它还有CLI界面)将图像二值化、校正和去除失真。将图像放大可能有助于提高识别率。因为Tesseract识别配置文件的优化是针对至少300 DPI的。

另一种可能性是对与您的材料特征相关的字体对Tesseract进行训练(更多信息可以在这里找到:https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3)。

我认为查字典在这里并没有帮助,因为你的文本主要是数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接