logo

Python批量识别增值税发票并导出表格(exe版)

作者:很菜不狗2025.09.19 10:40浏览量:0

简介:本文介绍如何使用Python实现增值税发票批量识别,并将结果导出为Excel表格,最终打包成exe可执行文件,方便非技术人员使用。

Python批量识别增值税发票并导出表格(exe版)

摘要

本文详细介绍如何使用Python实现增值税发票的批量识别,并将识别结果导出到Excel表格中。为了方便非技术人员使用,我们将整个程序打包成exe可执行文件。整个过程包括发票图像的预处理、OCR文字识别、数据解析和格式化、Excel表格生成,以及最终的程序打包。

内容

一、背景与需求

增值税发票是企业财务管理中的重要凭证,手动录入发票信息不仅效率低下,而且容易出错。随着OCR(Optical Character Recognition,光学字符识别)技术的发展,通过计算机自动识别发票信息成为可能。本文将介绍如何使用Python实现增值税发票的批量识别,并将识别结果导出到Excel表格中,最终打包成exe可执行文件,方便非技术人员使用。

二、技术选型与工具准备

  1. Python环境:Python 3.x版本,推荐使用Anaconda或Miniconda进行环境管理。
  2. OCR库:Tesseract OCR,一个开源的OCR引擎,支持多种语言。
  3. 图像处理库:OpenCV,用于图像的预处理。
  4. 表格处理库:Pandas,用于生成和操作Excel表格。
  5. 打包工具:PyInstaller,用于将Python程序打包成exe可执行文件。

三、发票图像预处理

在OCR识别之前,需要对发票图像进行预处理,以提高识别准确率。常见的预处理步骤包括:

  1. 灰度化:将彩色图像转换为灰度图像,减少计算量。
  2. 二值化:将灰度图像转换为黑白图像,增强文字与背景的对比度。
  3. 去噪:使用滤波算法去除图像中的噪声。
  4. 倾斜校正:检测并校正图像的倾斜角度,使文字水平。
  1. import cv2
  2. import numpy as np
  3. def preprocess_image(image_path):
  4. # 读取图像
  5. image = cv2.imread(image_path)
  6. # 灰度化
  7. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  8. # 二值化
  9. _, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
  10. # 去噪
  11. denoised = cv2.medianBlur(binary, 3)
  12. # 倾斜校正(简化版,实际应用中可能需要更复杂的算法)
  13. # 这里假设图像没有明显倾斜,跳过此步骤
  14. return denoised

四、OCR文字识别

使用Tesseract OCR对预处理后的图像进行文字识别。需要先安装Tesseract OCR引擎,并下载中文语言包(如果识别中文发票)。

  1. import pytesseract
  2. from PIL import Image
  3. def ocr_recognize(image_path):
  4. # 预处理图像
  5. processed_image = preprocess_image(image_path)
  6. # 转换为PIL图像格式
  7. pil_image = Image.fromarray(processed_image)
  8. # 使用Tesseract进行OCR识别
  9. text = pytesseract.image_to_string(pil_image, lang='chi_sim') # 中文简体
  10. return text

五、数据解析和格式化

识别出的文本需要进一步解析,提取出发票的关键信息,如发票号码、开票日期、金额等。这一步通常需要结合正则表达式或规则引擎来实现。

  1. import re
  2. def parse_invoice_text(text):
  3. # 示例:提取发票号码
  4. invoice_number_pattern = r'发票号码[::]\s*(\d+)'
  5. invoice_number = re.search(invoice_number_pattern, text)
  6. invoice_number = invoice_number.group(1) if invoice_number else None
  7. # 示例:提取开票日期
  8. date_pattern = r'开票日期[::]\s*(\d{4}[-年]\d{1,2}[-月]\d{1,2}日?)'
  9. date_match = re.search(date_pattern, text)
  10. invoice_date = date_match.group(1).replace('年', '-').replace('月', '-').replace('日', '') if date_match else None
  11. # 示例:提取金额(简化版,实际应用中可能需要更复杂的处理)
  12. amount_pattern = r'金额[::]\s*(\d+\.?\d*)'
  13. amount_match = re.search(amount_pattern, text)
  14. amount = amount_match.group(1) if amount_match else None
  15. return {
  16. '发票号码': invoice_number,
  17. '开票日期': invoice_date,
  18. '金额': amount,
  19. }

六、Excel表格生成

使用Pandas库将解析后的数据生成Excel表格。

  1. import pandas as pd
  2. def generate_excel(invoice_data_list, output_path):
  3. df = pd.DataFrame(invoice_data_list)
  4. df.to_excel(output_path, index=False)

七、批量处理与主程序

将上述功能整合到一个主程序中,实现批量处理多张发票图像。

  1. import os
  2. def batch_process_invoices(image_folder, output_excel):
  3. invoice_data_list = []
  4. for filename in os.listdir(image_folder):
  5. if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
  6. image_path = os.path.join(image_folder, filename)
  7. text = ocr_recognize(image_path)
  8. invoice_data = parse_invoice_text(text)
  9. invoice_data_list.append(invoice_data)
  10. generate_excel(invoice_data_list, output_excel)
  11. if __name__ == '__main__':
  12. image_folder = 'path/to/invoice/images' # 替换为实际的发票图像文件夹路径
  13. output_excel = 'output_invoices.xlsx' # 输出的Excel文件名
  14. batch_process_invoices(image_folder, output_excel)

八、程序打包成exe

使用PyInstaller将Python程序打包成exe可执行文件,方便非技术人员使用。

  1. 安装PyInstaller:

    1. pip install pyinstaller
  2. 打包程序:

    1. pyinstaller --onefile --windowed your_script_name.py

    其中,--onefile表示生成单个exe文件,--windowed表示不显示命令行窗口。

九、总结与展望

本文介绍了如何使用Python实现增值税发票的批量识别,并将识别结果导出到Excel表格中,最终打包成exe可执行文件。这种方法大大提高了发票信息录入的效率,减少了人为错误。未来,可以进一步优化OCR识别算法,提高识别准确率;或者集成更复杂的发票解析逻辑,处理更多类型的发票。

相关文章推荐

发表评论