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

使用OpenCV与PyTesseract识别文档数字准确率低的优化咨询

问题解答

识别率不足75%是否正常?

不正常。针对纯数字场景的OCR,经过合理的图像预处理和参数调整后,识别率应该能达到95%以上,甚至接近100%。当前的低识别率主要是因为图像预处理步骤没有有效消除噪声、增强数字特征,导致PyTesseract无法准确识别。

提升识别成功率的方法

1. 优化二值化策略

固定阈值二值化容易受光照和噪声影响,改用自适应二值化或Otsu自动阈值二值化,能更精准分离数字和背景:

  • 自适应高斯二值化代码:
    import cv2
    import numpy as np
    
    img_raw = cv2.imread("temp.jpg")
    img_gray = cv2.cvtColor(img_raw, cv2.COLOR_BGR2GRAY)
    # 自适应阈值二值化,高斯加权计算局部阈值
    img_thresh = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    
  • Otsu自动阈值二值化代码:
    _, img_otsu = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    

2. 形态学操作消除噪声

通过开运算去除数字周围的小噪声,闭运算填充数字内部的空隙,让数字边缘更规整:

# 创建3x3矩形结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 开运算:先腐蚀后膨胀,去除白色小噪声
img_cleaned = cv2.morphologyEx(img_thresh, cv2.MORPH_OPEN, kernel)
# 闭运算:先膨胀后腐蚀,填充数字内部的黑色小空隙
img_cleaned = cv2.morphologyEx(img_cleaned, cv2.MORPH_CLOSE, kernel)

3. 配置PyTesseract专属识别参数

针对纯数字场景,限制识别字符范围、调整页面分割模式,减少干扰:

import pytesseract

# 配置参数:oem3使用默认OCR引擎,psm6假设图像为单一文本块,whitelist只允许数字
custom_config = r'--oem 3 --psm 6 -c tessedit_char_whitelist=0123456789'
# 对预处理后的图像进行识别
result = pytesseract.image_to_string(img_cleaned, config=custom_config)

如果数字是分散排列的,可将--psm 6改为--psm 11(允许识别任意位置的文本)。

4. 增强图像对比度

通过CLAHE(限制对比度自适应直方图均衡化)增强数字与背景的差异,避免过度增强噪声:

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
img_enhanced = clahe.apply(img_gray)

5. 优化PDF转图像的参数

当前600DPI的分辨率足够,可尝试保存为PNG无损格式替代JPG,避免压缩带来的额外噪声:

first_page[0].save(TEMP_FOLDER+'temp.png', 'PNG')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:21