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

Python中使用Tesseract识别截图数字的识别错误问题求助

Tesseract数字识别异常:1丢失或误判为4的问题

我编写了一个Python程序,用于识别截图中的数字并将其存入数组。程序整体运行正常,但偶尔出现识别错误:数字1要么无法被识别,要么被误判为4。例如数字100000被识别成00000。我尝试过调整不同的--oem和--psm参数,也使用过彩色截图和黑白截图进行识别,但问题始终存在。

程序代码

import cv2
import pytesseract
import re
import pyautogui
import numpy as np

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def screen():
    screen_for_array = pyautogui.screenshot()         
    screen = np.array(screen_for_array)               
    screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)    
    return screen

def recognize_numbers(image, x, y, w, h):
    roi = image[y:y+h, x:x+w]
    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow('Image', gray)
    cv2.waitKey(0)  
    cv2.destroyAllWindows() 
    
    custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789'
    text = pytesseract.image_to_string(gray, config=custom_config)

    numbers = re.findall(r'\d+', text)
    
    return numbers

image_path = screen()
x, y, w, h = 333, 380, 90, 344
numbers = recognize_numbers(image_path, x, y, w, h)
print("number recognition:", numbers)

识别结果

对应目标截图的识别结果为:

['95000', '97000', '98111', '98123', '99999', '00000', '110000', '120000', '125000', '149990']

该截图为程序识别所用的最终版本图像。

解决建议

  • 强化图像预处理
    • 增加二值化步骤:转灰度后通过阈值处理强化数字与背景的对比度,示例代码:
      _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
      # 或用OTSU自动阈值
      _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
      
    • 降噪处理:用中值模糊或高斯模糊去除图像噪声,避免干扰识别:
      blurred = cv2.medianBlur(gray, 3)
      
  • 调整Tesseract识别配置
    • 尝试不同PSM模式:比如--psm 7(单行文本识别),如果ROI内是多行数字,可逐行分割后用此模式;或--psm 10(单字符识别),配合逐字符区域识别。
    • 优化字符配置:在白名单基础上,添加黑名单排除所有非数字字符,配置改为:
      --oem 3 --psm 6 -c tessedit_char_whitelist=0123456789 -c tessedit_char_blacklist=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+
      
  • 分割多行数字单独识别
    当前ROI包含多行数字,Tesseract可能因行间距或字体问题识别出错。可通过轮廓检测或固定行高将ROI分割为单行数字区域,逐行调用识别函数,提升准确率。
  • 升级或训练自定义模型
    • 升级Tesseract到最新版本,新版本对数字识别的算法有优化。
    • 若场景字体特殊,可收集该字体的数字样本,训练Tesseract自定义字库,针对性优化识别效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:35:58