以图片形式的EXCEL表格为例,信息读取我们使用百度文字识别OCR
来实现,百度接口提供了免费额度,基本满足日常使用,下面来具体看一下如何使用百度Excel识别。
Python 版的 SDK 安装很简单
pip install baidu-aip
创建应用需要一个百度或百度云账号,注册登录地址为:https://login.bce.baidu.com/
登录后将鼠标移到登录头像位置,在弹出菜单中点击用户中心
,
如图所示:
进入需选一下相应信息,如图所示:
选完之后点保存即可。
接着将鼠标移到左侧>
符号位置,再选人工智能
,点击文字识别
,如图所示:
点击之后会进到如下所示图中:
现在,我们就可以点击创建应用
了,之后进到如下所示图中:
从上图中我们可以看出百度文字识别OCR
能够识别的信息类别非常多,也就是说不只是识别表格。
如果你有其他信息识别的需求也是可以通过它来快速实现的。
这里我们填一下应用名称
和应用描述
,填完之后点立即创建即可。
创建完成后返回应用列表,如下图所示:
记下一下AppID
&API Key
&Secret Key
这三个值,调用接口时使用。
导入所需模块
# 图片识别 from aip import AipOcr # 时间模块 import time # 网页获取 import requests # 操作系统接口模块 import os
为了能够对图片进行批量处理,定义get_image(image_path)函数获取对应文件夹中所有图片。
# 获取文件夹中所有图片 def get_image(image_path): images=[] # 存储文件夹内所有文件的路径(包括子目录内的文件) for root, dirs, files in os.walk(work_path): path = [os.path.join(root, name) for name in files] images.extend(path) return images
定义Image_Excel(APP_ID,API_KEY,SECRET_KEY)函数,获取图片中表格
def Image_Excel(APP_ID,API_KEY,SECRET_KEY): # 调用百度AI接口 client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 循环遍历文件家中图片 images=get_image(image_path) for image in images: # 以二进制方式打开图片 img_open=open(image,'rb') # 读取图片 img_read = img_open.read() # 调用表格识别模块识别图片 table = client.tableRecognitionAsync(img_read) # 获取请求ID request_id = table['result'][0]['request_id'] #获取表格处理结果 result = client.getTableRecognitionResult(request_id) # 处理状态是“已完成”,获取下载地址 while result['result']['ret_msg'] != '已完成': time.sleep(2) # 暂停2秒再刷新 result = client.getTableRecognitionResult(request_id) download_url = result['result']['result_data'] print(download_url) # 获取表格数据 excel_data = requests.get(download_url) # 根据图片名字命名表格名称 xlsx_name = image.split(".")[0] + ".xlsx" # 新建excel文件 xlsx = open(xlsx_name, 'wb') # 将数据写入excel文件并保存 xlsx.write(excel_data.content)
主函数定义
if __name__=='__main__': image_path = input('请输入图片所在文件夹路径:') APP_ID=input('APP_ID:') API_KEY=input('API_KEY:') SECRET_KEY=input('SECRET_KEY') Image_Excel(APP_ID,API_KEY,SECRET_KEY)
到此这篇关于Python调用百度AI实现图片表格识别功能的文章就介绍到这了,更多实用小工具请关注公众号【紫电的学习笔记】
注意:
在开始前,需要检查图片的大小,必须在1K~4M之间,不然会报错“‘error_msg': ‘image size error, image is too big or too small, upper limit 4M, lower limit 1k, please check your param'”。
图片的清晰度会对识别结果产生影响
完整代码
# 图片识别 from aip import AipOcr # 时间模块 import time # 网页获取 import requests # 操作系统接口模块 import os image_path='' # 获取文件夹中所有图片 def get_image(): images=[] # 存储文件夹内所有文件的路径(包括子目录内的文件) for root, dirs, files in os.walk(image_path): path = [os.path.join(root, name) for name in files] images.extend(path) return images def Image_Excel(APP_ID,API_KEY,SECRET_KEY): # 调用百度AI接口 client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 循环遍历文件家中图片 images=get_image() for image in images: # 以二进制方式打开图片 img_open=open(image,'rb') # 读取图片 img_read = img_open.read() # 调用表格识别模块识别图片 table = client.tableRecognitionAsync(img_read) # 获取请求ID request_id = table['result'][0]['request_id'] #获取表格处理结果 result = client.getTableRecognitionResult(request_id) # 处理状态是“已完成”,获取下载地址 while result['result']['ret_msg'] != '已完成': time.sleep(2) # 暂停2秒再刷新 result = client.getTableRecognitionResult(request_id) download_url = result['result']['result_data'] print(download_url) # 获取表格数据 excel_data = requests.get(download_url) # 根据图片名字命名表格名称 xlsx_name = image.split(".")[0] + ".xls" # 新建excel文件 xlsx = open(xlsx_name, 'wb') # 将数据写入excel文件并保存 xlsx.write(excel_data.content) if __name__=='__main__': image_path = input('请输入图片所在文件夹路径:') APP_ID=input('APP_ID:') API_KEY=input('API_KEY:') SECRET_KEY=input('SECRET_KEY:') Image_Excel(APP_ID,API_KEY,SECRET_KEY)