利用Python批量識別電子賬單數(shù)據(jù)的方法
一、前言
有一定數(shù)量類似如下截圖所示的賬單,利用 Python 批量識別電子賬單數(shù)據(jù),并將數(shù)據(jù)保存到Excel。
百度智能云接口
打開https://cloud.baidu.com/,如未注冊請先注冊,然后登錄點(diǎn)擊管理控制臺,點(diǎn)擊左側(cè)產(chǎn)品服務(wù)→人工智能→文字識別,點(diǎn)擊創(chuàng)建應(yīng)用,輸入應(yīng)用名稱如Baidu_OCR,選擇用途如學(xué)習(xí)辦公,最后進(jìn)行簡單應(yīng)用描述,即可點(diǎn)擊立即創(chuàng)建。會出現(xiàn)應(yīng)用列表,包括AppID、API Key、Secret Key等信息,這些稍后會用到。
二、調(diào)用Baidu aip識別
首先需要安裝百度的接口,命令行輸入如下:
pip install baidu-aip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
查看 Python 的 SDK 文檔:
AipOcr是 OCR 的 Python SDK 客戶端,為使用 OCR 的開發(fā)人員提供了一系列的交互方法。參考如下代碼新建一個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ù)請求識別某張圖中的所有文字
""" 讀取圖片 """ def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() image = get_file_content('example.jpg') """ 調(diào)用通用文字識別, 圖片參數(shù)為本地圖片 """ client.basicGeneral(image) """ 調(diào)用通用文字識別(高精度版) 圖片參數(shù)為本地圖片 """ client.basicAccurate(image)
識別出如下圖片中的文字,示例如下:
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ù)為本地圖片 result = client.basicGeneral(image) print(result) # 提取識別結(jié)果 info = '\n'.join([i['words'] for i in result['words_result']]) print(info)
結(jié)果如下:
三、批量識別電子賬單
獲取所有待識別的電子賬單圖像
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)
為了增加識別準(zhǔn)確率,將賬單上要提取的數(shù)據(jù)區(qū)域分割出來,再調(diào)用Baidu aip識別。
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ù)為本地圖片 """ result = client.basicGeneral(image) print(result) sleep(2) # 識別結(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] # 支付時間 年月日 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))
發(fā)現(xiàn)調(diào)用 client.basicGeneral(image),通用文字識別,-5.90識別成590,而圖像里支付時間年月日 時分秒之間間隔小,識別出來都在一起了,需要把支付時間的年月日 時分秒分別分割出來識別,調(diào)用 client.basicAccurate(image),通用文字識別(高精度版)。
完整實(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)', '商品', '支付時間', '支付方式', '交易單號', '商品單號']) # """ 改成你的 百度云服務(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ù)為本地圖片 """ result = client.basicAccurate(image) print(result) sleep(1) # 識別結(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] # 支付時間 年月日 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='識別賬單結(jié)果.xlsx')
結(jié)果如下:
識別結(jié)果還不錯,成功利用 Python 批量識別電子賬單數(shù)據(jù),并將數(shù)據(jù)保存到Excel。
到此這篇關(guān)于利用Python批量識別電子賬單數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python識別電子賬單內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請求
這篇文章主要介紹了Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下2020-03-03python多進(jìn)程(加入進(jìn)程池)操作常見案例
這篇文章主要介紹了python多進(jìn)程(加入進(jìn)程池)操作,結(jié)合常見案例形式分析了Python多進(jìn)程復(fù)制文件、加入進(jìn)程池及多進(jìn)程聊天等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10使用Selenium實(shí)現(xiàn)微博爬蟲(預(yù)登錄、展開全文、翻頁)
這篇文章主要介紹了使用Selenium實(shí)現(xiàn)微博爬蟲(預(yù)登錄、展開全文、翻頁),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python結(jié)合spaCy?進(jìn)行簡易自然語言處理
這篇文章主要為大家介紹了Python結(jié)合spaCy進(jìn)行簡易自然語言處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06一份python入門應(yīng)該看的學(xué)習(xí)資料
關(guān)于python入門你應(yīng)該看這些資料,幫助你快速入門python,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Python網(wǎng)絡(luò)請求使用Requests庫抓取解析數(shù)據(jù)
在網(wǎng)絡(luò)編程中,請求和接收數(shù)據(jù)是最常見的任務(wù)之一,Python的Requests庫提供了豐富的功能,使得HTTP請求變得非常簡單,在本文中,我們將了解如何使用Requests庫發(fā)起HTTP請求,并解析返回的數(shù)據(jù)2023-08-08Python自動化爬取天眼查數(shù)據(jù)的實(shí)現(xiàn)
本文將結(jié)合實(shí)例代碼,介紹Python自動化爬取天眼查數(shù)據(jù)的實(shí)現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06