【问题标题】:Tesseract on iOS - bad resultsiOS 上的 Tesseract - 糟糕的结果
【发布时间】:2013-11-14 11:51:42
【问题描述】:

在使用 libc++ 编译 tesseract 以使其与 OpenCV 一起使用超过 10 个小时之后,我在获得任何有意义的结果时遇到了问题。我正在尝试将其用于数字识别,我传递的图像数据是一个小正方形 (50x50) 图像,其中有一个或没有数字。

我尝试同时使用 eng 和 equ tessdata(来自 google 代码),结果不同,但都猜到了 0 位数字。使用 eng 数据我得到 '4\n\n''\n\n' 大部分时间(即使图像中没有数字) ,有信心从 1 到 99。 使用 equ 数据,我得到 '\n\n' 的置信度为 0-4。

我也尝试对图像进行二值化,结果或多或少是相同的,但我认为不需要它,因为图像被过滤得很好。

我假设有问题,因为与最简单的示例图像相比,这些图像很容易识别。

代码如下:

初始化:

    _tess = new TessBaseAPI();
    _tess->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
    _tess->SetVariable("tessedit_char_whitelist", "0123456789");
    _tess->SetVariable("classify_bln_numeric_mode", "1");

认可:

char *text = _tess->TesseractRect(imageData, (int)bytes_per_pixel, (int)bytes_per_line, 0, 0, (int)imageSize.width, (int)imageSize.height);

我没有收到任何错误。 TESSDATA_PREFIX 设置正确,我尝试了不同的识别方法。检查时 imageData 看起来没问题。

以下是一些示例图片:

http://imgur.com/a/Kg8ar

这应该与常规训练数据一起使用吗?

感谢任何帮助,我第一次尝试 tessarect,我可能错过了一些东西。

编辑:

我发现了这个:

    _tess->SetPageSegMode(PSM_SINGLE_CHAR);

我假设它必须在这种情况下使用,尝试过但得到了相同的结果。

【问题讨论】:

  • 这些是分辨率极低的图像。尝试以 300 DPI 重新扫描,看看是否能得到更好的结果。
  • 它们没有被扫描,我从中提取正方形的原始图像非常大。我正在缩小它的大小以进行预处理(有点复杂)。如果它不会对预处理部分的性能产生太大影响,如果您认为它应该有所作为,我会尝试在此步骤中获取更大的图像。

标签: ios tesseract


【解决方案1】:

我认为 Tesseract 对于这些东西来说有点矫枉过正。您最好使用一个简单的神经网络,为您的图像明确训练。在我的公司,最近我们尝试在 iOS 上使用 Tesseract 来执行 OCR 任务(用相机扫描水电费),但它对于我们的目的来说太慢且不准确(在 iPhone 4 上扫描花费了 30 多秒低帧率)。最后,我专门为我们的目标字体训练了一个神经网络,这个解决方案不仅击败了 Tesseract(它甚至可以在 iPhone 3G 上完美地扫描内容),而且还击败了商业 ABBYY OCR 引擎,我们得到了一个样本从公司。 This course's 材料将是机器学习的良好开端。

【讨论】:

  • 我同意矫枉过正的部分。问题是这不是一个商业项目,我不想在这上面花太多时间,所以我尝试使用应该花费最少时间的解决方案。至于速度,我认为这不是问题,图像相当小,即使现在效果不佳的代码运行速度也很快(几秒钟)。无论哪种方式,我都会在 iPhone 5 上进行演示,预计性能不会是一流的。
猜你喜欢
  • 2014-06-30
  • 2012-08-23
  • 2011-11-26
  • 2011-09-13
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多