一、需求
在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导入插件
第二种直接在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'
})
这里的APIKey和secretKey需要我们在百度智能云平台上创建应用获得
3.2 申请额度引用接口
如果引用api只是为了进行个人测试学习的话,那么我建议可以申请免费额度测试,如果访问量比较大的话那么就需要付费申请额度了,注意,必须申请额度哦,要不然会调用api失败哦
我这里申请的是免费
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'
})
3.4 调用api返回结果
其中score为人脸相似度得分,可以作为我们的判断标准,推荐阈值80分