在iOS上执行TeserAct-结果不好

在iOS上执行TeserAct-结果不好,ios,tesseract,Ios,Tesseract,在花了10个多小时使用libc++编译tesseract,使其与OpenCV一起工作之后,我遇到了获得任何有意义结果的问题。我试着用它来识别数字,我传递的图像数据是一个小正方形(50x50)的图像,其中有一个数字或者没有数字 我试过使用eng和equ tessdata(来自谷歌代码),结果不同,但都得到0位数。使用eng数据,我得到了'4\n\n'或'\n\n'结果,大多数情况下(即使图像中没有数字),置信度在1到99之间。 使用equ数据,我得到了信心为0-4的'\n\n' 我还尝试过对图像进

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

我试过使用eng和equ tessdata(来自谷歌代码),结果不同,但都得到0位数。使用eng数据,我得到了'4\n\n''\n\n'结果,大多数情况下(即使图像中没有数字),置信度在1到99之间。 使用equ数据,我得到了信心为0-4的'\n\n'

我还尝试过对图像进行二值化,结果大致相同,但我认为没有必要这样做,因为图像的过滤效果非常好

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

代码如下:

初始化:

    _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);
认可:

    _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);
我没有错。TESSU前缀设置正确,我尝试了不同的识别方法。检查时,imageData看起来正常

以下是一些示例图像:

这是否适用于常规培训数据

感谢您的帮助,我第一次尝试tessarect,我可能会错过一些东西

编辑:

    _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);
我发现:

    _tess->SetPageSegMode(PSM_SINGLE_CHAR);

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

我认为Tesseract对于这种东西有点过分了。你最好使用一个简单的神经网络,为你的图像进行明确的训练。在我的公司,最近我们尝试在iOS上使用Tesseract执行OCR任务(用相机扫描公用事业账单),但对于我们的目的来说,它太慢且不准确(在iPhone4上以极低的FPS扫描需要30秒以上)。最后,我专门为我们的目标字体训练了一个神经网络,这个解决方案不仅击败了Tesseract(它甚至可以在iPhone 3Gs上完美地扫描东西),而且还击败了商用ABBYY OCR引擎,我们从该公司获得了一个样本。
这些材料将是机器学习的一个良好开端

我觉得Tesseract在这方面有点过分了。你最好使用一个简单的神经网络,为你的图像进行明确的训练。在我的公司,最近我们尝试在iOS上使用Tesseract执行OCR任务(用相机扫描公用事业账单),但对于我们的目的来说,它太慢且不准确(在iPhone4上以极低的FPS扫描需要30秒以上)。最后,我专门为我们的目标字体训练了一个神经网络,这个解决方案不仅击败了Tesseract(它甚至可以在iPhone 3Gs上完美地扫描东西),而且还击败了商用ABBYY OCR引擎,我们从该公司获得了一个样本。
这些材料将是机器学习的一个良好开端

我同意过度杀戮的部分。问题是,这不是一个商业项目,我不想在这上面花费太多时间,所以我尝试了用最少时间的解决方案。至于速度,我不认为这会是一个问题,图像是相当小的,即使现在的代码,没有给出很好的结果运行相当快(几秒钟)。无论哪种方式,我都会在iPhone5上进行演示,预计性能不会达到一流水平。我同意过度杀伤力的部分。问题是,这不是一个商业项目,我不想在这上面花费太多时间,所以我尝试了用最少时间的解决方案。至于速度,我不认为这会是一个问题,图像是相当小的,即使现在的代码,没有给出很好的结果运行相当快(几秒钟)。无论哪种方式,我都会在iPhone5上进行演示,预计性能不会达到一流水平。这些都是极低分辨率的图像。试着以300 DPI的速度重新扫描,看看你是否能得到更好的结果。它们没有被扫描,而我从中提取正方形的原始图像非常大。我正在缩小尺寸以进行预处理(有些复杂)。如果预处理部分的性能没有太大影响的话,我会尝试在这一步中获得更大的图像,如果你认为这会有所不同的话。这些都是极低分辨率的图像。试着以300 DPI的速度重新扫描,看看你是否能得到更好的结果。它们没有被扫描,而我从中提取正方形的原始图像非常大。我正在缩小尺寸以进行预处理(有些复杂)。如果这一步不会对预处理部分的性能产生太大的影响,我会尝试在这一步中获得更大的图像,如果您认为这会有所不同的话。