Tesseract OCR 无法识别简单数字

问题描述 投票:0回答:1

我对 Python 相当陌生,但已经遇到了困难。 我正在尝试对非常简单的数字使用 OCR。它们会弹出在屏幕上,并且应该由 OCR 读取,然后将它们粘贴到 cvs 文件中。除了 OCR 之外,一切正常。

它有时确实有效,但如果您查看两张图片,其中一个数字会被检测到,而另一个则不会。难道我做错了什么?有人知道如何改进它吗?我可以在我的项目中使用其他东西来代替 OCR 图像识别吗?

number can't get recognized

number can get recognized

这是我的代码:

import pytesseract
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

screenshot = Image.open("test_image.png")

text = pytesseract.image_to_string(screenshot)

print("Recognized Text:", text)

  • 顺便说一句,我使用了 tesseract 可执行文件的完整路径,因为否则它似乎无法在任何地方找到它。

  • 图像格式为PNG

我尝试调整大小、更改字体、建立高对比度并尝试降低对比度。在许多不同的示例中尝试过,每个示例的得分不一致。

导致无法工作或工作不一致。

python ocr tesseract
1个回答
0
投票

确实看到 PSM 评论。

您还必须处理二值化。 你的图像是黑底白字。默认二值化预计为白底黑字。

pytesseract.image_to_string(255-np.asarray(screenshot)[...,0], config='--psm 8').strip()

应该可以正常工作

np.asarray(screenshot)
以数组的形式获取图像。

由于你的图像是RGB(甚至RGBA),我们想先将其变成灰度。这就是

np.asarray(screenshot)[...,0]
的作用(即仅获得红色级别。也适用于绿色和蓝色,即
...,1
...,2
。只是,不要使用
...,3
,这是 alpha 通道,因为都是255。 对于更多彩色图像,将彩色图像转换为可见的黑白图像可能会比较困难。但在这里,这并不重要。您的图像显然是由 (0,0,0,255) 黑色和 (255,255,255,255) 白色组成。

然后,我们需要将其转为白底黑字,即反转值:

255-np.asarray(screenshot)[...,0]

并且您可以传递给 tesseract。确实使用正确的 psm。在这里

8
选择一个需要单个单词的 psm。

.strip()
删除控制字符。

© www.soinside.com 2019 - 2024. All rights reserved.