标题摘要内容
API:客户端调用百度API
来源:宇课堂 | 作者:天宇老师 | 发布时间: 2020-01-17 | 4229 次浏览 | 分享到:

#功能梗概:

定制软件或客户端要使用EasyDL平台https://ai.baidu.com/ai-doc/IMAGERECOGNITION/7k3bcxdn8训练好的模型(本文用“精确识别鸢尾花应用“),需要通过服务端提供的鉴权URL解析访问令牌(access_token),识别调用POST命令请求EasyDL平台提供的模型API请求地址。

APP实现1拍摄植物或者从图库中提取照片的方式,2讲图片使用Base64解码后,3传回EasyDL中的模型应用,4读取返回的JSON键值对,赋到文本框中。

 

#专业用语:

POSTPOST请求是http协议请求的一种。服务端通常是根据请求头headers)中的 Content-Type 字段来获知请求中消息主体的编码方式,再对主体进行解析。因此POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。主要有四种方式:application/x-www-form-urlencodedmultipart/form-data、raw(application/jsontext/xml)。

 

URL统一资源定位符。它是WWW的统一资源定位标志,就是指网络地址。

 

access_token访问令牌。EasyDL平台提供的access_token有效期为30天。需要使用创建应用所分配到的API KeySecret Key,进行Access Token的生成。

获取access_token:

grant_type: 必须参数,固定为client_credentials;

client_id: 必须参数,应用的API Key;

client_secret: 必须参数,应用的Secret Key

获取鉴权格式:https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK&client_secret=【百度云应用的SK

注意:确保无空格

 

JSON是一种轻量级的数据交换格式。

JSON 是字符串表示的JS 对象:

var obj = {a: 'Hello', b: 'World'}; //是一个对象,注意键名也可以使用引号包裹

var json = '{"a": "Hello", "b": "World"}'; //是一个 JSON 字符串,本质是一个字符串

JS对象常用类型是对象和数组:

对象:使用花括号{} 包裹起来的内容,数据结构为 {key1value1, key2value2, ...} 的“键值对”结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。

数组:使用方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是使用索引更多。同样,值的类型可以是任意类型。

 

#获取访问令牌(access_token):

百度提供鉴权请求地:https://aip.baidubce.com/oauth/2.0/token

针对“精确识别鸢尾花应用“,按照请求格式替换API KeySecret Key

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=txf5wKri3ABOVSq7Yz9VFkOZ&client_secret=4TN4ik****q

注意:每次请求将获得不同的access_token


Python调用示例
#通用植物识别
import base64
 
'''
植物识别
'''
 
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())
 
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:
    print (response.json())