# 百度开放平台API
# 配置文件
打开 uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js
文件,配置里面的
"openapi.baidu" 百度开放平台
// 开放平台api
"openapi":{
// 百度开放平台 (主要用于身份证识别,营业执照识别等API)
"baidu":{
"appid" : "", // 对应的API Key
"appsecret" : "" // 对应的Secret Key
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
配置完需要上传 uni-config-center
这个公共模块才会生效
API Key申请地址:传送门 (opens new window)
目前百度云是有免费版本的,基本也够用了。
# 【云函数】调用百度开放平台API
# 百度API通用接口(简易版)
优势:代码极简
缺点:部分接口不支持
/**
* 百度开放平台API通用接口
* 身份证识别为例 https://aip.baidubce.com/rest/2.0/ocr/v1/idcard
* @param {String} action 接口名 如: ocr/v1/idcard的部分
* @param {String} actionVersion 接口版本 默认2.0
* @param {object} header 请求头 默认 { "content-type": "application/x-www-form-urlencoded" }
* @param {object} data 请求数据
* 示例
*/
let requestRes = await vk.openapi.baidu.open.request({
action:"ocr/v1/idcard",
actionVersion: "2.0",
data:{
image:base64
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 百度API通用接口(通用版)
优势:支持所有接口
# 文本合成语音示例代码
// 获取tokne
let access_token = await vk.openapi.baidu.open.auth.getAccessToken();
// 发起请求
let buffer = await vk.request({
method: "POST",
url: "https://tsn.baidu.com/text2audio", // 请求地址
// 请求头
headers: {
"content-type": "application/x-www-form-urlencoded",
},
dataType: "default", // 如果对方返回的是二进制数据,则需要传设置为default
// 请求参数
data: {
tok: access_token,
tex: "你好,我是AI小助手",
cuid: "1",
ctp: 1,
lan: "zh",
spd: 5,
pit: 5,
vol: 5,
per: 0,
aue: 3
}
});
try {
// 如果buffer的长度小于500,基本上就是报错了,转json看下错误信息
if (buffer.length < 500) {
let err = JSON.parse(buffer.toString("utf-8"));
return {
code: err.err_no,
msg: err.err_msg,
err: err
}
}
} catch (err) {}
// 上传到云存储
let uploadFileRes = await uniCloud.uploadFile({
cloudPath: `${Date.now()}.mp3`,
fileContent: buffer
});
// 获得url地址
let url = uploadFileRes.fileID;
console.log('url: ', url);
return {
code: 0,
url
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 语音解析文本示例代码
格式支持:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)、m4a(压缩格式,仅支持极速版模型,m4a格式输入适用于微信小程序的录音文件,详见格式说明)。推荐pcm 采样率 :16000 固定值。 编码:16bit 位深的单声道。
百度服务端会将非pcm格式,转为pcm格式,因此使用wav、amr、m4a会有额外的转换耗时。
16k 采样率pcm文件样例下载 (opens new window) 16k 采样率wav文件样例下载 (opens new window) 16k 采样率amr文件样例下载 (opens new window) 16k 采样率m4a文件样例下载 (opens new window)
注意:微信小程序的录音文件格式是 m4a
// 解析语音
let mediaUrl = "https://mp-70255e58-5282-4b64-941f-006c17c560c8.cdn.bspapp.com/cloudstorage/95ee5952-7aef-4bf9-8b2c-15bd43eb5b7b.pcm";
// 获取文件的后缀名
let suffixName = mediaUrl.substring(mediaUrl.lastIndexOf(".") + 1);
// 文件转buffer
let buffer = await vk.request({
url: mediaUrl,
method: "GET",
dataType: "default",
});
// buffer转base64
let base64 = buffer.toString('base64');
// 获取token
let access_token = await vk.openapi.baidu.open.auth.getAccessToken();
// 请求接口
let requestRes = await vk.request({
method: "POST",
url: "https://vop.baidu.com/pro_api",
headers: {
"content-type": "application/json",
},
dataType: "json",
data: {
token: access_token,
format: suffixName,
rate: 16000,
channel: 1,
cuid: "001",
dev_pid: 80001,
speech: base64,
len: buffer.length,
}
});
if (requestRes.err_no !== 0) {
// 失败直接返回
return {
code: requestRes.err_no,
msg: requestRes.err_msg,
err: requestRes
}
}
// 得到文件内容,注意,这是一个数组
let result = requestRes.result;
console.log('result: ', result);
return {
code: 0,
msg: requestRes.err_msg,
result: requestRes.result
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 【前端】直接调用百度开放平台API
前端直接调用只有小程序和APP可以调用,H5有跨域限制
API通用接口
/**
* 百度开放平台通用请求接口
* @param {String} action 接口名称
* @param {String} actionVersion 接口版本名称 默认2.0
* @param {String} title loading文字
* @param {object} data 请求参数
* @param {String} success 成功回调
* @param {String} fail 失败回调
* @param {String} complete 完成回调
*/
vk.openapi.baidu.request({
action: 'ocr/v1/business_license',
actionVersion:"2.0",
title:"识别中...",
data: {
image:base64
},
success: (data) => {
this.data = data;
},
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
**更多接口(action名称)请查看: ** 点击前往百度开放平台API (opens new window)
注意:前端直接调用的
优势
- 1、请求速度更快
- 2、使用方便
- 3、无需再写云函数
- 4、省流量(省钱)云函数是按量扣费的
劣势
- 1、有token泄露风险,但此token并不会造成多大的危害。
如果是小程序,需要将以下域名加入到小程序的request域名白名单(去小程序后台加)
https://aip.baidubce.com
1
以下是前端使用的更快捷的API形式
/**
* 营业执照识别
* 以下data参数三选一即可
* @param {File} file 文件对象
* @param {String} image 图像base64编码后进行urlencode
* @param {String} url 图片完整URL
*
*/
vk.openapi.baidu.open.ocr.business_license({
title: "识别中...",
data: {
file: res.tempFiles[0]
},
success: (res) => {
this.data = res.data;
},
});
/**
* 身份证识别
* 以下data参数三选一即可
* @param {File} file 文件对象
* @param {String} image 图像base64编码后进行urlencode
* @param {String} url 图片完整URL
*/
vk.openapi.baidu.open.ocr.idcard({
title: "识别中...",
data: {
image: base64
},
success: (res) => {
this.data = res.data;
},
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34