PyTesseract识别图片小数失败,返回空串或随机数字求助
数字识别问题修复方案
问题分析
当前的HSV阈值分割未准确提取数字区域,加上预处理步骤不够精准,导致Tesseract无法有效识别目标数字,出现空结果或随机误识别。
优化后的代码
import cv2 import numpy as np import pytesseract # 提前配置Tesseract路径(确认路径与本地安装目录一致) pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" # 读取图片,先校验路径有效性 img = cv2.imread("screenshot.png") if img is None: print("图片读取失败,请检查文件路径") exit() # 替换HSV转为灰度图——更适配文字识别场景 gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 用自适应阈值分割,应对局部明暗不均的情况 thr = cv2.adaptiveThreshold( gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2 ) # 放大图片,强化数字特征 thr = cv2.resize(thr, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) # 形态学闭运算,消除小噪声并让数字边缘更连贯 kernel = np.ones((2, 2), np.uint8) thr = cv2.morphologyEx(thr, cv2.MORPH_CLOSE, kernel) # 调整Tesseract配置:--psm 7适配单行数字识别,digits限定识别范围 txt = pytesseract.image_to_string(thr, config="--psm 7 digits") # 清理结果中的空白字符 txt = txt.strip() print("识别结果:", txt)
关键优化说明
- 替换色彩空间:灰度图比HSV更适合文字识别,避免阈值设置偏差导致的区域漏选
- 自适应阈值:相比固定阈值,能自动适配图片局部明暗差异,精准分离数字与背景
- 形态学操作:消除干扰噪声,强化数字边缘完整性,降低识别误判概率
- 调整识别模式:
--psm 7专门针对单行文本识别,比--psm 6的全局识别更精准
内容的提问来源于stack exchange,提问作者Diego Cândido
相关产品推荐
相关产品推荐

