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

Pytesseract OCR将字母o误识别为数字0的问题求助

解决pytesseract将字母o误识别为数字0的问题
  • 调整图像预处理参数
    当前自适应阈值的参数可能让字母o和数字0的轮廓特征过于相似,可尝试改用高斯自适应阈值并调整参数:

    image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                  cv2.THRESH_BINARY_INV, 11, 10)
    

    高斯阈值能更好处理局部对比度差异,强化字母o的内部空白轮廓,和数字0形成更明显区分。

  • 修正并优化Tesseract配置

    1. 先修正字符白名单的拼写错误:你当前白名单里把字母j写成了ig,正确白名单应为abcdefghijklmnopqrstuvwxyz0123456789,拼写错误可能干扰识别逻辑。
    2. 基于字符置信度做针对性替换:通过image_to_data获取每个字符的置信度和尺寸信息,对首字符的0/o做判断替换:
      import pytesseract
      from pytesseract import Output
      
      custom_config = r'--oem 3 --psm 7 -l eng -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz0123456789'
      data = pytesseract.image_to_data(image, config=custom_config, output_type=Output.DICT)
      
      text = ""
      for i in range(len(data['text'])):
          conf = int(data['conf'][i])
          char = data['text'][i]
          if conf > 60:
              # 首字符若识别为0,且宽度比后续数字窄,判定为字母o
              if i == 0 and char == '0' and data['width'][i] < data['width'][1]:
                  text += 'o'
              else:
                  text += char
      print(text)
      
  • 添加图像形态学后处理
    对阈值处理后的图像做开运算,强化字符轮廓、去除噪声:

    import numpy as np
    
    kernel = np.ones((2,2), np.uint8)
    image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:34:55