利用Python批量識(shí)別電子賬單數(shù)據(jù)的方法
一、前言
有一定數(shù)量類似如下截圖所示的賬單,利用 Python 批量識(shí)別電子賬單數(shù)據(jù),并將數(shù)據(jù)保存到Excel。

百度智能云接口
打開https://cloud.baidu.com/,如未注冊(cè)請(qǐng)先注冊(cè),然后登錄點(diǎn)擊管理控制臺(tái),點(diǎn)擊左側(cè)產(chǎn)品服務(wù)→人工智能→文字識(shí)別,點(diǎn)擊創(chuàng)建應(yīng)用,輸入應(yīng)用名稱如Baidu_OCR,選擇用途如學(xué)習(xí)辦公,最后進(jìn)行簡(jiǎn)單應(yīng)用描述,即可點(diǎn)擊立即創(chuàng)建。會(huì)出現(xiàn)應(yīng)用列表,包括AppID、API Key、Secret Key等信息,這些稍后會(huì)用到。


二、調(diào)用Baidu aip識(shí)別
首先需要安裝百度的接口,命令行輸入如下:
pip install baidu-aip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
查看 Python 的 SDK 文檔:


AipOcr是 OCR 的 Python SDK 客戶端,為使用 OCR 的開發(fā)人員提供了一系列的交互方法。參考如下代碼新建一個(gè)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)
用戶向服務(wù)請(qǐng)求識(shí)別某張圖中的所有文字
""" 讀取圖片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
image = get_file_content('example.jpg')
""" 調(diào)用通用文字識(shí)別, 圖片參數(shù)為本地圖片 """
client.basicGeneral(image)
""" 調(diào)用通用文字識(shí)別(高精度版) 圖片參數(shù)為本地圖片 """
client.basicAccurate(image)
識(shí)別出如下圖片中的文字,示例如下:

from aip import AipOcr
# """ 改成你的 百度云服務(wù)的 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')
# 調(diào)用通用文字識(shí)別, 圖片參數(shù)為本地圖片
result = client.basicGeneral(image)
print(result)
# 提取識(shí)別結(jié)果
info = '\n'.join([i['words'] for i in result['words_result']])
print(info)
結(jié)果如下:

三、批量識(shí)別電子賬單
獲取所有待識(shí)別的電子賬單圖像
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'> 轉(zhuǎn)成str
img_file = str(img_file)
print(img_file)
為了增加識(shí)別準(zhǔn)確率,將賬單上要提取的數(shù)據(jù)區(qū)域分割出來(lái),再調(diào)用Baidu aip識(shí)別。

from pathlib import Path
import cv2 as cv
from aip import AipOcr
from time import sleep
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))
""" 調(diào)用通用文字識(shí)別, 圖片參數(shù)為本地圖片 """
result = client.basicGeneral(image)
print(result)
sleep(2)
# 識(shí)別結(jié)果
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] # 支付時(shí)間 年月日
time_2 = img[380:425, 160:390] # 支付時(shí)間 完整
way = img[430:475, 160:560] # 支付方式
num_1 = img[480:520, 160:560] # 交易單號(hào)
num_2 = img[525:570, 160:560] # 商戶單號(hào)
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))

發(fā)現(xiàn)調(diào)用 client.basicGeneral(image),通用文字識(shí)別,-5.90識(shí)別成590,而圖像里支付時(shí)間年月日 時(shí)分秒之間間隔小,識(shí)別出來(lái)都在一起了,需要把支付時(shí)間的年月日 時(shí)分秒分別分割出來(lái)識(shí)別,調(diào)用 client.basicAccurate(image),通用文字識(shí)別(高精度版)。
完整實(shí)現(xiàn)如下:
"""
@File :test_01.py
@Author :葉庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
from aip import AipOcr
from pathlib import Path
import cv2 as cv
from time import sleep
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(['消費(fèi)', '商品', '支付時(shí)間', '支付方式', '交易單號(hào)', '商品單號(hào)'])
# """ 改成你的 百度云服務(wù)的 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))
""" 調(diào)用通用文字識(shí)別, 圖片參數(shù)為本地圖片 """
result = client.basicAccurate(image)
print(result)
sleep(1)
# 識(shí)別結(jié)果
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] # 支付時(shí)間 年月日
time_2 = img[380:425, 290:390] # 支付時(shí)間 時(shí)分秒
way = img[430:475, 160:560] # 支付方式
num_1 = img[480:520, 160:560] # 交易單號(hào)
num_2 = img[525:570, 160:560] # 商戶單號(hào)
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='識(shí)別賬單結(jié)果.xlsx')
結(jié)果如下:


識(shí)別結(jié)果還不錯(cuò),成功利用 Python 批量識(shí)別電子賬單數(shù)據(jù),并將數(shù)據(jù)保存到Excel。
到此這篇關(guān)于利用Python批量識(shí)別電子賬單數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python識(shí)別電子賬單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中用cantools和can工具包解析blf文件的方法
這篇文章主要給大家介紹了關(guān)于python中用cantools和can工具包解析blf文件的相關(guān)資料,blf數(shù)據(jù)不像mf4那樣自帶信號(hào)數(shù)據(jù)庫(kù),因?yàn)樗怯浫罩居玫?一般情況下要盡可能的小,需要的朋友可以參考下2023-09-09
一文詳解如何實(shí)現(xiàn)PyTorch模型編譯
這篇文章主要為大家介紹了如何實(shí)現(xiàn)PyTorch?模型編譯詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作
這篇文章主要介紹了pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05
手把手教你使用Python解決簡(jiǎn)單的zip文件解壓密碼
本文主要介紹了Python解決簡(jiǎn)單的zip文件解壓密碼,使用的核心模塊是python標(biāo)準(zhǔn)庫(kù)中的zipfile模塊。具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
python項(xiàng)目下生成requirements.txt方法
這篇文章主要介紹了python項(xiàng)目下生成requirements.txt的方法,很多小伙伴不知道如何生成requirements.txt,本文就通過(guò)代碼示例給大家詳細(xì)介紹如何生成,,需要的朋友可以參考下2023-06-06
13個(gè)你可能未使用過(guò)的Python特性分享
Python?是頂級(jí)編程語(yǔ)言之一,它具有許多程序員從未使用過(guò)的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過(guò)的13?個(gè)?Python?特性,感興趣的可以學(xué)習(xí)一下2022-11-11
django框架面向?qū)ο驩RM模型繼承用法實(shí)例分析
這篇文章主要介紹了django框架面向?qū)ο驩RM模型繼承用法,結(jié)合實(shí)例形式分析了Django框架ORM模型抽象類繼承、多表繼承及代理模型繼承三種繼承方式實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07
python實(shí)現(xiàn)倒計(jì)時(shí)小工具
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)倒計(jì)時(shí)小工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

