现在免费的文字识别软件比较多,例如天若文字识别,QQ文字识别等,但是免费识别表格的软件却并不多。QQ文字识别可以识别出表格,但是效果不尽如人意。百度人工智能的文字识别模块每天有50000次的免费试用机会,据我的经验,识别效果也好于QQ,因此,申请一个百度人工智能接口,用python编个表格识别程序是不错的选择。以下例程中,为避免私密信息泄露,在程序同一目录下创建了一个baidu_keys.py文件,保存了我的百度人工智能客户端连接秘钥。
from aip import AipOcr #导入AipOcr模块,用于做文字识别
import time #时间模块
import requests #用于下载识别结果
import io #用于创建写入剪贴板中的图像数据的字节数组
from PIL import ImageGrab #用于获取剪贴板上的图像数据
import keyboard #用于注册热键
import win32ui, win32con #用于弹出保存excel文件对话框
import sys
from baidu_keys import * #保存百度人工智能客户端注册信息
# APP_ID = baidu_keys.APP_ID
# API_KEY = baidu_keys.API_KEY
# SECRET_KEY = baidu_keys.SECRET_KEY
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def table_ocr():
print('开始识别...')
image = ImageGrab.grabclipboard()
if image != None:
img_bytes = io.BytesIO()
image.save(img_bytes, format='png')
table = client.tableRecognitionAsync(img_bytes.getvalue())
request_id = table['result'][0]['request_id']
#判断识别是否完成,直到完成才根据请求ID获取Excel下载路径
result = client.getTableRecognitionResult(request_id) #通过ID获取识别结果
while result['result']['ret_msg'] != '已完成': #如果状态是“已完成”,才能获取下载地址
time.sleep(2) #暂停2秒再刷新
result = client.getTableRecognitionResult(request_id) #持续刷新,直到满足条件
download_path = result['result']['result_data']
#下载Excel文件
excel = requests.get(download_path)
#指定识别结果保存位置及文件名
win32ui.MessageBox('请指定识别文件保存位置及文件名...')
flags = win32con.OFN_OVERWRITEPROMPT
dlg = win32ui.CreateFileDialog(0, 'xls', '识别结果', flags, "Excel Files (*.xls)|*.xls;*.xlsx||", None) #0表示保存文件对话框;1表示打开文件对话框
dlg.DoModal()
file = dlg.GetPathName()
#打开文件并写入内容
with open(file, 'wb') as excel_file:
excel_file.write(excel.content)
else:
print('系统剪贴板中没有图形数据。')
print('识别完成...')
if __name__ == '__main__':
print('截图复制到剪贴板后按shift+esc识别表格。\n按cmd+esc退出程序。')
keyboard.add_hotkey('shift+esc', table_ocr)
keyboard.wait('cmd+esc')
sys.exit()