Python - 使用 Pytesseract 读取图像中的数字

Bra*_*don 4 python

我使用 pyautogui 和 pytesseract 的组合来捕获屏幕上的小区域,然后将数字/文本拉出该区域。我编写的脚本可以完美地读取大多数捕获的图像,但个位数似乎会导致问题。例如,包含数字的图像的小区域被保存到 .png 文件中,数字 11、14 和 18 被完美地拉出,但数字 7 只是作为一个空字符串返回。

问题: 什么可能导致这种情况发生?

代码:大幅缩减以使其易于遵循:

def get_text(image):
    return pytesseract.image_to_string(image)

answer2 = pyautogui.screenshot('answer2.png',region=(727, 566, 62, 48))
img = Image.open('answer2.png')
answer2 = get_text(img)
Run Code Online (Sandbox Code Playgroud)

此代码重复 4 次,每个图像一次,它适用于 11、14、18,但不适用于 7。

只是为了减慢这里读取的文件的速度,这里是通过屏幕截图命令保存图像后的屏幕截图。

https://gyazo.com/0acbf5be2d970abeb29561113c171fbe

这是我正在工作的屏幕截图:

https://gyazo.com/311913217a1302382b700b07ad3e3439

fur*_*ras 6

我发现问题为什么 pytesseract 不能识别单个数字?在评论中我找到了 option --psm 6

我检查tesseract了选项--psm 6,它可以识别图像上的单个数字。

tesseract --psm 6 number-7.jpg result.txt
Run Code Online (Sandbox Code Playgroud)

我检查pytesseract.image_to_string()了选项config='--psm 6',它也可以识别图像上的单个数字。

#!/usr/bin/env python3

from PIL import Image
import pytesseract

img = Image.open('number-7.jpg')

print(pytesseract.image_to_string(img, config='--psm 6'))
Run Code Online (Sandbox Code Playgroud)