前言:

通过观察,我发现微信消费类型大约有3种:

1.通过扫描商家二维码支付
2.直接进行商户消费
3.发红包给舍友让他们帮我带饭

接下来,我们先进行准备工作

一、前言

有一定数量类似如下截图所示的账单,利用 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'>  转成strimg_file = str(img_file)print(img_file)

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

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),通用文字识别(高精度版)。

完整实现如下:

"""
from aip import AipOcr
from pathlib import Path
import cv2 as cv
from time import sleep
import openpyxlwb = 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。

最后:

以上就是本文的所有内容了,欢迎点赞支持~大家需要完整的项目源码的可以私信我哟

【钱要花到刀刃上,该省省,该花花】你真的知道你花费到哪里去了吗?Python统计微信消费,生成微信消费账单。相关推荐

  1. 神武3服务器神武币交易中心,《神武3》电脑版:神武币使用方向攻略,神武币如何花在刀刃上...

    俗话说,一口喂不成一个胖子. 在<神武3>电脑版中,像大胖熊这样的胖子,肯定不是一朝一夕就养出来的.而角色的成型和战斗力的提高也不是一朝一夕就能达到的.今天胖熊就来和大家讨论讨论,这神武币 ...

  2. Azure手把手系列 3:把IT的钱花在刀刃上

    对于Azure以及公有云的了解,可谓是永无止境的,用一句客户的话来说就是Azure是大海,只要你往前航行,一定能时不时的发现宝藏:Azure好比是一座冰山,当你以为你已经对Azure很熟悉了,其实这只 ...

  3. 赚的钱不花掉就不算自己的钱?

    (本文内容整理自我在鸿学金信赢在青年-工薪青年投资理财培训中所讲的部分内容,希望能给广大的工薪青年白领们在规划自己的人生财富时提供一定的参考意见!) 上一节课 我们讲到了为了让了要弥补人生财富的巨额亏 ...

  4. 让游戏不再愁“钱”花---解决“钱不够花”问题---自编游戏修改器

    让游戏不再愁"钱"花--->解决"钱不够花"问题---自编游戏修改器 刚才在整理以往的代码时候,整理到VB,还发现一个小玩具,我都快忘了,初中的时候玩红色 ...

  5. 你永远不知道,你公司的钱都花在了哪里

    对于小公司.创业公司来说,一般固定资产比较少,现金流动比较频繁,你可能觉得最近业务不错,日日入账不少,但是到月底你会发现,可能你的账上并没有多少钱.于是你纳闷了,what?我的钱都去了哪里? 有过创业 ...

  6. 钱越花越有 越省越穷 中国的赚钱方式已经变了

    [摘要]父辈一代给我们留下的省钱观念,会给后代留下很大的影响,甚至毁一生 , 穷三代!如何做好时间和金钱在生活中各项事务的分配比重,这是一个宏大的命题,也是我所知道的普通人获得更好生活的几乎唯一方式. ...

  7. 百合类游戏推荐その花びらにくちづけを花吻在上

    昨天去百度知道 有人跪求百合类游戏............ 好酒也怕巷子深http://bbs.sgsub.com/read.php?tid=7472 汉化作品应该到各论坛去宣传一下 谷歌一下&quo ...

  8. 人工智能基础课15机器学习-好钢用在刀刃上:降维学习

    15 机器学习 | 好钢用在刀刃上:降维学习 毛主席在<矛盾论>中提出了主要矛盾和次要矛盾的概念:"研究任何过程,如果是存在着两个以上矛盾的复杂过程的话,就要用全力找出它的主要矛 ...

  9. 云服务 好钢用在刀刃上

    世纪互联在国内提供的公有云服务主要包括Windows Azure和Office 365两部分.Windows Azure主要提供计算.存储.SQL数据库.整合和网络服务,而Office 365除了基本 ...

最新文章

  1. Latex快速入门, Windows 安装使用编译技巧归纳
  2. 关于delphi中的register, pascal, cdecl, stdcall, safecall
  3. 对GET/POST请求返回cookie中的键值对进行重新组合
  4. linux fedora设置开机自动挂载win磁盘
  5. 音视频技术开发周刊 | 187
  6. 《Java8实战》笔记(02):通过行为参数传递代码
  7. 苹果抄袭豌豆射手实锤!AirPods Pro又被玩坏了...
  8. linux.命令格式,【Linux基础知识】Linux命令格式介绍
  9. angularjs学习第四天笔记(第一篇:简单的表单验证)
  10. (转) 分布式-微服务-集群的区别
  11. 液晶显示器模拟接口时,屏幕重影照片
  12. python3 微博API code获取解决方案 长期保存access_token
  13. python神经网络算法pdf_深度学习:卷积神经网络从入门到精通 PDF 原书扫描版
  14. 文本数据标注工具Doccano
  15. python项目实战:免费下载某平台任意付费音乐
  16. php融云开发文档,融云公众服务
  17. STM32Cube工具学习笔记(一)Cube配置
  18. VB生成二维码图形的控件,CSDN利用盗版卖卖会员44积分赚钱
  19. WebView 拦截广告 简单实现
  20. 删除U盘上的EFI分区

热门文章

  1. 深度学习——图像增广
  2. python 批量增广数据_GitHub:数据增广最全资料集锦
  3. 南邮2022年市场营销知识点整理
  4. Pycharm 添加python脚本头信息模板
  5. c语言实现跨平台dns域名解析
  6. LINUX 红帽8.2安装pycharm
  7. myeclipse download
  8. 阿里云OSS——对象存储服务(工具)
  9. 函数:写一函数求sinh(x)的值,求sinh(x)的近似公式为: sinh(x) = (ex-e-x)/2 其中用一个函数求ex
  10. 使用数据处理技能优化Draftkings NBA阵容