【发布时间】:2013-12-05 14:14:16
【问题描述】:
我有一个关于 Tesseract OCR 原理的问题。据我了解,在形状检测之后,符号(它们的形式)被缩放(调整大小)以具有一些特定的字体大小。 这种字体大小是基于经过训练的数据。基本上,训练集定义了符号(它们的几何形状、形状),也许是它们的表示。
我在 iOS 平台上使用 Tesseract 3.01(最新)版本。 我查看了 Tesseract 常见问题解答,查看了论坛,但我不明白为什么对于某些图像我的识别质量很低。
据说字体应该大于 12pt,图像应该有超过 300 DPI。我做了所有必要的预处理,例如模糊(如果需要)、对比度增强。 我什至在 Tesseract OCR 中使用了其他引擎——它被称为 CUBE。
但是对于某些图像(尽管它们更大 MIN(width, height) >1000 - 我为 tesseract 重新缩放它们,我得到了不好的识别结果
但在其他图像集上效果更好:
那些较小的图像我不会调整它们的大小,(只是转换为灰度模式)。
如果我写的关于引擎的内容是正确的。
假设训练集基于大小为 14pt 的字体。图片中的符号被调整到某个特定的大小,我看不出在这种情况下它们没有被识别的任何原因。
我还尝试了自定义词典,以惩罚非词典单词 - 并没有给识别带来太多好处。
tesseract = new tesseract::TessBaseAPI();
GenericVector<STRING> variables_name(1),variables_value(1);
variables_name.push_back("user_words_suffix");
variables_value.push_back("user-words");
int retVal = tesseract->Init([self.tesseractDataPath cStringUsingEncoding:NSUTF8StringEncoding], NULL,tesseract::OEM_TESSERACT_ONLY, NULL, 0, &variables_name, &variables_value, false);
ok |= retVal == 0;
ok |= tesseract->SetVariable("language_model_penalty_non_dict_word", "0.2");
ok |= tesseract->SetVariable("language_model_penalty_non_freq_dict_word", "0.2");
if (!ok)
{
NSLog(@"Error initializing tesseract!");
}
所以我的问题是我应该用另一种字体训练 tesseract 吗?
而且,老实说,我为什么要训练它?在来自 Internet 或 PC(Mac) 的默认训练数据文本上,我得到了很好的识别。
我还检查了原始 tesseract 英语训练数据,它有 38 个 tiff 文件,属于以下系列: 1) 里亚尔 2) 绿地 3)投石机 4次 5) 乔治亚州 6 ) 课程
图片中的字体似乎不属于这个集合。
【问题讨论】:
-
最新版本是3.02
-
是的,你是对的。谢谢。
-
我认为图片应该是(descew & dewarp.)stackoverflow.com/questions/12275259/…