python调用百度AI识别文字和表格

python调用百度AI识别文字和表格

获取账户信息

1、需要先注册百度AI,获得ID和密钥。百度AI社区关于注册的详细说明:https://ai.baidu.com/forum/topic/show/867951

只需走到“1.6 获取密钥”即可。然后记录下自己的APP_ID、API_KEY、SECRET_KEY,就可以开始了。界面如下。每个ID每天可免费识别200次
在这里插入图片描述
关于免费额度的详细说明连接
2、安装 百度AI库。电脑运行cmd, 输入 “pip install baidu-aip”

文字识别

glob库用于获得指定路径下的指定后缀的文件,比如如下指定了.png后缀的文件,并全部提取出来了。

填入你申请的ID和KEY,client = AipOcr()是固定写法。
然后遍历待处理的图片,逐个处理。先用二进制方式rb打开,然后读取
再调用百度AI进行识别,并将识别结果存入message变量。
message是一个大字典,我们需要的内容在键'words_result'对应的值里,它的值是一个大列表,列表里又有N多键值对,键都是“words”,值就是AI从图片上识别出来的内容。通过message['words_result'][0]['words']就能提取第一行文字了。逐行提取,并存入文本文件。

from aip import AipOcr   #导入AipOcr模块,用于做文字识别
import glob


APP_ID = '按上面操作申请'
API_KEY = '按上面操作申请'
SECRET_KEY = '按上面操作申请'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


files = glob.glob(r'.\data\图片集1\*.png')

txt_file = open('.\data\图片集1文本.txt', 'a')

i=0
for file in files:
    pic = open(file,'rb')  #以二进制(rb)打开
    img = pic.read()       #读取
    message = client.basicGeneral(img)  #调用百度AI识别图片中的文字
    i+=1
    print('------------第{}页-------------'.format(i))
    txt_file.write('------------第{}页-------------\n'.format(i)) 
    for words in message['words_result']:
        word = words['words']   #提取文字
        print(word,'\n')

        txt_file.write(word+'\n')

txt_file.close()

表格识别

百度人工智能的tableRecognitionAsync接口。接口说明网址:https://cloud.baidu.com/doc/OCR/s/3k3h7yeqa 。
用Python调用表格识别模块识别表格文档的扫描件。在开始前,需要检查图片的大小,必须在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 
APP_ID = '按上面操作申请'
API_KEY = '按上面操作申请'
SECRET_KEY = '按上面操作申请'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
 
pic = open("./data/表格图片.jpg",'rb') #以二进制方式打开图片
img = pic.read() #读取
table = client.tableRecognitionAsync(img)    #调用表格识别模块
print(table)

在这里插入图片描述
调用表格识别模块tableRecognitionAsync(),并将返回值存入变量table中。得到table是一个字典,其中有2个键,一个叫result,一个叫log_id。我们需要的是result中的request_id,通过这个ID,可以获取识别完成后所保存的Excel表格的下载地址。提取request_id。

request_id = table['result'][0]['request_id']
request_id
#'24937115_2892703'

然后,就可以通过request_id查询Excel表格的下载地址了。将request_id传入getTableRecognitionResult()就能获取结果。打印一下结果result,就能看到下面的内容。其中result_data对应的那个网址就是Excel表格的下载地址。将那个网址复制粘贴到浏览器,就能下载包含识别结果的Excel文件了。这个Excel文件有6张工作表,具体包含与图片中表格内容的对应关系如下。body储存表格部分的内容,header储存表头的文字,footer储存表尾的文字。

就可以通过request_id查询Excel表格的下载地址了。将request_id传入getTableRecognitionResult()就能获取结果。打印一下结果result,就能看到下面的内容。其中result_data对应的那个网址就是Excel表格的下载地址。将那个网址复制粘贴到浏览器,就能下载包含识别结果的Excel文件了。这个Excel文件有6张工作表,具体包含与图片中表格内容的对应关系如下。body储存表格部分的内容,header储存表头的文字,footer储存表尾的文字。
在这里插入图片描述

result = client.getTableRecognitionResult(request_id)
print(result)

批量识别和Excel文件的自动下载

#获取路径下所有图片文件,并存入列表
import os
work_path = "data\图片\\"
pictures=[] # 存储文件夹内所有文件的路径(包括子目录内的文件)
for root, dirs, files in os.walk(work_path):
    path = [os.path.join(root, name) for name in files]
    pictures.extend(path)
pictures

在提取Excel下载路径之前,需要先判断识别是否完成。这是通过识别结果返回的字典中的’ret_msg’对应的值来判断的。只有当它是“已完成”时,才能获得下载链接。此处用了while循环,每隔2秒刷新一下状态,直到状态是“已完成”时,才提取链接。然后使用requests.get()获取下载链接信息。

from aip import AipOcr  #导入AipOcr模块,用于做文字识别
import time #时间模块
import requests #用于HTTP请求


APP_ID = '按上面操作申请'
API_KEY = '按上面操作申请'
SECRET_KEY = '按上面操作申请'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


#提交识别请求,并储存所有请求ID
for picture in pictures:
    pic = open(picture,'rb') #以二进制方式打开图片
    img = pic.read() #读取
    table = client.tableRecognitionAsync(img)    #调用表格识别模块
    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_name = picture.split(".")[0] + ".xls" #让excel文件的名字与图片相同
    excel = requests.get(download_path) #抓取下载链接
    file = open(excel_name, 'wb') #新建excel文件
    file.write(excel.content) #写入excel文件并保存
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值