使用PyAutoGUI实现截图识别文字并自动输入的问题求助
截屏取字并自动输入程序修复与优化
核心问题排查
你的代码存在几个致命错误,导致Tesseract无法正常识别图片:
- Tesseract路径配置错误:你把
path_to_tesseract赋值为截图的数组对象,实际需指定Tesseract可执行文件的本地路径。 - 图片路径为空:
path_to_image是空字符串,程序找不到要识别的截图文件,需指向你保存的image1.png。 - 冗余的图片转换:截屏后无需转成OpenCV格式再保存,直接用PIL处理更简洁,还能避免格式兼容问题。
修正后的完整代码
from pynput.keyboard import Controller import time import pyautogui from PIL import Image, ImageOps from pytesseract import pytesseract # 初始化键盘控制器 keyboard = Controller() # 预留2秒切换到目标窗口 time.sleep(2) # 1. 截取指定区域屏幕 screenshot = pyautogui.screenshot(region=(0, 400, 800, 100)) # 2. 图片预处理(提升Tesseract识别率) # 转灰度图 gray_img = ImageOps.grayscale(screenshot) # 二值化(强化文字与背景对比度) threshold_img = gray_img.point(lambda x: 0 if x < 127 else 255, '1') # 3. 配置Tesseract路径 # Windows示例路径,根据实际安装位置修改 pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Linux/macOS若已加入系统PATH,直接写 'tesseract' 即可 # pytesseract.tesseract_cmd = 'tesseract' # 4. 提取图片文字 extracted_text = pytesseract.image_to_string(threshold_img).strip() print("提取到的文字:", extracted_text) # 5. 自动输入提取的文字 if extracted_text: for char in extracted_text: keyboard.press(char) keyboard.release(char) time.sleep(0.01)
关键优化说明
- 图片预处理:转灰度+二值化能大幅提升文字识别准确率,尤其适合背景复杂的截图。
- 直接处理截屏对象:无需保存图片到磁盘,直接将PIL格式的截屏传给Tesseract,减少IO操作,提高效率。
- 路径配置:务必根据操作系统和Tesseract安装位置修改路径,Windows默认路径为
C:\Program Files\Tesseract-OCR\tesseract.exe;Linux/macOS需先通过包管理器安装(如sudo apt install tesseract-ocr)。 - 输入逻辑优化:加入空值判断,避免提取不到文字时执行无效输入操作。
内容的提问来源于stack exchange,提问作者24bit
相关产品推荐
相关产品推荐

