iOS .Tesseract OCR 为什么识别如此纯粹。发动机原理

标签 ios ocr tesseract

我有一个关于Tesseract OCR原理的问题。据我了解,在形状检测之后,符号(它们的形式)被缩放(调整大小)以具有一些特定的字体大小。 这样的字体大小是基于经过训练的数据。基本上,训练集定义了符号(它们的几何形状、形状),也许是它们的表示。

我在iOS平台上使用的是Tesseract 3.01(最新)版本。 我查看了 Tesseract 常见问题解答,查看了论坛,但我不明白为什么我对某些图像的识别质量很低。

据说字体应该大于 12pt,图像应该有 300 DPI 以上。我做了所有必要的预处理,例如模糊(如果需要)、对比度增强。 我什至在 Tesseract OCR 中使用了其他引擎——它被称为 CUBE。

但对于某些图像(尽管它们更大 MIN(width, height) >1000 - 我为 tesseract 重新缩放它们,但识别结果很差

http://goo.gl/l9uJMe

但是在其他图像集上结果更好:

http://goo.gl/cwA9DC

那些较小的图像我没有调整它们的大小,(只是转换为灰度模式)。

如果我写的关于引擎的内容是正确的。

假设训练集基于 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)类(class)

图片中的字体好像不属于这个集合。

最佳答案

在您的情况下,图像的大小不是问题。正如我从您所附的图片中看到的那样(我很惊讶之前没有人提到它)问题是您从中得到不好结果的图片上的文本没有放在直线上。。

Tesseract 在 OCR 过程的早期阶段所做的事情之一是检测图像布局并提取整行文本。

这张图片是说明这部分过程的最好例子:

Tesseract lines extraction

如你所见the engine is expecting the text to be perpendicular to the edge of the image .

关于iOS .Tesseract OCR 为什么识别如此纯粹。发动机原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115382/

相关文章:

ios - AVAudioConverter.convertToBuffer 抛出错误代码 -50

python - 在 Pytesser 中使用多种语言

ocr - 针对特定单词训练 Tesseract - 可能吗?

ios - 仅在我的 iOS 应用程序中将 tesseract 字符限制为 a-z 和数字

ios - PayPal iOS SDK授权支付

ios - UITextField 的输入 View 未更改

ios - 当它已经可见时关闭键盘

text - 如何向 Tesseract 4.0 添加新字体?

java - 将希伯来语单词转换为英语字符

python - 后处理并读取模糊的数字-OpenCV/tesseract