关于uniapp百度人脸对比api的使用

623 阅读2分钟

一、需求

在uniapp项目开发中,需要在拍照或者本地选择图片并应用百度api进行人脸对比

二、步骤

1、拍照或选择图片

应用uniapp官方apiuni.chooseImage从本地相册选择图片或使用相机拍照

uni.chooseImage({
    count: 1,   // 最多可以选择的图片张数
    sizeType: ['original', 'compressed'],   // original 原图,compressed 压缩图
    sourceType: ['camera', 'album'],   // album 从相册选图,camera 使用相机
    success: (res) => {
        this.imageToBase64(res.tempFilePaths[0])
    }
})

2、将图片转成base64

第一步需要引入插件,地址:ext.dcloud.net.cn/plugin?id=1…

引入方法有两种,第一种是点击按钮选择使用HBuilderX导入插件

image.png

第二种直接在HBuilderX工作台里输入命令

npm i image-tools --save

接下来我们就可以引用插件里的方法pathToBase64将图像路径转换为base64

// 本地图片转base64
      imageToBase64(path) {
        pathToBase64(path)
        .then(base64 => {
          this.faseDetect(base64)
          })
          .catch(error => {
            console.error(error)
          })
      },

3、调用百度人脸对比api

3.1 申请access_token

在调用百度api之前我们首先要调用授权服务地址aip.baidubce.com/oauth/2.0/t… 得到Access_token

我这里是在云函数中请求其他http服务,所以使用uniCloud.httpclient,介绍文档uniapp.dcloud.net.cn/uniCloud/cf…

const res = await uniCloud.httpclient.request(url, {
    method: 'POST',
    data: {
      grant_type: 'client_credentials',
      client_id: APIKey,
      client_secret: secretKey
    },
    dataType: 'json'
  })

这里的APIKeysecretKey需要我们在百度智能云平台上创建应用获得

3.2 申请额度引用接口

如果引用api只是为了进行个人测试学习的话,那么我建议可以申请免费额度测试,如果访问量比较大的话那么就需要付费申请额度了,注意,必须申请额度哦,要不然会调用api失败哦

我这里申请的是免费

image.png

3.3 调用人脸对比api

万事俱备,接下来我们就可以调用api啦~

首先我们需要将两张base64的图片进行处理,去掉图片头

let photo1 = base64Photo1.replace(/^data:image\/\w+;base64,/, "")
let photo2 = base64Photo2.replace(/^data:image\/\w+;base64,/, "")

接下来调用接口,我这里使用的是v3版本,注意要加上access_token参数

let url = 'https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=' + access_token

请求方法为POST,请求参数中包含两张图片的信息,其中参数详见官网

const res = await uniCloud.httpclient.request(url, {
    method: 'POST',
    data: [{
        image: photo1,
        image_type: "BASE64",
        face_type: "LIVE",
        quality_control: "LOW",
        liveness_control: "LOW"
      },
      {
        image: photo2,
        image_type: "BASE64",
        face_type: "LIVE",
        quality_control: "LOW",
        liveness_control: "LOW"
      }
    ],
    contentType: 'json',
    dataType: 'json'
  })

image.png

image.png

3.4 调用api返回结果

image.png

其中score为人脸相似度得分,可以作为我们的判断标准,推荐阈值80分