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

求推荐Python OCR工具及技巧:处理老旧扫描表格生成CSV

处理老旧扫描表格的Python OCR方案与优化技巧

推荐的Python OCR包

  • Tesseract + pytesseract:开源可定制性强,支持自定义字符训练,是处理老旧扫描文档的首选工具
  • EasyOCR:开箱即用,无需复杂配置,对低分辨率、模糊文本的基础识别表现稳定
  • PaddleOCR:自带表格结构识别模块,对中文和数字的鲁棒性出色,适合批量处理表格类扫描件

针对核心问题的处理技巧

1. 数字可读性差导致识别不准确

预处理优化

  • 灰度化:将彩色扫描图转为灰度图,减少干扰:cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  • 自适应阈值二值化:自动区分数字与背景,解决扫描明暗不均问题:cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
  • 降噪:用中值滤波去除扫描斑点:cv2.medianBlur(thresh, 3)
  • 字符增强:通过形态学膨胀操作强化数字边缘:cv2.dilate(blur, cv2.getStructuringElement(cv2.MORPH_RECT, (2,2)), iterations=1)

OCR配置优化

  • 指定字符白名单:限制Tesseract仅识别数字和必要符号,避免误识别:--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789.,
  • 自定义训练:若数字磨损严重,可使用Tesseract训练工具制作专属数字数据集,进一步提升识别精度

2. 表格线被识别为/、(、)等乱码字符

预处理阶段去除表格线

  • 形态学操作消线:创建水平线/垂直线核,通过开运算去除表格线条:
    # 去除水平线
    horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40,1))
    detect_horizontal = cv2.morphologyEx(blur, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
    cnts = cv2.findContours(detect_horizontal, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    for c in cnts:
        cv2.drawContours(img, [c], -1, (255,255,255), 2)
    
  • 使用专业表格OCR:直接调用PaddleOCR的表格识别接口,自动提取表格结构并忽略线条

后处理修正

  • 字符黑名单:在Tesseract配置中屏蔽易误识别的字符:-c tessedit_char_blacklist=()/
  • 正则替换:批量清理识别结果中的乱码字符:re.sub(r'[()/]', '', text)

实操示例代码

import cv2
import pytesseract
import csv
import re

# 读取扫描图片
img = cv2.imread('old_scanned_table.jpg')
# 预处理流程
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
blur = cv2.medianBlur(thresh, 3)

# 去除表格水平线
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40,1))
detect_horizontal = cv2.morphologyEx(blur, cv2.MORPH_OPEN, horizontal_kernel, iterations=2)
cnts = cv2.findContours(detect_horizontal, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
for c in cnts:
    cv2.drawContours(img, [c], -1, (255,255,255), 2)

# OCR识别,配置数字白名单
custom_config = r'--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789.,'
raw_text = pytesseract.image_to_string(img, config=custom_config)
# 后处理清理乱码
clean_text = re.sub(r'[()/]', '', raw_text)

# 转换为CSV格式写入文件
rows = [line.strip().split() for line in clean_text.split('\n') if line.strip()]
with open('digitized_table.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerows(rows)

内容的提问来源于stack exchange,提问作者Aron Kübler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:22:55