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日

相关文章

  • 使用nginx搭建点播和直播流媒体服务器的方法步骤

    下面是使用nginx搭建点播和直播流媒体服务器的方法步骤的完整攻略: 1. 安装nginx 使用以下命令安装nginx: sudo apt-get update sudo apt-get install nginx 安装完成后,使用以下命令启动nginx服务: sudo service nginx start 2. 配置点播流媒体服务器 2.1 配置http…

    人工智能概览 2023年5月25日
    00
  • Django+RestFramework API接口及接口文档并返回json数据操作

    下面是“Django+RestFramework API接口及接口文档并返回json数据操作”的完整攻略: 一、前置条件 在使用Django RestFramework进行接口开发之前,需要先安装以下软件: Python 3.x Django Django RestFramework 二、创建Django项目 首先,我们需要创建一个Django项目。 可以使…

    人工智能概览 2023年5月25日
    00
  • Django forms组件的使用教程

    接下来我将详细讲解“Django forms组件的使用教程”的完整攻略。本攻略包含以下内容: Django forms 组件的概述 Django forms 组件的基本用法 Django forms 组件的进阶用法 Django forms 组件的概述 Django forms 组件是 Django 框架中的一个核心组件,用于处理表单数据和验证表单数据的合法…

    人工智能概览 2023年5月25日
    00
  • 如何基于Jenkins构建Docker镜像

    下面我给你详细讲解“如何基于Jenkins构建Docker镜像”的完整攻略: 1. 准备工作 首先,需要在 Jenkins 中安装 Docker 插件,以便在 Jenkins 中进行 Docker 镜像构建。 其次,需要安装 Docker 环境和 Docker-Compose 环境。 2. 创建 Jenkins 任务 在 Jenkins 中创建一个 Free…

    人工智能概览 2023年5月25日
    00
  • 更换Django默认的模板引擎为jinja2的实现方法

    更换Django默认的模板引擎为jinja2,需要进行以下步骤: 1. 安装jinja2 首先需要安装jinja2模板引擎,可以通过pip进行安装: pip install jinja2 2. 修改settings.py 在Django项目中,模板引擎的配置在settings.py文件中。打开该文件,找到TEMPLATES设置项,修改其中BACKEND项为’…

    人工智能概览 2023年5月25日
    00
  • django列表筛选功能的实现代码

    实现django列表筛选功能的代码攻略大致分为以下步骤: 创建筛选表单。 在视图函数中获取筛选条件并过滤数据。 在模板中展示筛选界面及数据。 下面,将分别详细阐述每个步骤。 创建筛选表单 首先,在应用的forms.py文件中创建一个筛选表单类。表单类的属性应与模型类中要筛选的字段名称相同,以便后续在视图函数中获取这些字段的值进行筛选。 以下是一个示例: fr…

    人工智能概论 2023年5月25日
    00
  • WCF入门需要掌握的基础知识

    WCF(Windows Communication Foundation)是一种在Windows操作系统上实现分布式系统之间通信的技术,是微软推荐的一种服务导向架构(SOA)框架。下面是WCF入门需要掌握的基础知识的完整攻略: WCF概述 WCF是一种基于消息传输的通信框架,它可以跨越多个计算机、多个操作系统和多个应用程序域进行通信。WCF的核心是服务(Se…

    人工智能概览 2023年5月25日
    00
  • Python telnet登陆功能实现代码

    下面是Python Telnet登陆功能实现的完整攻略: 什么是Telnet Telnet是一种远程登录协议,它允许用户通过网络连接到远程计算机上并操作该计算机。Telnet最初是为UNIX系统设计的,但现在它已成为各种操作系统和设备的标准协议。 Telnet登陆的实现原理 在Python中,我们可以使用telnetlib模块来实现Telnet登陆。Teln…

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