Pytesseract识别截图文本后半段频繁乱码出错问题求助
识别异常根因
- 缺少图像预处理步骤:原始截图直接送入识别模型,文本区域对比度不足、存在轻微噪点/模糊的情况下,后半段低辨识度文本很容易被识别为乱码
- 未配置Tesseract识别规则:默认识别模式会匹配所有语言字符、特殊符号,你场景仅需要识别英文和基础标点,无限制的识别范围会引入大量无效干扰结果
- 固定截图范围兼容性差:写死的bbox参数在页面缩放、分辨率变化、滚动偏移的场景下,可能出现后半段文本被截断、不在清晰识别区域的问题
修复方案
你可以直接使用优化后的代码,核心新增了图像预处理、识别规则限制两个模块:
import time import keyboard import pytesseract from pytesseract import image_to_string from PIL import Image, ImageGrab import cv2 import numpy as np pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' # 1. 截图并预处理 img = ImageGrab.grab(bbox=(412,563,1054, 701)) # 转灰度图 img_gray = img.convert('L') # 二值化处理,调整阈值适配你的截图文本颜色,这里假设深色文本浅色背景 threshold = 150 img_binary = img_gray.point(lambda x: 0 if x < threshold else 255, '1') # 可选:保存预处理后的图方便调试 img_binary.save('processed_text.png') # 2. 配置识别规则:限定识别单块文本,仅识别英文字母、空格和常用标点 custom_config = r'--psm 6 -c tessedit_char_whitelist="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ .,!?\'"' text = image_to_string(img_binary, config=custom_config) # 3. 文本清洗 text = text.replace('\n',' ').strip() # 去掉已知的开头异常B if text.startswith('B '): text = text[2:] print(text) # 打字逻辑 time.sleep(1) keyboard.write(text)
优化点说明
- 灰度+二值化处理后,文本和背景对比度大幅提升,Tesseract识别准确率会明显提高,如果识别效果仍不佳可以调整threshold参数的数值(取值范围0-255)
- 新增的识别配置里
--psm 6指定Tesseract按单块统一文本处理,白名单配置过滤了所有不需要的特殊符号,避免乱码输出 - 增加了开头异常B的自动清除逻辑,不需要手动处理
你提供的识别异常截图样例如下:
内容的提问来源于stack exchange,提问作者History Project
相关产品推荐
相关产品推荐

