【问题标题】:Why do I get such poor results from Tesseract for simple single character recognizing?为什么对于简单的单个字符识别,我从 Tesseract 得到如此糟糕的结果?
【发布时间】:2018-10-15 19:13:34
【问题描述】:

我正在尝试使用 Tesseract 进行单字符识别,结果很糟糕。 “h”被识别为“n”,“4”被识别为“/i”,“O”被识别为“()”;

单字符模式好像没有作用,很多字符都被识别为两个字符, 不只是一个。我的图像是简单的双层黑白 TIFF 图像, 拉丁字符。这是位图字体,不是扫描的图像,它们绝对干净且 不需要改进。 Оnly 大约一半的字符被正确识别,这似乎是 对于这样一个简单的任务,百分比非常低。

我使用的 Tesseract 库版本是“4.0.0-beta.3”。 这就是我所说的 Tesseract。

 int CharRecognizer::recognizeTIFFData(char* data, int datalength){
            char *outText;
            TessBaseAPI* api = new TessBaseAPI();

            if (api->Init(NULL, "eng")) {
                    fprintf(stderr, "Could not initialize tesseract.\n");
                    exit(1);
            }
            api->SetPageSegMode(tesseract::PSM_SINGLE_CHAR);
            Pix *image = pixReadMem(data,datalength);
            api->SetImage(image);
            // Get OCR result
            outText = api->GetUTF8Text();
            printf("\nOCR output:\n%s", outText);
            // Destroy used object and release memory
            int utf8 = outText[0];
            api->End();
            delete[] outText;
            pixDestroy(&image);
            return utf8;
 }

我是 Tesseract 的新手,所以我可能遗漏了一些东西。我必须以某种方式训练吗 图书馆第一?可能我应该设置另一个 OcrEngineMode 吗?我预计没有 简单的位图字体识别问题,现在我很迷茫。 非常感谢您, 尤利安娜

【问题讨论】:

    标签: c++ ocr tesseract


    【解决方案1】:

    通过在您的图像周围添加 1x1 像素边框,我能够使 tesseract 在您的情况下产生正确的结果。我在 Linux 上使用tesseract 命令行工具对此进行了测试:

    $ tesseract R2a51.png stdout --psm 10
    n
    $ convert R2a51.png -border 1x1 R2a51.border.png
    $ tesseract R2a51.border.png stdout --psm 10
    h
    

    convert 工具用于创建带有边框的图像版本。

    似乎 tesseract 无法正确处理图像边缘的字符(至少在默认设置下)。

    注意您的第三个字符仍被识别为 0 而不是 O 但我不确定这是否可以被视为 OCR 错误。您可能需要查看 tesseract 字符白名单来处理这个问题。

    编辑: 似乎“Tesseract legacy algorithm”无需修改即可在您的图像上工作。它可以通过--oem 0 在命令行上调用。请注意,您需要在 tessdata 目录中为您的语言匹配 *.traineddata。可以从https://github.com/tesseract-ocr/tessdata下载足够的变体

    【讨论】:

    • 好答案,我想补充的一件事是带有 LSTM 的 tesseract 4 不支持白|黑名单字符。因此,我建议通过在 RIL_SYMBOL 上迭代来添加通过备选方案的后处理步骤。 (P.S. 对我来说它看起来更像是一个零,因为 O 通常更宽)
    猜你喜欢
    • 2014-06-30
    • 2021-06-01
    • 1970-01-01
    • 2013-11-14
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    相关资源
    最近更新 更多