很多小伙伴在百度EasyDL中定制了属于自己的API后,在API开发文档中,没有看到适用于微信小程序的开发文档。海轰在开发过程中,也是在这里走了很多弯路的,这里来总结一下。
1、在控制台创建应用。主要下图中红线圈起来的东西很重要
前面在官网训练模型海轰就不多说了,还是很简单的,按照步骤就行。
2、记得开权限,一定要开权限,默认是打开
3、在微信小程序中使用API
found:function(img)
{
var k=this
wx.request({
url: 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=“填自己的API Key”&client_secret=“填自己的Secret Key”', //仅为示例,并非真实的接口地址
data: {},
header: {
'Content-type': 'application/json' // 默认值
},
success(res) {
console.log(res.data.access_token)
wx.request({
url: '“填自己的接口地址”?access_token=' + res.data.access_token,
method: 'post',
data: {
image: img
},
header: {
"content-type": "application/json",
},
success(res) {
wx.hideLoading();
if (results) {
//识别成功
})
} else {
wx.showToast({
icon: 'none',
title: '没有认出来,可以再试试~',
})
}
},
fail(error) {
wx.hideLoading();
console.log(error);
wx.showToast({
icon: 'none',
title: '请求失败了,请确保网络正常,重新试试~',
})
}
});
}
})
}
注意:在这里我遇到有两个坑,第一次错误提示:没有数据权限,这是因为我们在使用API的时候,参数必须需要一个token值,而且这个token必须是实时从百度获取的,虽然我们看到有些时候是一样的,但是必须实时获取。下面用云函数封装一下获取token值
const rq = require('request-promise')
//
/**
* 获取百度ai AccessToken
*/
exports.main = async(event, context) => {
let apiKey = '自己apikey',
grantType = 'application/json',
secretKey = '自己的secretKey',
url = 'https://aip.baidubce.com/oauth/2.0/token'
return new Promise(async(resolve, reject) => {
try {
let data = await rq({
method: 'POST',
url,
form: {
"grant_type": grantType,
"client_secret": secretKey,
"client_id": apiKey
},
json: true
})
resolve({
code: 0,
data,
info: '操作成功!'
})
} catch (error) {
console.log(error)
if (!error.code) reject(error)
resolve(error)
}
})
}
第二个坑,这里接口参数有个image,需要是base64编码,而且,必须去掉头部!
哎,这里我也是粗心,没有看到API开发文档,一直错
下面是获取符合要求base64的代码(自己可以删除一些没有用的,这只是个实验demo)
chooseimg:function(){
var img
var img_base
var k=this
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success(res) {
// tempFilePath可以作为img标签的src属性显示图片
img = res.tempFilePaths
wx.getFileSystemManager().readFile({
filePath: img[0],
encoding: "base64",
success: res => {
console.log(res.data)
k.found(res.data);
//that.req(that.accessToken, res.data)
},
fail: res => {
wx.hideLoading()
wx.showToast({
title: '拍照失败,未获取相机权限或其他原因',
icon: "none"
})
}
})
}
})
},