微信小程序--百度EasyDL定制API的使用

前言

很多小伙伴在百度EasyDL中定制了属于自己的API后,在API开发文档中,没有看到适用于微信小程序的开发文档。海轰在开发过程中,也是在这里走了很多弯路的,这里来总结一下。

使用API

1、在控制台创建应用。主要下图中红线圈起来的东西很重要
前面在官网训练模型海轰就不多说了,还是很简单的,按照步骤就行。
微信小程序--百度EasyDL定制API的使用_第1张图片
2、记得开权限,一定要开权限,默认是打开
微信小程序--百度EasyDL定制API的使用_第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编码,而且,必须去掉头部
微信小程序--百度EasyDL定制API的使用_第3张图片
哎,这里我也是粗心,没有看到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"
          })
        }
      }) 
    }
  })
},

你可能感兴趣的:(微信小程序)