提高Tesseract检测质量

Hyn*_*rix 8 c++ ocr opencv tesseract template-matching

我正在尝试从用消费者相机(包括移动电话)拍摄的图像中提取不形成有意义字的字母数字字符(a-z0-9).字符具有相同的大小和字体类型,并且不格式化.实际处理在Windows下完成.

下图显示了原始输入: 原始图像

透视处理后,我将以下内容应用于OpenCV:

  • 从RGB转换为灰色
  • 适用cv::medianBlur于去除噪音
  • 使用自适应阈值将图像转换为二进制 cv::adaptiveThreshold
  • 我知道网格的行数和列数.因此,我只使用此信息提取每个网格单元.

完成所有这些步骤后,我得到的图像与以下相似:

在此输入图像描述

在此输入图像描述

在此输入图像描述

然后我分别在每个提取的细胞图像上运行tesseract(带有最新训练数据的最新SVN版本)(我尝试了不同的-psm-l值):

tesseract.exe -l eng -psm 11 sample.png outtext
Run Code Online (Sandbox Code Playgroud)

tesseract产生的结果不是很好:

  • 大多数字符无法识别.
  • 网格线有时被解释为"l"或"i"字符.

我已经尝试过形态学操作(开放,闭合,侵蚀,扩张)并用OTSU阈值(THRESH_OTSU)替换自适应阈值,但结果变得更糟.

还有什么可以尝试提高识别质量?或者除了使用tesseract之外,还有更好的方法来提取字符(例如模板匹配?)?

编辑(21-12-2014): 我测试了简单的模板匹配(使用标准化的互相关和LMS,但结果更差).但是我通过提取每个字符findCountours然后运行仅包含一个字符的tesseract以及将-psm 10每个输入图像解释为单个字符的选项向前迈出了一大步.Additonaly我在后处理步骤中删除了非字母数字字符.第一批结果令人鼓舞,检出率达到90%且更好.主要问题是"9","g"和"q"字符的错误检测.

问候,

Alt*_*lto 1

正如我在这里所说的,您可以告诉 tesseract 注意“几乎相同”的字符。另外,超正方体中有一些选项在您的示例中对您没有帮助。例如,“Pocahonta5S”在大多数情况下会变成“PocahontaSS”,因为数字位于字母单词中。你可以这样看。

关于预处理,您最好使用锐化滤镜。不要忘记,tesseract 在读取任何内容之前总是会应用 Otsu 过滤器。如果你想要好的结果,锐化+自适应阈值与其他一些过滤器是个好主意。