You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化pytesseract提升小尺寸屏幕截图数字识别准确率?

小尺寸数字区域OCR识别精度优化方案

问题描述

现有脚本用于截取屏幕上仅含数字的区域,当前配置能实现90%以上识别准确率,但因目标图像尺寸过小,仍存在数字识别错误(例如数字568识别出错),需优化配置提升精度。

原始图像

原始数字图像

阈值处理后图像

阈值处理后的数字图像

错误示例(数字568识别错误)

数字568识别错误示例

现有代码

def text_from_region(region):
    """截取指定区域的数字文本并返回整数结果"""
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

    img = ImageGrab.grab(bbox=(region))
    img = np.array(img)
    img = cv2.cvtColor(src=img, code=cv2.COLOR_RGB2BGR)
    
    gray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)
    _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

    config = '--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789'
    text = pytesseract.image_to_string(thresh, config=config)

    return int(text)

精度提升优化方案

1. 图像放大预处理

小尺寸图像是识别错误的核心原因,先对图像进行插值放大,保留数字边缘细节:

# 在灰度化步骤后添加放大操作
gray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)
# 用INTER_CUBIC插值放大2-4倍(根据实际尺寸调整)
scale_factor = 3
gray = cv2.resize(gray, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_CUBIC)

2. 调整Tesseract核心参数

  • 替换--psm 10为--psm 8:PSM 8适配连续数字的词级识别(原PSM 10为单字符识别,不适用于多数字组合)
  • 切换LSTM引擎:使用--oem 1替代--oem 3,LSTM对小字体、模糊字体的识别效果更优
  • 添加置信度过滤:强制输出高置信度结果,减少误识别
    优化后的配置:
config = '--psm 8 --oem 1 -c tessedit_char_whitelist=0123456789 -c min_char_confidence=80'

3. 图像后处理降噪

针对阈值处理后的图像,添加形态学操作消除微小噪点、优化数字边缘:

_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
# 定义小型结构元素,闭合数字边缘缝隙、消除噪点
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

4. 自定义字体训练(进阶方案)

如果上述优化仍有错误,可针对目标数字的字体制作专属训练样本,生成Tesseract自定义语言包,大幅提升特定字体的识别精度。


内容的提问来源于stack exchange,提问作者Collaxd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:40:53