【本文出自 APICloud 官方论坛,感谢鲍永道的分享。】
首先介绍下百度人脸识别模块(baiduFaceRec):baiduFaceRec 模块封装了百度 AI 人脸识别功能,使用此模块可实现百度人脸检测(包括 age,beauty,expression,faceshape,gender,glasses,landmark,race,quality,facetype 信息)、人脸对比功能(比对两张图片中人脸的相似度,并返回相似度分值)。暂仅支持 android 平台。
不啰嗦,直接上代码:<!DOCTYPE html><html xmlns=”http://www.w3.org/1999/html"><head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″/>
<meta name=”viewport”
content=”maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0″/>
<title>frame2</title>
<link rel=”stylesheet” href=”../css/api.css”>
<link rel=”stylesheet” href=”../css/aui.css”>
<style>
html, body {
background: #ffffff;
}
.my-card {
border: solid 1px #dddddd;
margin: 10px;
}
.aui-btn-block {
margin-bottom: 10px;
}
</style>
</head><body><section class=”aui-content-padded my-card”>
<div class=”aui-card-list”>
<div class=”aui-card-list-header”>
百度人脸识别(V3 版本)自定义模块
</div>
<div class=”aui-card-list-content-padded”>
人脸识别
</div>
<div class=”aui-card-list-footer”>
2018-06-03
</div>
</div>
</section><div class=”aui-content-padded”>
<p>
<div class=”aui-btn aui-btn-info aui-btn-block”> 获取 access_token</div>
</p>
<p>
<div class=”aui-btn aui-btn-info aui-btn-block”> 人脸检测 </div>
</p>
<p>
<div class=”aui-btn aui-btn-info aui-btn-block”> 人脸对比 </div>
</p>
</div></body></html><script src=”../script/api.js”></script><script>
var baiduFaceRec = null;
var UIAlbumBrowser = null;
apiready = function () {
baiduFaceRec = api.require(‘baiduFaceRec’);
UIAlbumBrowser = api.require(‘UIAlbumBrowser’);
};
// 获取 access_token
function getAuth() {
var params = {
ak: ‘your ak’,
sk: ‘your sk’
};
baiduFaceRec.getAuth(params, function (ret, err) {
if (ret) {
console.log(JSON.stringify(ret));
alert(‘access_token=’ + ret.access_token);
} else {
console.log(err.msg);
alert(‘ 错误信息:’ + err.msg);
}
})
}
// 人脸检测
function detect() {
// 先获取 access_token
var params = {
ak: ‘your ak’,
sk: ‘your sk’
};
baiduFaceRec.getAuth(params, function (ret, err) {
if (ret) {
console.log(JSON.stringify(ret));
var access_token = ret.access_token;
// 选择照片或拍照
api.actionSheet({
title: ‘ 选择照片 ’,
cancelTitle: ‘ 取消 ’,
buttons: [‘ 拍照 ’, ‘ 手机相册 ’]
}, function (ret, err) {
if (ret) {
console.log(ret.buttonIndex);
if (ret.buttonIndex != 3) {
var sourceType = ret.buttonIndex;
// 获取图片
api.getPicture({
sourceType: (sourceType == 1) ? ‘camera’ : ‘album’,
encodingType: ‘jpg’,
mediaValue: ‘pic’,
destinationType: ‘url’,
allowEdit: true,
saveToPhotoAlbum: false
}, function (ret, err) {
if (ret) {
console.log(ret.data);
var filePath = ret.data;
var params = {
filePath: filePath,
access_token: access_token
};
// 人脸检测
baiduFaceRec.detect(params, function (ret, err) {
if (ret) {
console.log(JSON.stringify(ret));
alert(‘ 人脸检测数据 ’ + JSON.stringify(ret.result.face_list));
} else {
console.log(err.msg);
}
})
} else {
console.log(JSON.stringify(err));
alert(JSON.stringify(err));
}
})
} else {
return false;
}
}
});
} else {
console.log(err.msg);
alert(‘ 错误:’ + ret.msg);
}
});
}
// 人脸对比
function match() {
// 先获取 access_token
var params = {
ak: ‘your ak’,
sk: ‘your sk’
};
baiduFaceRec.getAuth(params, function (ret, err) {
if (ret) {
console.log(JSON.stringify(ret));
var access_token = ret.access_token;
// 得到对比图片
UIAlbumBrowser.open({
max: 2,
styles: {
bg: ‘#fff’,
mark: {
icon: ”,
position: ‘bottom_left’,
size: 20
},
nav: {
bg: ‘rgba(0,0,0,0.6)’,
titleColor: ‘#fff’,
titleSize: 18,
cancelColor: ‘#fff’,
cancelSize: 16,
finishColor: ‘#fff’,
finishSize: 16
}
},
rotation: true
}, function (ret) {
if (ret) {
var filePath1 = ret.list[0].path;
var filePath2 = ret.list[1].path;
var params = {
filePath1: filePath1,
filePath2: filePath2,
access_token: access_token
};
// 人脸对比
baiduFaceRec.match(params, function (ret, err) {
if (ret) {
console.log(JSON.stringify(ret));
alert(‘ 人脸检测数据 ’ + JSON.stringify(ret));
} else {
console.log(err.msg);
}
})
}
});
} else {
console.log(err.msg);
alert(‘ 错误:’ + ret.msg);
}
});
}
</script> 使用模块前需要先到百度 AI 开发者中心创建应用,获取 ak 和 sk,然后进行身份验证, 获取返回的 access_token,建议每次进行人脸识别接口时先获取 access_token(30 期限),然后每次请求识别接口也传入 access_token,这样保证每次都请求 ok。
另外的两个人脸识别接口,一个是人脸识别,一个是人脸对比。
人脸识别主要是识别人的脸部相关参数,对应的参数很多,我就不一一说明了,文档有详细说明。另外就是人脸对比,对比两张脸的相似度值,可以根据相似度值来判断两张人脸是否是同一个人,在项目上应用于人脸对比验证,应该会使用的比较多。