Python一行代码识别发票并保存Excel示例详解

yizhihongxing

下面是关于“Python一行代码识别发票并保存Excel示例详解”这个主题的详细讲解攻略。

一、概述

这篇文章主要介绍了如何使用Python代码识别发票信息并保存到Excel中。使用OCR技术识别出图片中的文字,并使用正则表达式进行匹配提取出发票的相关信息,最后将提取出的信息保存到Excel文件中。

二、实现步骤

1. 安装依赖包

使用Python代码处理图片需要安装一些相关的依赖包,包括pillowpytesseractnumpy等。可以使用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技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 扫描仪一点通

    “扫描仪一点通”完整攻略 简介 “扫描仪一点通”是一款针对Windows系统的扫描仪驱动管理软件,主要作用是为电脑上安装的扫描仪设备提供最新的驱动程序和管理工具,方便用户管理使用扫描仪。本攻略主要介绍该软件的安装和使用方法,以及常见问题的解决办法。 安装步骤 步骤1:下载安装程序 访问”扫描仪一点通”官方网站(http://www.scanok.com/),…

    人工智能概览 2023年5月25日
    00
  • django channels使用和配置及实现群聊

    下面我将为您详细讲解 Django Channels 的使用和配置以及如何实现群聊功能。 什么是 Django Channels Django Channels 是一个使用 WebSockets 和其他协议实现实时通信和异步处理的 Django 框架扩展。通过 Django Channels,我们可以很方便地构建具有实时通信能力的 Web 应用程序。 配置和…

    人工智能概论 2023年5月25日
    00
  • django 实现电子支付功能的示例代码

    下面是 django 实现电子支付功能的示例代码的完整攻略: 1. 安装相关库 在 django 项目中实现电子支付功能,首先需要使用到相应的库。目前比较流行的有以下两个: django-payments:这是一个基于 Django 的支付应用,集成了多个第三方支付服务提供商的 SDK,可通过该应用快速实现主流的电子支付功能。 stripe:这是一家美国电子…

    人工智能概论 2023年5月24日
    00
  • Spring Cloud详解实现声明式微服务调用OpenFeign方法

    下面是“Spring Cloud详解实现声明式微服务调用OpenFeign方法”的完整攻略。 1. 前置知识 在介绍如何使用OpenFeign进行声明式微服务调用之前,需要先了解以下内容: 1.1 微服务架构 微服务架构是一种将应用程序拆分为一组较小、独立、自治的服务的方法。每个服务都运行在其独立的进程中,可以使用轻量级机制(如HTTP资源API)进行通信。…

    人工智能概览 2023年5月25日
    00
  • 在Linux中打开了太多文件(Too many open files)的三种解决方法

    当在Linux中打开太多文件时,会遇到“Too many open files”的错误提示,这是因为操作系统为每个进程分配了打开文件的最大数量限制。 解决这一问题有三种方式: 修改系统全局文件数量限制 通过修改系统全局文件数量限制,可以让整个系统中所有的进程都可以打开更多的文件。这可以通过修改以下文件来实现: /proc/sys/fs/file-max : …

    人工智能概览 2023年5月25日
    00
  • Django如何将URL映射到视图

    Django将URL映射到视图的过程主要有以下几个步骤: 配置URL路由规则 定义视图函数 将URL路由规则与视图函数进行绑定 下面分别讲解这几个步骤: 配置URL路由规则 Django使用urls.py文件来定义URL路由规则。在urls.py文件中,需要先导入Django中的path函数。path函数用来定义URL路由规则,支持正则表达式,类似于Flas…

    人工智能概览 2023年5月25日
    00
  • Python FastAPI 多参数传递的示例详解

    关于“Python FastAPI 多参数传递的示例详解”的完整攻略,我可以为您提供以下内容。 标题 本文主要讲解如何在 FastAPI 中实现多参数传递的示例,让读者了解如何在接口中传递多个参数并进行处理。 环境 在开始之前,需要准备以下环境: FastAPI 0.63.0 Python 3.7+ 示例1:路径参数+查询参数 接下来我们将介绍如何在 Fas…

    人工智能概论 2023年5月25日
    00
  • Java基础之简单的图片处理

    Java基础之简单的图片处理攻略 图片处理是 Java 开发中经常遇到的问题,特别是在 Web 开发中,随着用户对于图片的需求越来越高,对于图片的处理也越来越复杂,比如调整大小、裁剪、添加水印等。本文将介绍 Java 中简单的图片处理方案。 1. 常用图片处理类 Java 中常用的图片处理类有 BufferedImage 和 ImageIO。其中,Buffe…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部