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

使用OCR及pytesseract识别图片数字出错的解决咨询

问题描述

尝试识别下图(currentbid.png:显示98.7M的数字图片)中的数字,但识别结果总是出现字母或错误数字。比如图片实际是98.7M,识别结果却是19 9947 )M。已经试过用Tesseract做灰度转换、反转等处理,都没效果,推测是小数点影响了识别,但无法移除小数点或修改字体。想知道怎么解决这个问题,或者怎么训练模型?

当前使用的代码如下:

pyautogui.screenshot("bidpossible.png", region=(900, 310, 450, 60)) #bidpossible
originalImage = cv2.imread('bidpossible.png')

grayImage = cv2.cvtColor(originalImage, cv2.COLOR_BGR2GRAY)

(_, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY_INV)

custom_config = r'--psm 8'

text = pytesseract.image_to_string(blackAndWhiteImage, config=custom_config)
print('Extracted Text: ', text)

一、优化图像预处理

  • 用自适应阈值替代固定阈值:固定阈值127无法适配图像局部明暗差异,改用自适应阈值能更精准分割字符与背景:
    blackAndWhiteImage = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    
  • 添加形态学操作去噪:通过闭运算消除小数点周围的干扰像素,让字符边缘更清晰:
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    blackAndWhiteImage = cv2.morphologyEx(blackAndWhiteImage, cv2.MORPH_CLOSE, kernel)
    

二、调整Tesseract识别配置

  • 限定识别字符集:只允许识别数字、小数点和字母M,缩小识别范围,减少错误匹配:
    custom_config = r'--psm 8 -c tessedit_char_whitelist=0123456789.M'
    
  • 切换PSM模式:--psm 8是单字符识别模式,换成--psm 7(将图像视为单行文本)更适配当前数字加单位的格式:
    custom_config = r'--psm 7 -c tessedit_char_whitelist=0123456789.M'
    

三、训练自定义Tesseract模型(上述方法无效时)

  • 准备训练样本:收集足够多同字体的数字、小数点图像,生成.tif格式文件,并为每个样本创建.box标注文件(标注每个字符的位置和内容)。
  • 生成训练数据集:使用Tesseract的tesstrain.sh工具,将样本转换为.lstmf格式的训练文件。
  • 微调模型:基于官方基础模型(如eng.traineddata)进行训练,生成自定义的.traineddata模型文件。
  • 调用自定义模型:在代码中指定使用自己训练的模型:
    text = pytesseract.image_to_string(blackAndWhiteImage, lang='custom_model', config=custom_config)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:37:19