当前位置: 首页 > news >正文

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

1. 引言

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

2. 安装所需库

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

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

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

pip install pytesseract pillow pandas

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

3. 代码详解

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

3.1 导入必要的模块

首先导入需要的模块。

import pytesseract
from PIL import Image
import pandas as pd
import re  # 用于正则表达式

3.2 设置Tesseract路径

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

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

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

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

打开图像

使用Pillow库打开图像文件。

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

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

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

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

    # 提取关键信息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,用于从文本中查找符合特定模式的信息。

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)。

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库来实现自动化发票处理。这不仅可以帮助你快速提取和管理大量发票信息,还能显著提高工作效率。

http://www.lryc.cn/news/469328.html

相关文章:

  • 新手直播方案
  • 【大模型理论篇】主流大模型的分词器选择及讨论(BPE/BBPE/WordPiece/Unigram)
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法
  • 000010 - Mapreduce框架原理
  • OpenCV未定义标识符CV_XXX
  • flask服务通过gunicorn启动
  • 用更多的钱买电脑而不是手机
  • 10.25学习
  • 用xshell给服务器上传jar包
  • 从零搭建开源陪诊系统:关键技术栈与架构设计
  • java List<Map<String, Object>> 转 List<JSONObject> 的几种方式
  • 使用Python来下一场深夜雪
  • uniapp使用easyinput文本框显示输入的字数和限制的字数
  • 蓝牙技术的多种模式详解
  • 攻防世界-流量分析WP
  • 打印爱心型
  • WASM 使用说明23事(RUST实现)
  • Visual studio 下载安装
  • jEasyUI 创建自定义视图
  • SpringMVC6-SpringMVC的视图
  • echarts给Y轴的不同轴线设置不同的颜色的样式
  • 从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架
  • 论文笔记:LaDe: The First Comprehensive Last-mile Delivery Dataset from Industry
  • 无用的知识又增加了-静态二值贝叶斯滤波
  • cesium相机(camera)控制
  • Java 反射
  • 【目标检测01】真实框、预测框、锚框和交并比IoU
  • 青少年编程能力等级测评CPA C++五级试卷(2)
  • SATA数据线
  • 《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法