【问题标题】:Tesseract does not recognize single charactersTesseract 无法识别单个字符
【发布时间】:2012-03-26 18:50:32
【问题描述】:

如何表示:

  1. 使用油漆创建新图像(任何尺寸)
  2. 在此图片中添加字母 A
  3. 尝试识别 -> tesseract 找不到任何字母
  4. 将此字母复制粘贴到此图像 5-6 次
  5. 尝试识别 -> tesseract 会找到所有字母

为什么?

【问题讨论】:

    标签: ocr tesseract


    【解决方案1】:

    您必须将“页面分割模式”设置为“单字符”。

    例如,在 Android 中,您可以执行以下操作:

    api.setPageSegMode(TessBaseAPI.pageSegMode.PSM_SINGLE_CHAR);
    

    【讨论】:

    • 谢谢!设置PageSegMode.SingleChar 解决了这个问题。
    • api.SetPageSegMode(tesseract::PSM_SINGLE_CHAR); 对于 C++ 用户 ;)
    • 等效命令行参数:--psm 10
    【解决方案2】:

    执行该配置的python代码如下:

    import pytesseract
    import cv2
    img = cv2.imread("path to some image")
    pytesseract.image_to_string(
         img, config=("-c tessedit"
                      "_char_whitelist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                      " --psm 10"
                      " -l osd"
                      " "))
    

    --psm 标志定义了页面分割模式。

    根据 tesseract 的文档,10 表示:

    将图像视为单个字符。

    所以要识别单个字符,您只需要使用:--psm 10 标志。

    【讨论】:

      【解决方案3】:

      需要将 Tesseract 的分页方式设置为“单字符”。

      【讨论】:

      • 嗯,这完全取决于您如何使用 tesseract。如果你从 shell 调用它,你会说tesseract $image $outbase -psm 10。 -psm 设置页面分割模式,模式 10 用于单个字符。这一切都在手册页中。
      • 在某些情况下,模式 13 效果更好。或者使图像更小/更大可能会有所帮助。
      • 将 psm 设置为 10 似乎没有什么不同。我的用例是较大的白色背景上的单个大字符。此示例中清晰的“A”会在 200 DPI 时产生 psm 为 10 的“-\n”。
      【解决方案4】:

      你见过吗?

      https://code.google.com/p/tesseract-ocr/issues/detail?id=581

      错误列表将其显示为“不再是问题”。

      • 一定要有高分辨率的图片。
      • 如果要调整图像大小,请务必保持高 DPI,不要调整得太小
      • 一定要train your tesseract system
      • init Tesseract 之前使用baseApi.setVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); 代码
      • 另外,您可以查看which font to use with OCR

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 2017-08-27
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多