百度开放平台(百度AI开放平台-全球领先的人工智能服务平台)提供了文字识别接口,其中表格文字识别可将图片中表格文字识别下来,通过openpyxl包可将识别结果输出到excel中。代码如下。
# encoding:utf-8
import requests
import base64
import os
import openpyxl as op
from openpyxl.styles import Alignment, PatternFill
class Wzsb():
def __init__(self, resultPath,imgPath,at):
self.excelpath =resultPath #新建excel文件
self.workbook = op.Workbook()
self.path_img=imgPath
self.list_img = os.listdir(self.path_img)
self.access_token=at
def deletNullRow(self):
savepath = self.excelpath
wd = op.load_workbook(savepath)
sheetname = wd.sheetnames
print(sheetname)
for i in sheetname:
ws = wd[i]
nrows = ws.max_row
ncols = ws.max_column
for r in range(1,nrows+1):
rowdata = []
for c in range(1, ncols + 1):
cellvalue = ws.cell(row=r, column=c).value
rowdata.append(cellvalue)
if rowdata==[None, None, None, None]:
ws.delete_rows(r)
print("成功删除{}表第{}行".format(i,r))
wd.save(savepath)
wd.close()
def getResult(self):
for j in self.list_img:
imgi=self.path_img+"//"+j
imgiName=j.split(".")[0]
sheet=self.workbook.create_sheet(title=imgiName)
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/form"
# 二进制方式打开图片文件
f = open(imgi, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token =self.access_token
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
result=response.json()['forms_result'][0]["body"]
for i in result:
#获取内容坐标
columni=i['column']+1
rowi = i['row']+1
words=i['words']
sheet.cell(row=rowi, column=columni).value =words
self.workbook.save(self.excelpath)
self.workbook.close()
print("图片{}写入完成".format(j))
if __name__=="__main__":
resultPath="结果保存路径"#excel
imgPath="图片路径"#jpg
at="申请的token"
Wzsb1=Wzsb(resultPath,imgPath,at)
Wzsb1.getResult()
Wzsb1.deletNullRow()