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

下面是关于“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日

相关文章

  • python使用opencv按一定间隔截取视频帧

    下面是详细的攻略: 背景介绍 OpenCV是一个开源的视觉计算库,支持不同操作系统,包括Windows、Linux、Android等等。它可以用来处理图像、视频和其他多媒体文件,并提供了丰富的图像与视频处理函数。在许多领域,如计算机视觉和机器学习,OpenCV都是一个非常重要、强大和流行的工具。 在这里,我们主要介绍如何使用Python编写代码,使用Open…

    人工智能概览 2023年5月25日
    00
  • Django ORM 多表查询示例代码

    下面我将为你详细讲解 Django ORM 多表查询示例代码的完整攻略。 什么是Django ORM Django ORM(Object-Relational Mapping)是 Django 框架中的一个组件,它将数据库和 Python 对象之间创建了一种映射关系。我们可以使用 Python 代码操作数据库,无需编写 SQL 语句,这大大减少了我们编写数据…

    人工智能概论 2023年5月24日
    00
  • SpringBoot使用OpenCV示例总结

    SpringBoot使用OpenCV示例总结 简介 OpenCV是一个开源的计算机视觉库,可以用于图像处理、机器视觉和模式识别等领域。SpringBoot是一个基于Spring框架的快速开发微服务的框架。本示例将演示如何在SpringBoot中使用OpenCV库。 准备工作 在开始前,需要安装以下软件: JDK 1.8及以上版本 Maven OpenCV 4…

    人工智能概览 2023年5月25日
    00
  • ubuntu下编译安装opencv的方法

    下面是Ubuntu下编译安装OpenCV的完整攻略: 安装依赖 在开始OpenCV的编译过程之前,需要先安装一些必要的依赖。你可以使用以下命令来安装: sudo apt-get update sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config \ libavco…

    人工智能概览 2023年5月25日
    00
  • 解析Tars-Java客户端源码

    解析Tars-Java客户端源码的完整攻略 Tars-Java客户端是基于Tars框架的Java版本实现的一种提供远程服务的客户端。在理解Tars-Java客户端源码时,我们可以从以下几个方面入手: 1. 主要依赖的引入 在使用Tars-Java客户端时,我们需要在pom.xml文件中引入以下依赖: <dependency> <groupI…

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

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

    人工智能概览 2023年5月25日
    00
  • window系统 nodejs安装opencv环境配置图文详解

    我来为你详细讲解“Windows系统Node.js安装OpenCV环境配置图文详解”的完整攻略。 准备工作 在开始安装OpenCV之前,我们需要先安装好Node.js和CMake。其中,Node.js是基于JavaScript运行的开源服务器环境,CMake是跨平台的编译工具,提供了一种简单的机制来编译、测试和安装软件。 安装Node.js Node.js的…

    人工智能概览 2023年5月25日
    00
  • JavaScript JSON使用原理及注意事项

    JavaScript JSON是一种轻量级的数据格式,用于传输和存储数据。在实际开发过程中,我们经常需要使用JSON数据格式进行数据交换和传输。本文将详细讲解JavaScript JSON的使用原理及注意事项。 JSON概述 JSON全称JavaScript Object Notation,它是一种轻量级的数据格式,由Douglas Crockford于20…

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