python - Pytesseract 不接受 pyautogui 屏幕截图、Windows、Python 3.6

标签 python screenshot tesseract pyautogui pytesser

我想做的是使用 pyautogui 制作数字的屏幕截图,并使用 pytesseract 将数字转换为字符串。代码: 导入 pyautogui 导入时间 导入PIL 从 PIL 导入图像 导入pytesseract

pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)//Tesseract-OCR//tesseract'

# Create image
time.sleep(5)
image = pyautogui.screenshot('projects/output.png', region=(1608, 314, 57, 41))

# Resize image
basewidth = 2000
img = Image.open('projects/output.png')
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), PIL.Image.ANTIALIAS)
img.save('projects/output.png')

col = Image.open('projects/output.png')
gray = col.convert('L')
bw = gray.point(lambda x: 0 if x<128 else 255, '1')
bw.save('projects/output.png')

# Image to string
screen = Image.open('projects/output.png')

print(pytesseract.image_to_string(screen, config='tessedit_char_whitelist=0123456789'))

现在看来 pytesseract 不接受 pyautogui 创建的屏幕截图。该代码运行良好,没有问题,但打印出一个空字符串。但是,如果我在 Paint 中创建图像,并将其作为“output.png”保存到正确的文件夹中,就像其他方式制作的屏幕截图一样,它确实可以工作。

Image output after resize and adjustments

有人知道我遗漏了什么吗?

最佳答案

修改路径并尝试以下操作:

import numpy as np
from numpy import *
from PIL import Image
from PIL import *
import pytesseract
import cv2


src_path = "C:\\Users\\USERNAME\\Documents\\OCR\\"

def get_region(box):
    #Grabs the region of the box coordinates
    im = ImageGrab.grab(box)
    #Change size of image to 200% of the original size
    a, b, c, d = box
    doubleX = (c - a) * 2
    doubleY = (d - b) * 2
    im.resize((doubleX, doubleY)).save(os.getcwd() + "\\test.png", 'PNG')

def get_string(img_path):
    # Read image with opencv
    img = cv2.imread(img_path)
    # Convert to gray
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # Apply dilation and erosion to remove some noise
    kernel = np.ones((1, 1), np.uint8)
    img = cv2.dilate(img, kernel, iterations=1)
    img = cv2.erode(img, kernel, iterations=1)
    # Write image after removed noise
    cv2.imwrite(src_path + "removed_noise.png", img)
    #  Apply threshold to get image with only black and white
    #img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
    # Write the image after apply opencv to do some ...
    cv2.imwrite(src_path + "thres.png", img)
    # Recognize text with tesseract for python

    result = pytesseract.image_to_string(Image.open(src_path + "thres.png"))

    return result

def main():
    #Grab the region of the screenshot (box area)
    region = (1354,630,1433,648)
    get_region(region)

    #Output results
    print ("OCR Output: ")
    print (get_string(src_path + "test.png"))

关于python - Pytesseract 不接受 pyautogui 屏幕截图、Windows、Python 3.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910609/

相关文章:

python - 从 pandas 数据框中删除或清空所有数据

c++ - 保存 wxWidgets 窗口截图

java - 没有安装 Tesseract 的 Apache Tika OCR

android - 创建针对 OCR 优化/适用的相机 Activity

ios - 使用 tesseract 识别车牌

python - 在 CentOS 上运行 Python 脚本作为后台任务

python - 带 Altair 的简单线图

python - 在 virtualenv 中更改已安装的 Python 模块

ios - AVPlayer 播放 m3u8 流时如何捕获图像?

带有 OpenGL : how to grab a valid screenshot? 的 Qt MDI 应用程序