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