Python读取成绩单图像不清晰,OCR及表格提取失效如何解决?
提升成绩单图像OCR与表格提取效果的解决方案
这个问题完全可以解决,核心问题出在原始图像模糊导致OCR识别准确率低下,结合图像预处理、OCR参数优化和表格提取配置调整就能有效改善效果。
1. 先做图像预处理,修复模糊问题
模糊的图像是OCR识别无效内容的主要原因,通过OpenCV对图像做增强处理,提升文字清晰度:
import cv2 import numpy as np # 读取原始图像 img = cv2.imread('1.jpeg') # 灰度化:减少色彩干扰 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯降噪:去除图像噪点 blur = cv2.GaussianBlur(gray, (5,5), 0) # 自适应阈值二值化:增强文字与背景的对比度 thresh = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 图像锐化:强化文字边缘 kernel = np.array([[0,-1,0], [-1,5,-1], [0,-1,0]]) sharpened = cv2.filter2D(thresh, -1, kernel) # 保存处理后的图像 cv2.imwrite('processed_1.jpeg', sharpened)
处理后的图像会大幅提升文字辨识度,为后续OCR和表格提取打下基础。
2. 优化Tesseract OCR参数
语言参数修正
如果你的成绩单是中文(或中英文混合),必须修改lang参数,默认的eng无法识别中文内容:
from img2table.ocr import TesseractOCR # 中英文混合识别用'chi_sim+eng',纯中文用'chi_sim' ocr = TesseractOCR(lang='chi_sim+eng', psm=6, oem=3)
关键参数解释
psm=6:告诉Tesseract将图像视为单一均匀文本块,适合表格类结构化内容的识别oem=3:使用混合引擎(传统引擎+LSTM引擎),平衡识别速度与准确率- 注意:需确保Tesseract已安装对应语言包(比如中文语言包需单独下载安装)
3. 调整表格提取配置
img2table的extract_tables方法支持多个参数优化表格识别,针对无框表格、低清晰度场景做调整:
from img2table.document import Image # 使用预处理后的图像 img = Image(src='processed_1.jpeg') # 提取表格时设置置信度阈值,允许识别无框表格 img_tables = img.extract_tables(ocr=ocr, min_confidence=50, borderless_tables=True) # 导出到Excel img.to_xlsx("test.xlsx", ocr=ocr)
min_confidence=50:过滤置信度低于50%的表格区域,减少无效内容borderless_tables=True:如果你的成绩单是无框表格,开启此参数能提升识别率
4. 备选方案:换用更适合中文的OCR引擎
如果Tesseract效果仍不理想,可以尝试PaddleOCR,它对中文和表格结构的支持更优:
from img2table.ocr import PaddleOCR from img2table.document import Image # 初始化PaddleOCR,支持中文识别 ocr = PaddleOCR(lang='ch') # 使用预处理后的图像 img = Image(src='processed_1.jpeg') img_tables = img.extract_tables(ocr=ocr) img.to_xlsx("test_paddle.xlsx", ocr=ocr)
内容的提问来源于stack exchange,提问作者Siddharth Goyal
相关产品推荐
相关产品推荐

