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

PyTesseract识别数字8时误判为3的问题应如何修复?

纯数字OCR 8误识别为3修复方案

示例问题图片:示例图片

问题原因

  • 当前仅对图片做了灰度转换,未做二值化分割,数字8的上下闭合区域对比度不足时会被识别为有缺口的3
  • 缩放时使用的ANTIALIAS插值会模糊数字边缘,进一步加剧闭合区域的识别误差
  • Tesseract配置冗余,多语言包增加了识别干扰
  • 你之前尝试的锐化方案会放大边缘噪点,所以会导致其他数字识别效果下降,改用二值化方案不会出现该问题

修复步骤

1. 优化图片预处理逻辑

将原有仅转灰度的逻辑替换为二值化处理,彻底分割数字与背景,避免8的边缘模糊:

# 替换原有 im_s_1 = imgURL_GP.convert("L") 代码段
im_gray = imgURL_GP.convert("L")
# 阈值可根据实际图片亮度在110-140区间微调
threshold = 127
im_s_1 = im_gray.point(lambda p: 255 if p > threshold else 0)

如果可以引入OpenCV依赖,自适应二值化可适配不同亮度的图片,效果更稳定:

import cv2
import numpy as np

im_gray = imgURL_GP.convert("L")
cv_gray = np.array(im_gray)
im_s_1 = cv2.adaptiveThreshold(cv_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

2. 调整缩放插值逻辑

替换原有ANTIALIAS插值为BILINEAR,避免缩放时过度模糊数字边缘:

# 替换原有resize代码段
imgURL_GP = imgURL_GP.resize((800, int(800/(width/height))), Image.BILINEAR)

3. 精简Tesseract识别配置

去掉冗余的多语言参数,新增纯数字白名单限制,减少识别干扰:

# 替换原有custom_config与image_to_string代码段
custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789 outputbase digits'
query = pytesseract.image_to_string(im_s_1, nice=1, config=custom_config)

附加兜底逻辑

如果仍有零星误判,可根据业务场景增加简单校验规则,比如余额字段通常不会出现不符合数值规则的单个3,可结合字符位置的像素分布做二次校验替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:30:03