【问题标题】:Why can't tesseract extract text that has a black background?为什么 tesseract 不能提取具有黑色背景的文本?
【发布时间】:2021-06-03 22:38:29
【问题描述】:

我附上了一个非常简单的文本图像,我想从中获取文本。它是黑色背景的白色。在肉眼看来,它似乎绝对清晰易读,但显然对它进行镶嵌是垃圾。我尝试更改 oem 和 psm 参数,但似乎没有任何效果。请注意,这适用于除此之外的其他图像。

请尝试在您的机器上运行它,看看它是否有效。否则我可能不得不完全改变我的 ocr 引擎。

注意:在我尝试在图像周围添加黑色像素以帮助提取过程之前,它一直在工作。另外我不认为 tesseract 是在白色背景上的黑色文本上训练的。它也应该能够做到这一点。此外,如果这是真的,为什么它适用于与此格式相同的其他文本图像

编辑:奇迹般地,我再次尝试运行脚本,这次它能够正确提取 Chand,但在下面提到的情况下失败了。另请查看我使用的参数。我已经阅读了文档,我觉得这将是正确的选择。我已添加图片供您参考。这不仅仅是这张图片。为什么 tesseract 对于如此简单的用例会失败?

【问题讨论】:

标签: python opencv ocr python-tesseract


【解决方案1】:

要找到想要的结果,你需要知道以下几点:

输入图像是粗体,我们需要缩小粗体,然后假设输出为单个统一的文本块。

要缩小图像,我们可以使用erosion

结果将是:

Erode Result
CHAND
BAKLIWAL

代码:


# Load the library
import cv2
import pytesseract

# Initialize the list
img_lst = ["lKpdZ.png", "ZbDao.png"]

# For each image name in the list
for name in img_lst:

    # Load the image
    img = cv2.imread(name)

    # Convert to gry-scale
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # Erode the image
    erd = cv2.erode(gry, None, iterations=2)

    # OCR with assuming the image as a single uniform block of text
    txt = pytesseract.image_to_string(erd, config="--psm 6")
    print(txt)

【讨论】:

  • 我用的是同一个版本
  • 您是否将页面分段模式设置为6?
  • 是的。我也附上了截图
  • 嘿!现在它正在工作。但是我没有腐蚀,而是在图像上使用了 open cv 的反转。这基本上将图像转换为白色背景上的黑色文本。
  • 你用的是bitwise_not还是THRESH_BINARY_INV
猜你喜欢
  • 2019-10-16
  • 2012-11-28
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多