限制Tesseract的预处理

时间:2014-01-22 22:24:36

标签: c++ opencv ocr tesseract

我是tesseract库的新手,我在Ubuntu 12.04上进行了设置。

我正在使用此data set进行识别。当我使用this code将这些图像提供给tesseract(没有任何预处理)时,我得到了大约70-75%。精度。

我希望精度为90 +%,所以我做了一些预处理步骤,我按照这些步骤来增强图像

预处理步骤

  1. 应用了具有半径12
  2. 的圆形结构元素的底帽操作员
  3. 补充图像以使背景白色和文本为黑色
  4. 增强结果图像的对比度
  5. 侵蚀图像。
  6. 完成这些步骤后,我得到的图像非常清晰seen here。但现在当我使用相同的代码精度将这些图像提供给tessearct时,将其减少到< 50%我不知道为什么?是因为tesseract做了一些预处理吗?如果是,那么我如何限制 tesseract进行预处理。如果没有,那么为什么当图像非常清晰时它会给我带来不好的结果呢?如果我问了一些基本问题,请原谅我。

2 个答案:

答案 0 :(得分:1)

关于你的问题,为什么tesseract在使用二进制图像而不是灰色图像作为tesseract的输入时提供更好的结果:

Tesseract将使用各种方法对灰度图像进行内部二值化(没有想到正确使用什么方法进行二值化,有时是局部适应阈值,有时候是全局OTSU阈值。互联网)。当然,tesseract在二进制图像上执行字符识别,并且tesseract的预处理仍然可能在特定问题上失败(例如,没有很好的布局分析)。因此,如果您自己进行预处理部分并将tesseract作为输入图像仅提供带文本的二进制图像并禁用tesseract中的所有布局分析,那么您可以获得比让tesseract为您完成所有操作更好的结果。由于它是一个开源的免费工具,它有一些已知的缺点,必须接受。

如果使用tesseract作为命令行工具,则此线程对参数非常有用。 tesseract command line page segmantation

如果您在开发自己的C ++代码时使用tesseract的源代码,则必须使用正确的参数初始化tesseract。这里的参数在tesseract API方面进行了描述。 tesseract API

答案 1 :(得分:0)

我在预处理后将grayscale(8bpp)图像投放到tesseract,所以在获得该灰度图像后tesseract正在尝试binarize即将其转换为黑白图像,这给了我不好的结果,我仍然不知道为什么。

但之后我尝试将我的比例图像转换为b / w或1bpp图像,然后我将该图像反馈给tesseract我得到了相对更好的结果。