Python自动化发票处理:使用Pytesseract和Pandas从图像中提取信息并保存到Excel

1. 引言

在财务部门,处理大量的纸质或扫描版发票是一项既耗时又容易出错的任务。通过使用Python中的pytesseract(一个OCR工具)和pandas库,我们可以自动化这一过程,从而提高工作效率并减少错误。

2. 安装所需库

首先确保你的开发环境中安装了以下库:

  • pytesseract:用于OCR文本识别。
  • Pillow:用于图像处理。
  • pandas:用于数据管理和导出到Excel。

可以通过以下命令进行安装:

bash 复制代码
pip install pytesseract pillow pandas

同时,你需要安装Tesseract OCR引擎,并根据实际情况设置其路径。

3. 代码详解

接下来我们将详细解析如何使用这些库来从发票图片中提取关键信息,并将这些信息保存到Excel文件中。

3.1 导入必要的模块

首先导入需要的模块。

python 复制代码
import pytesseract
from PIL import Image
import pandas as pd
import re  # 用于正则表达式

3.2 设置Tesseract路径

设置Tesseract OCR引擎的路径。请根据你的实际安装路径进行调整。

python 复制代码
# 设置Tesseract路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

3.3 定义提取发票信息的函数

定义一个名为extract_invoice_info的函数,它接受一个参数:发票图片的路径(image_path)。

打开图像

使用Pillow库打开图像文件。

python 复制代码
def extract_invoice_info(image_path):
    # 打开图像
    img = Image.open(image_path)
使用Tesseract进行OCR识别

使用pytesseract.image_to_string方法对图像进行OCR识别。对于中文发票,我们指定语言为chi_sim

python 复制代码
    # 使用Tesseract进行OCR识别
    text = pytesseract.image_to_string(img, lang='chi_sim')
提取关键信息

使用正则表达式从识别的文本中提取发票号码、开票日期和合计金额。

python 复制代码
    # 提取关键信息
    invoice_number = find_pattern(text, r'发票号码:(\d+)')
    invoice_date = find_pattern(text, r'开票日期:(\d{4}-\d{2}-\d{2})')
    total_amount = find_pattern(text, r'合计金额:(\d+\.\d+)')
    
    return {
        '发票号码': invoice_number,
        '开票日期': invoice_date,
        '合计金额': total_amount
    }

3.4 定义正则表达式匹配函数

定义一个辅助函数find_pattern,用于从文本中查找符合特定模式的信息。

python 复制代码
def find_pattern(text, pattern):
    match = re.search(pattern, text)
    if match:
        return match.group(1)
    return None

3.5 定义保存数据到Excel文件的函数

定义一个名为save_to_excel的函数,它接受两个参数:发票数据列表(data)和输出文件名(output_file)。

python 复制代码
def save_to_excel(data, output_file):
    df = pd.DataFrame(data)
    df.to_excel(output_file, index=False)

4. 运行脚本

保存上面编写的代码到.py文件中,例如命名为auto_invoice.py。然后打开终端或者命令提示符,切换到包含此文件的目录下,执行如下命令运行程序:

一旦运行起来,你就会看到一个名为"invoices.xlsx"的新Excel文件被创建出来,其中包含了从发票图片中提取的关键信息。

5. 结论

通过本文的学习,你应该已经掌握了如何使用Python与pytesseractpandas库来实现自动化发票处理。这不仅可以帮助你快速提取和管理大量发票信息,还能显著提高工作效率。

相关推荐
Johnny_Cheung11 分钟前
字符串、列表、元组、字典
开发语言·python
独行soc16 分钟前
2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)
java·数据库·python·安全·面试·职场和发展·汽车
梦回阑珊33 分钟前
《QT从基础到进阶·七十四》Qt+C++开发一个python编译器,能够编写,运行python程序改进版
c++·python·qt
前端开发张小七37 分钟前
13.Python Socket服务端开发指南
前端·python
前端开发张小七39 分钟前
14.Python Socket客户端开发指南
前端·python
齐尹秦39 分钟前
CSS Id 和 Class 选择器学习笔记
css·笔记·学习
Y1nhl1 小时前
搜广推校招面经六十六
pytorch·python·深度学习·机器学习·广告算法·推荐算法·搜索算法
kfepiza1 小时前
`docker run --restart no,always,on-failure,unless-stopped`笔记250406
笔记·docker·容器
码界筑梦坊1 小时前
基于Django的二手交易校园购物系统
大数据·后端·python·信息可视化·django
郭涤生2 小时前
Chapter 10: Batch Processing_《Designing Data-Intensive Application》
笔记·分布式