【问题标题】:Empty string with Tesseract使用 Tesseract 的空字符串
【发布时间】:2019-05-16 18:02:51
【问题描述】:

我正在尝试从一个大文件中读取不同的裁剪图像,并且我设法读取了其中的大部分,但是当我尝试使用 tesseract 读取它们时,其中一些会返回一个空字符串。

代码就是这一行:

pytesseract.image_to_string(cv2.imread("img.png"), lang="eng")

有什么我可以尝试阅读这些图像的吗?

提前致谢

编辑:

【问题讨论】:

    标签: python opencv ocr tesseract python-tesseract


    【解决方案1】:

    在将图像传递给pytesseract 之前对其进行阈值处理可以提高准确性。

    import cv2
    import numpy as np
    
    # Grayscale image
    img = Image.open('num.png').convert('L')
    ret,img = cv2.threshold(np.array(img), 125, 255, cv2.THRESH_BINARY)
    
    # Older versions of pytesseract need a pillow image
    # Convert back if needed
    img = Image.fromarray(img.astype(np.uint8))
    
    print(pytesseract.image_to_string(img))
    

    这个打印出来

    5.78 / C02
    

    编辑: 仅对第二张图像进行阈值处理会返回 11.1。另一个可以提供帮助的步骤是将page segmentation mode 设置为“将图像视为单个文本行”。使用配置--psm 7。在第二张图像上执行此操作会返回 11.1 "202 ',引号来自顶部的部分文本。要忽略这些,您还可以通过配置-c tessedit_char_whitelist=0123456789.% 使用白名单设置要搜索的字符。一切都在一起:

    pytesseract.image_to_string(img, config='--psm 7 -c tessedit_char_whitelist=0123456789.%')
    

    这将返回 11.1 202。显然 pytesseract 很难使用那个百分比符号,我不确定如何通过图像处理或配置更改来改进它。

    【讨论】:

    • 非常感谢您的回答。我尝试了一些预处理,比如阈值,它可能适用于某些人,但不适用于我在消息中包含的其他人。是否有任何可以工作的预处理组合?再次感谢!
    • @AKruger 你用的是哪个版本的? 3个还是4个?
    • 非常感谢!!配置 --psm 7 确实有很大帮助,即使 % 事情我几乎达到 100%,谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多