百度云接口应用示例
1. 接口介绍
百度云地址:点我访问
百度云上提供了多种的接口服务,包括语音识别、人体识别、人脸识别、文字识别、图像识别、图像搜索等,并且提供了大量的免费接口额度,一般是每天提供几百次的免费额度,我们以文字识别为例,百度云提供了如下接口:
API名称 | QPS(每秒请求数) | 调用量限制 |
通用文字识别(标准版) | 2 | 50000次/天免费 |
通用文字识别(标准含位置版) | 2 | 500次/天免费 |
通用文字识别(高精度版) | 2 | 500次/天免费 |
通用文字识别(高精度含位置版) | 2 | 50次/天免费 |
网络图片文字识别 | 2 | 500次/天免费 |
身份证识别 | 2 | 500次/天免费 |
银行卡识别 | 2 | 500次/天免费 |
驾驶证识别 | 2 | 200次/天免费 |
行驶证识别 | 2 | 200次/天免费 |
营业执照识别 | 2 | 200次/天免费 |
车牌识别 | 2 | 200次/天免费 |
表格文字识别-提交请求 | 1 | 50次/天免费 |
表格文字识别-获取结果 | 1 | 无限制 |
通用票据识别 | 2 | 200次/天免费 |
iOCR通用版(创建自定义识别模板) | 2 | 免费1000次 |
二维码识别 | 2 | 免费1000次 |
手写文字识别 | 2 | 50次/天免费 |
护照识别 | 2 | 免费500次 |
增值税发票识别 | 2 | 500次/天免费 |
数字识别 | 2 | 200次/天免费 |
名片识别 | 2 | 500次/天免费 |
火车票识别 | 2 | 50次/天免费 |
出租车票识别 | 2 | 50次/天免费 |
VIN码识别 | 2 | 免费1000次 |
定额发票识别 | 2 | 500次/天免费 |
出生证明识别 | 2 | 200次/天免费 |
户口本识别 | 2 | 200次/天免费 |
港澳通行证识别 | 2 | 200次/天免费 |
台湾通行证识别 | 2 | 200次/天免费 |
iOCR财会版 | 2 | 免费2000次 |
行程单识别 | 2 | 免费500次 |
车辆合格证识别 | 2 | 200次/天免费 |
保险单识别 | 2 | 免费500次 |
机动车销售发票识别 | 2 | 免费500次 |
公式识别 | 2 | 免费1000次 |
仪器仪表盘读数识别 | 2 | 免费1000次 |
文档版面分析与识别 | 2 | 免费1000次 |
网络图片文字识别(含位置版) | 2 | 免费1000次 |
当然,如果有额外的次数需求,或者需要超过每秒2次的并发,百度云也支持付费增购,价格是非常实惠的。
2. 开发准备
- 注册百度云账号在百度云控制台中创建应用,得到API Key和Secret Key!
- 开发语言我们选择Python,安装下列库
pip install pillow
- 服务器1台用来重新封装接口
3. 代码示例
代码示例中,我们使用百度云的 通用文字识别(标准版) 接口,文档地址:点我查看
import datetime
import requests
import warnings
from flask import Flask,request
import json
import base64
from PIL import Image
from io import BytesIO
warnings.filterwarnings("ignore")
# 百度云上应用的API Key
client_id = "xxxxx"
# 百度云上应用的Secret Key
client_secret = "xxxxx"
# 定义一个类,用来每2小时更新access_token
class setup:
def __init__(self):
self.t0 = ''
self.gettoken()
def timecheck(self):
self.t1 = datetime.datetime.now()
self.total_interval_time = (self.t1 - self.t0).total_seconds()
if self.total_interval_time > 2592000:
self.gettoken()
def gettoken(self):
self.url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
self.token = requests.get(self.url, data='', headers='', verify=False)
self.token = self.token.json()
self.token = self.token['access_token']
self.t1 = datetime.datetime.now()
self.t0 = self.t1
def s(self):
self.timecheck()
return self.token
# 定义一个函数,将简道云传过来的URL格式图片转为Base64编码
def download_img(img_url):
header={}
r = requests.get(img_url, headers=header, stream=True)
image = Image.open(BytesIO(r.content))
img_64 = base64.b64encode(BytesIO(r.content).read())
return img_64
# 定义一个函数,调用百度云的通用文字识别(标准版),来获取数据
def img_ocr(img_url):
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
img = download_img(img_url)
params = {"image":img}
access_token = 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:
return response.json()
# 实例化Flask类
app = Flask(__name__)
# 定义一个接口,用来和简道云前端事件进行交互
# 简道云表单上的图片控件发送值变动,触发事件传入数据至接口
# 简道云传入 {"image_url":xxx}
# 接口返回 {"words_result":xxx}
@app.route('/ocr', methods=['POST'])
def hello_world():
image_url = json.loads(request.data).get('image_url')
if image_url != '':
ocr_data = img_ocr(image_url)
words_result = ""
#由于百度云识别的隔行数据分布在不同的数组里面,我们稍微处理下
for each in ocr_data['words_result']:
words_result = words_result + each['words'] + '\n'
return json.dumps({"words_result":words_result})
else:
return json.dumps({"words_result":"无内容"})
if __name__ == '__main__':
# 程序开始时,实例化我们定义的类
init = setup()
# 每2小时更新access_token
token_ = init.s()
app.run(host='0.0.0.0',port=10000)
4. 前端事件配置
建立1个前端事件:
URL配置:
Header/Body设置:
返回值设置: