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

pytesseract无法识别指定数字,错误输出“ones”该如何排查解决?

问题原因

识别错误的核心是Tesseract默认未限制字符识别范围,你裁剪的数字字体中,1易被识别为字母o/n,5易被识别为字母s,因此输出了错误结果ones。

解决方法

  • 第一步:增加识别字符限制,调整识别模式
    调用image_to_string时传入config参数,限制仅识别数字,同时指定单文本块识别模式适配裁剪后的小尺寸数字图,修改后的识别代码如下:

    Check_Price = pytesseract.image_to_string(Image.open('Price.png'), lang='eng', config='--psm 8 --oem 3 -c tessedit_char_whitelist=0123456789')
    

    参数说明:

    • --psm 8 表示将输入图像视为单个单词,适配短数字识别场景
    • tessedit_char_whitelist=0123456789 直接限制Tesseract仅返回数字结果,彻底排除字母识别干扰
  • 第二步(识别率仍低时使用):增加图像预处理步骤
    裁剪后的图像如果尺寸过小、对比度低,也会影响识别效果,可以增加灰度转换、二值化、放大等预处理操作:

    import cv2
    import numpy as np
    
    # 读取裁剪后的图像
    img = cv2.imread('Price.png')
    # 转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 二值化处理,增强数字和背景的对比度
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    # 放大2倍,适配Tesseract的识别精度要求
    thresh = cv2.resize(thresh, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
    # 传入处理后的图像进行识别
    Check_Price = pytesseract.image_to_string(thresh, lang='eng', config='--psm 8 --oem 3 -c tessedit_char_whitelist=0123456789')
    
  • 第三步:调整裁剪范围
    确认当前裁剪参数是否完整保留了数字的全部边缘,可适当将left调小2-3像素、right调大2-3像素,避免数字边缘被裁剪导致识别出错。

以上步骤按顺序尝试即可,绝大多数场景仅需第一步就能解决识别错误问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:36:02