利用Python批量识别电子账单数据

本文涉及的产品
通用文字识别,通用文字识别 200次/月
小语种识别,小语种识别 200次/月
车辆物流识别,车辆物流识别 200次/月
简介: 有一定数量类似如下截图所示的账单,利用 Python 批量识别电子账单数据,并将数据保存到Excel。

一、前言


有一定数量类似如下截图所示的账单,利用 Python 批量识别电子账单数据,并将数据保存到Excel。



百度智能云接口


打开https://cloud.baidu.com/,如未注册请先注册,然后登录点击管理控制台,点击左侧产品服务→人工智能→文字识别,点击创建应用,输入应用名称如Baidu_OCR,选择用途如学习办公,最后进行简单应用描述,即可点击立即创建。会出现应用列表,包括AppID、API Key、Secret Key等信息,这些稍后会用到。


二、调用Baidu aip识别


首先需要安装百度的接口,命令行输入如下:


pip install baidu-aip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com


查看 Python 的 SDK 文档:


AipOcr是 OCR 的 Python SDK 客户端,为使用 OCR 的开发人员提供了一系列的交互方法。参考如下代码新建一个AipOcr:


from aip import AipOcr
""" 你的 APPID AK SK """APP_ID ='你的 App ID'API_KEY ='你的 Api Key'SECRET_KEY ='你的 Secret Key'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


用户向服务请求识别某张图中的所有文字


""" 读取图片 """def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
image = get_file_content('example.jpg')
""" 调用通用文字识别, 图片参数为本地图片 """client.basicGeneral(image)
""" 调用通用文字识别(高精度版) 图片参数为本地图片 """client.basicAccurate(image)


识别出如下图片中的文字,示例如下:

代码如下:


from aip import AipOcr
# """ 改成你的 百度云服务的 ID AK SK """APP_ID ='18690701'API_KEY ='QFaTVXvZdPrR05dNlR5I49xA'SECRET_KEY ='*******************************'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
image = get_file_content('example.jpg')
# 调用通用文字识别, 图片参数为本地图片result = client.basicGeneral(image)
print(result)
# 提取识别结果info ='\n'.join([i['words'] for i in result['words_result']])
print(info)


结果如下:



三、批量识别电子账单


获取所有待识别的电子账单图像


from pathlib import Path
# 换成你放图片的路径p = Path(r'D:\test\test_img')
# 得到所有文件夹下 .jpg 图片file = p.glob('**/*.jpg')
for img_file in file:
    print(type(img_file))  #  <class 'pathlib.WindowsPath'>  转成str    img_file = str(img_file)
    print(img_file)


为了增加识别准确率,将账单上要提取的数据区域分割出来,再调用 Baidu AipOcr 识别。


"""@公众号     : AI庭云君@Author    : 叶庭云@CSDN      : https://yetingyun.blog.csdn.net/"""from pathlib import Path
import cv2 as cv
from aip import AipOcr
from time import sleepAPP_ID ='18690701'API_KEY ='QFaTVXvZdPrR05dNlR5I49xA'SECRET_KEY ='**********************************'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def identity(num):
    result_list = []
for i in range(num):
        image = get_file_content('img{}.jpg'.format(i))
""" 调用通用文字识别, 图片参数为本地图片 """        result = client.basicGeneral(image)
        print(result)
sleep(2)
# 识别结果        info =''.join([i['words'] for i in result['words_result']])
        result_list.append(info)
    print(result_list)
src = cv.imread(r'D:\test\test_img\001.jpg')
src = cv.resize(src, None, fx=0.5, fy=0.5)
# print(src.shape)img = src[280:850, 10:580]        # 截取图片  高 宽money = img[70:130, 150:450]      # 支出 收入金额goods = img[280:330, 160:560]     # 商品time_1 = img[380:425, 160:292]    # 支付时间  年月日time_2 = img[380:425, 160:390]    # 支付时间  完整way = img[430:475, 160:560]       # 支付方式num_1 = img[480:520, 160:560]     # 交易单号num_2 = img[525:570, 160:560]     # 商户单号img_list = [money, goods, time_1, time_2, way, num_1, num_2]
for index_, item in enumerate(img_list):
    cv.imwrite(f'img{index_}.jpg', item)
identity(len(img_list))


发现调用 client.basicGeneral(image),通用文字识别,-5.90识别成590,而图像里支付时间年月日 时分秒之间间隔小,识别出来都在一起了,需要把支付时间的年月日 时分秒分别分割出来识别,调用 client.basicAccurate(image),通用文字识别(高精度版)。


完整实现如下:


"""@公众号     : AI庭云君@Author    : 叶庭云@CSDN      : https://yetingyun.blog.csdn.net/"""from aip import AipOcr
from pathlib import Path
import cv2 as cv
from time import sleepimport openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(['消费', '商品', '支付时间', '支付方式', '交易单号', '商品单号'])
# """ 改成你的 百度云服务的 ID AK SK """APP_ID ='18690701'API_KEY ='QFaTVXvZdPrR05dNlR5I49xA'SECRET_KEY ='*******************************'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def identity(num):
    result_list = []
for i in range(num):
        image = get_file_content('img{}.jpg'.format(i))
""" 调用通用文字识别, 图片参数为本地图片 """        result = client.basicAccurate(image)
        print(result)
sleep(1)
# 识别结果        info =''.join([i['words'] for i in result['words_result']])
        result_list.append(info)
    result_list[2] = result_list[2] +' '+ result_list[3]
    result_list.pop(3)
    print(result_list)
    sheet.append(result_list)
# 换成你放图片的路径p = Path(r'D:\test\test_img')
# 得到所有文件夹下 .jpg 图片file = p.glob('**/*.jpg')
for img_file in file:
    img_file = str(img_file)
    src = cv.imread(r'{}'.format(img_file))
    src = cv.resize(src, None, fx=0.5, fy=0.5)
# print(src.shape)    img = src[280:850, 10:580]        # 截取图片  高、宽范围    money = img[70:130, 150:450]      # 支出金额    goods = img[280:330, 160:560]     # 商品    time_1 = img[380:425, 160:292]    # 支付时间  年月日    time_2 = img[380:425, 290:390]    # 支付时间  时分秒    way = img[430:475, 160:560]       # 支付方式    num_1 = img[480:520, 160:560]     # 交易单号    num_2 = img[525:570, 160:560]     # 商户单号    img_list = [money, goods, time_1, time_2, way, num_1, num_2]
for index_, item in enumerate(img_list):
        cv.imwrite(f'img{index_}.jpg', item)
    identity(len(img_list))
# cv.imshow('img', img)# cv.imshow('goods', time_2)# cv.waitKey(0)wb.save(filename='识别账单结果.xlsx')


结果如下:



识别结果还不错,成功利用 Python 批量识别电子账单数据,并将数据保存到Excel。

目录
相关文章
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能数据隐私保护
使用Python实现深度学习模型:智能数据隐私保护 【10月更文挑战第3天】
116 0
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
29天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
27 1
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
2月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
62 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
2月前
|
计算机视觉 Python
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
这篇文章介绍了如何使用Python的OpenCV库将多张图片合并为一张图片显示,以及如何使用matplotlib库从不同txt文档中读取数据并绘制多条折线图。
45 3
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
|
2月前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
96 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
2月前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
62 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
52 2