PyTesseract运行教程代码正常但自定义相似代码OCR识别出错求助
故障原因排查
- PSM分页模式配置错误
你自行添加了config='--psm 7'参数,该参数会强制Tesseract将整张图像识别为单一整行文本,完全不适合桌面截图这种存在多分散文本区域的场景。教程代码使用默认的自动页面分割模式,这是识别结果差异的最核心原因。建议移除该参数,或替换为--psm 11(稀疏文本检索模式)适配全局找词的需求。 - 遍历逻辑错误
你在循环第一次迭代时就判断"Description" not in results["text"],没匹配到就直接退出程序。但results["text"]是所有识别块的文本列表,应该遍历完全部结果再判断是否存在匹配项,单次遍历就终止的逻辑完全不符合需求。 - 置信度判断逻辑错误
Tesseract返回的conf置信度是0-100范围的整数,不是0-1的小数。你写的conf < 0.2相当于几乎没有过滤效果,且注释写的“小于0.7就跳过”和代码逻辑完全不符,建议调整为conf < 70这类符合数值范围的判断条件。 - 变量引用错误
最后打印坐标时用的x、y、width、height没有定义,你之前定义的对应变量是Desc_x、Desc_y、Desc_w、Desc_h,运行到此处会直接抛出变量未定义报错。 - 可选优化:高分辨率桌面截图可提前做灰度化、二值化、对比度增强处理,能进一步提升识别准确率。如果识别内容包含中文,需要添加
lang='chi_sim'参数并确保安装了对应语言包。
修复后参考代码
import pyautogui import cv2 import pytesseract from pytesseract import Output # 截图并读取 pyautogui.screenshot('screenshotOfDesktop.png') readDesktop_SAP = cv2.imread('screenshotOfDesktop.png') rgb = cv2.cvtColor(readDesktop_SAP, cv2.COLOR_BGR2RGB) # 移除错误的psm 7配置,使用默认分页模式 results = pytesseract.image_to_data(rgb, output_type=Output.DICT) found_desc = False # 遍历所有识别结果 for i in range(len(results["text"])): text = results["text"][i].strip() conf = int(results["conf"][i]) # 匹配关键词+置信度过滤 if "Description" in text and conf >= 70: found_desc = True Desc_x = results["left"][i] Desc_y = results["top"][i] Desc_w = results["width"][i] Desc_h = results["height"][i] print("Found 'Description' on screen! ") print("The coordinates are: ") print(Desc_x, Desc_y, Desc_w, Desc_h) print(f"Confidence = {conf}") if not found_desc: print("Didn't find description on screen. Please check that the SAP 'find document' page is open on the screen. ") input('Press ENTER to exit now. ') exit()
内容的提问来源于stack exchange,提问作者MontX
相关产品推荐
相关产品推荐

