我对 Python 相当陌生,但已经遇到了困难。 我正在尝试对非常简单的数字使用 OCR。它们会弹出在屏幕上,并且应该由 OCR 读取,然后将它们粘贴到 cvs 文件中。除了 OCR 之外,一切正常。
它有时确实有效,但如果您查看两张图片,其中一个数字会被检测到,而另一个则不会。难道我做错了什么?有人知道如何改进它吗?我可以在我的项目中使用其他东西来代替 OCR 图像识别吗?
这是我的代码:
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
我尝试调整大小、更改字体、建立高对比度并尝试降低对比度。在许多不同的示例中尝试过,每个示例的得分不一致。
导致无法工作或工作不一致。
确实看到 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()
删除控制字符。