下面是关于“Python一行代码识别发票并保存Excel示例详解”这个主题的详细讲解攻略。
一、概述
这篇文章主要介绍了如何使用Python代码识别发票信息并保存到Excel中。使用OCR技术识别出图片中的文字,并使用正则表达式进行匹配提取出发票的相关信息,最后将提取出的信息保存到Excel文件中。
二、实现步骤
1. 安装依赖包
使用Python代码处理图片需要安装一些相关的依赖包,包括pillow
、pytesseract
、numpy
等。可以使用pip来安装这些依赖包。
pip install pillow pytesseract numpy pandas
2. 加载图片
使用pillow
库加载图片文件, 并将图片转化为灰度图像。
from PIL import Image
import numpy as np
# 加载图片
img = Image.open("invoice.jpg")
# 转化为灰度图像
gray = img.convert('L')
3. 识别文字
使用pytesseract
库识别图片中的文字,返回识别结果。
import pytesseract
# 识别文字
text = pytesseract.image_to_string(gray, lang='chi_sim')
4. 提取信息
使用正则表达式从识别结果中提取出发票的相关信息,如发票代码、发票号码、开票日期、购买方名称、税号等等。
import re
# 正则表达式匹配
pattern = r'''(?P<code>[0-9]{10}), # 发票代码
(?P<number>[0-9]{8}), # 发票号码
(?P<date>[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日), # 开票日期
(?P<name>[\u4e00-\u9fa5]{3,50}有限公司), # 购买方名称
(?P<tax>[0-9a-zA-Z]{15,20}) # 购买方税号
'''
match = re.search(pattern, text, re.VERBOSE)
if match:
# 提取出匹配到的信息
invoice_info = {
'发票代码': match.group('code'),
'发票号码': match.group('number'),
'开票日期': match.group('date'),
'购买方名称': match.group('name'),
'购买方税号': match.group('tax')
}
5. 保存到Excel
使用pandas
库将提取出的发票信息保存到Excel文件中。
import pandas as pd
df = pd.DataFrame([invoice_info])
df.to_excel('invoice.xlsx', index=False)
三、示例说明
示例1:识别并提取单张图片中的发票信息。
from PIL import Image
import pytesseract
import numpy as np
import pandas as pd
import re
# 加载图片
img = Image.open("invoice.jpg")
# 转化为灰度图像
gray = img.convert('L')
# 识别文字
text = pytesseract.image_to_string(gray, lang='chi_sim')
# 正则表达式匹配
pattern = r'''(?P<code>[0-9]{10}), # 发票代码
(?P<number>[0-9]{8}), # 发票号码
(?P<date>[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日), # 开票日期
(?P<name>[\u4e00-\u9fa5]{3,50}有限公司), # 购买方名称
(?P<tax>[0-9a-zA-Z]{15,20}) # 购买方税号
'''
match = re.search(pattern, text, re.VERBOSE)
if match:
# 提取出匹配到的信息
invoice_info = {
'发票代码': match.group('code'),
'发票号码': match.group('number'),
'开票日期': match.group('date'),
'购买方名称': match.group('name'),
'购买方税号': match.group('tax')
}
# 将发票信息保存到Excel文件中
df = pd.DataFrame([invoice_info])
df.to_excel('invoice.xlsx', index=False)
示例2:批量识别多张图片中的发票信息,并保存到一个Excel文件中。
from PIL import Image
import pytesseract
import numpy as np
import pandas as pd
import re
import os
# 获取所有图片文件名
dir_path = './invoices'
img_files = os.listdir(dir_path)
# 定义正则表达式模式
pattern = r'''(?P<code>[0-9]{10}), # 发票代码
(?P<number>[0-9]{8}), # 发票号码
(?P<date>[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日), # 开票日期
(?P<name>[\u4e00-\u9fa5]{3,50}有限公司), # 购买方名称
(?P<tax>[0-9a-zA-Z]{15,20}) # 购买方税号
'''
# 遍历图片文件并处理
invoice_info_list = []
for file_name in img_files:
# 加载图片
img_path = os.path.join(dir_path, file_name)
img = Image.open(img_path)
# 转化为灰度图像
gray = img.convert('L')
# 识别文字
text = pytesseract.image_to_string(gray, lang='chi_sim')
# 正则表达式匹配
match = re.search(pattern, text, re.VERBOSE)
if match:
# 提取出匹配到的信息
invoice_info = {
'发票代码': match.group('code'),
'发票号码': match.group('number'),
'开票日期': match.group('date'),
'购买方名称': match.group('name'),
'购买方税号': match.group('tax')
}
invoice_info_list.append(invoice_info)
# 将提取出的发票信息保存到Excel文件中
df = pd.DataFrame(invoice_info_list)
df.to_excel('invoices.xlsx', index=False)
以上两个示例,分别展示了如何识别并提取单张图片中的发票信息以及如何批量识别多张图片中的发票信息并保存到一个Excel文件。其中使用了Pillow、pytesseract、NumPy和pandas等Python库来完成。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python一行代码识别发票并保存Excel示例详解 - Python技术站