寻求Python从发票图片提取表格信息方案及bitnot错误解决
问题解决与优化建议
1. 修复当前报错
错误原因
bitnot变量未定义:原教程中该变量是对原始图像做反色处理后的结果,你的代码遗漏了这部分预处理步骤。- 变量名错误:代码中
side2+h的h应为height(前面解构的变量是height,不是h)。
修正后的完整代码片段
import cv2 import numpy as np import pytesseract import pandas as pd # --- 新增预处理步骤 --- # 替换为你的发票图片路径 img = cv2.imread("invoice_image.jpg") # 转灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 反色处理(生成bitnot变量) bitnot = cv2.bitwise_not(gray) # --------------------- extract = [] for i in range(len(order)): for j in range(len(order[i])): inside = '' if len(order[i][j]) == 0: extract.append(' ') else: for k in range(len(order[i][j])): # 解构坐标与尺寸 side1, side2, width, height = order[i][j][k][0], order[i][j][k][1], order[i][j][k][2], order[i][j][k][3] # 修正h为height final_extract = bitnot[side2:side2+height, side1:side1+width] # 后续预处理与OCR final_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 1)) get_border = cv2.copyMakeBorder(final_extract, 2, 2, 2, 2, cv2.BORDER_CONSTANT, value=[255,255]) resize = cv2.resize(get_border, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) dil = cv2.dilate(resize, final_kernel, iterations=1) ero = cv2.erode(dil, final_kernel, iterations=2) # 优化OCR配置(中文发票添加lang参数) ocr = pytesseract.image_to_string(ero, lang='chi_sim') if len(ocr) == 0: ocr = pytesseract.image_to_string(ero, config='--psm 6', lang='chi_sim') inside += " " + ocr extract.append(inside) # 导出结果 a = np.array(extract) dataset = pd.DataFrame(a.reshape(len(hor), total)) dataset.to_excel("output1.xlsx", index=False)
2. 针对发票表格提取的优化建议
- 预处理增强:如果发票有噪点或倾斜,可在转灰度后添加降噪和矫正:
# 高斯降噪 blur = cv2.GaussianBlur(gray, (3,3), 0) # 阈值二值化(替代反色,根据图像调整阈值) _, thresh = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 替换bitnot为thresh即可 - 单元格坐标校验:确保
order变量存储的是准确的单元格左上角坐标、宽高,若存在合并单元格,需在之前的线条检测步骤中单独处理。 - ML替代方案:如果OpenCV+Tesseract效果不佳,推荐使用LayoutLM系列模型(Hugging Face提供预训练权重),专门针对文档布局理解,能更精准提取表格结构与内容;或使用
pytesseract的表格模式:# Tesseract表格提取(需Tesseract 4.0+) ocr_table = pytesseract.image_to_data(bitnot, output_type=pytesseract.Output.DATAFRAME)
内容的提问来源于stack exchange,提问作者Mr Micawber
相关产品推荐
相关产品推荐

