本插件封装了讯飞SDK的人脸识别功能,人脸识别可以检测出照片或者摄像头中的人脸和关键点,支持多张人脸检测。
为了获得较高的准确率,请确保输入的图片满足以下要求
注意:所有接口不可同时调用
使用此插件之前必须先配置 config 文件,配置方法如下:
<feature name="IFlyFace">
<param name="appId" value="123ab67" />
<param name="appId_android" value="123ab67" />
</feature>
【android平台该插件配置】
动态库配置 ----- 附加插件制作
由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义插件上传 YonBuilder移动开发 平台。制作方法如下:
下载 iIFlyFaceAppendix插件zip包并解压,将讯飞语音平台sdk中的的Msc.jar和Sunflower.jar放置在解压文件的source下,将sdk中armeabi目录下的的libmsc.so放置在解压文件的target下,重新打包成 iIFlyFaceAppendix.zip文件上传自定义插件,应用打包时勾选该插件。
人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源
onlineReg(params,callback(ret,err))
url:
gid:
ret:
{
status:true //布尔类型;是否注册成功
gid:'' //人脸模型id;status为true返回此字段
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.onlineReg({
url:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
删除已存在人脸模型:根据模型id删除已存在人脸模型(仅支持Android)
onlineDel(params,callback(ret,err))
gid:
ret:
{
status:true //布尔类型;是否注册成功
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.onlineDel({
url:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本
人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性
onlineVerify(params,callback(ret,err))
url:
gid:
ret:
{
status:true //布尔类型;验证结果, 此字段为判断调用api是否成功;
score:'' //字符类型;分数,分数越高相似度越高;
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.onlineVerify({
url:'',
gid:''
},function(ret,err){
if (ret.status) {
alert(ret.score);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。(仅ios支持)
onlineDetect(params,callback(ret,err))
url:
ret:
{
status:true //布尔类型;检测结果
faces:{[{
confidence:10, //置信度
attribute:{
pose:{ //面部朝向
pitch:0
}
},
position:{ //面部的矩形区域
bottom:6,
left:6,
right:6,
top:6,
}
}]}
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.onlineDetect({
url:'',
},function(ret,err){
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
} else {
api.alert({msg: JSON.stringify(err)});
}
});
iOS系统
可提供的1.0.0及更高版本
人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标(仅ios支持)
onlineAlign(params,callback(ret,err))
url:
ret:
{
status:true //布尔类型;标定结果
faces:{[
landmark:{ //关键点
left_eye_center:{
x: '209.739',
y: '229.428'
},
left_eye_left_corner: {
x: '177.219',
y: '230.914'
},
left_eye_right_corner: {
x: '235.839',
y: '236.793'
},
left_eyebrow_left_corner: {
x: '155.253',
y: '187.392'
},
left_eyebrow_middle: {
x: '199.240',
y: '182.701'
},
left_eyebrow_right_corner: {
x: '246.582',
y: '192.358'
},
mouth_left_corner: {
x: '204.203',
y: '386.777'
},
mouth_lower_lip_bottom: {
x: '262.768',
y: '416.832'
},
mouth_middle: {
x: '263.705',
y: '390.507'
},
mouth_right_corner: {
x: '317.841',
y: '390.864'
},
mouth_upper_lip_top: {
x: '264.736',
y: '367.996'
},
nose_bottom: {
x: '267.811',
y: '339.358'
},
nose_left: {
x: '225.449',
y: '319.586'
},
nose_right: {
x: '308.086',
y: '323.936'
},
nose_top: {
x: '271.755',
y: '310.934'
},
right_eye_center: {
x: '335.608',
y: '234.335'
},
right_eye_left_corner: {
x: '306.995',
y: '238.703'
},
right_eye_right_corner: {
x: '364.231',
y: '240.307'
},
right_eyebrow_left_corner: {
x: '300.652',
y: '194.243'
},
right_eyebrow_middle: {
x: '347.711',
y: '188.787'
},
right_eyebrow_right_corner: {
x: '391.572',
y: '197.455'
}
}
]}
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.onlineAlign({
url:'',
},function(ret,err){
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
} else {
api.alert({msg: JSON.stringify(err)});
}
});
iOS系统
可提供的1.0.0及更高版本
打开视频检测页面
openVideoDetection(params,callback(ret,err))(仅ios支持)
rect:
{
x: 0, //(可选项)数字类型;富文本页面 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;富文本页面 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w: 320, //(可选项)数字类型;富文本页面宽(相对于所属的 Window 或 Frame);默认值:屏幕宽度
h: 300, //(可选项)数字类型;富文本页面高(相对于所属的 Window 或 Frame);默认值:300
}
isDetect:
isAlign:
color:
fixedOn:
fixed:
ret:
{
status:true //布尔类型;标定结果
faces:{[
position:{ //面部的矩形区域
bottom:6,
left:6,
right:6,
top:6,
},
landmark:{ //关键点
left_eye_center:{
x: '209.739',
y: '229.428'
},
left_eye_left_corner: {
x: '177.219',
y: '230.914'
},
left_eye_right_corner: {
x: '235.839',
y: '236.793'
},
left_eyebrow_left_corner: {
x: '155.253',
y: '187.392'
},
left_eyebrow_middle: {
x: '199.240',
y: '182.701'
},
left_eyebrow_right_corner: {
x: '246.582',
y: '192.358'
},
mouth_left_corner: {
x: '204.203',
y: '386.777'
},
mouth_lower_lip_bottom: {
x: '262.768',
y: '416.832'
},
mouth_middle: {
x: '263.705',
y: '390.507'
},
mouth_right_corner: {
x: '317.841',
y: '390.864'
},
mouth_upper_lip_top: {
x: '264.736',
y: '367.996'
},
nose_bottom: {
x: '267.811',
y: '339.358'
},
nose_left: {
x: '225.449',
y: '319.586'
},
nose_right: {
x: '308.086',
y: '323.936'
},
nose_top: {
x: '271.755',
y: '310.934'
},
right_eye_center: {
x: '335.608',
y: '234.335'
},
right_eye_left_corner: {
x: '306.995',
y: '238.703'
},
right_eye_right_corner: {
x: '364.231',
y: '240.307'
},
right_eyebrow_left_corner: {
x: '300.652',
y: '194.243'
},
right_eyebrow_middle: {
x: '347.711',
y: '188.787'
},
right_eyebrow_right_corner: {
x: '391.572',
y: '197.455'
}
}
]}
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.openVideoDetection({
rect:{
x: 0,
y: 0,
w: 320,
h: 500,
},
},function(ret,err){
if (ret.status) {
api.alert({msg: JSON.stringify(ret)});
} else {
api.alert({msg: JSON.stringify(err)});
}
});
iOS系统
可提供的1.0.0及更高版本
切换摄像头,当前为前摄像头,切换为后摄像头,当前为后摄像头,切换为前摄像头(仅ios支持)
skipCamera()
var IFlyFace = api.require('IFlyFace');
IFlyFace.skipCamera();
iOS系统,Android系统
可提供的1.0.0及更高版本
关闭视频检测页面
close()(仅ios支持)
var IFlyFace = api.require('IFlyFace');
IFlyFace.close();
iOS系统
可提供的1.0.0及更高版本
创建组(仅支持Android)
创建出来的组用来存放人脸模型,存放多个人脸模型可以用来1:N用来进行一对多人脸校验
creatGroup(params,callback(ret,err))
groupName:
gid:
ret:
{
status:true //布尔类型;是否创建成功
groupId:'' //字符串类型;组id
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.creatGroup({
groupName:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本
删除已有组(仅支持Android)
delGroup(params,callback(ret,err))
groupId:
gid:
ret:
{
status:true //布尔类型;是否删除成功
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.delGroup({
groupId:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本
添加人脸模型到指定组(仅支持Android)
addToGroup(params,callback(ret,err))
gid:
groupId:
ret:
{
status:true //布尔类型;是否添加成功
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.addToGroup({
gid:'',
groupId:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本
人脸模型从指定组移除(仅支持Android)
delFromGroup(params,callback(ret,err))
gid:
groupId:
ret:
{
status:true //布尔类型;是否删除成功
gid:'' //字符串类型;被移除的id
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.delFromGroup({
gid:'',
groupId:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本
1:N检测(仅支持Android)
detectN(params,callback(ret,err))
url:
groupId:
ret:
{
status:true //布尔类型;是否删除成功
candidates:[] //jsong数组
[{
"model_id":"xxxxxxxx",//模型id
"decision":"accepted",//是否是一个人脸
"score":88.888888,//相似度
"user":"user_name"}]
}
err:
{
code:0 //错误码
msg:'' //错误原因
}
var IFlyFace = api.require('IFlyFace');
IFlyFace.detectN({
url:'',
groupId:''
},function(ret,err){
if (ret.status) {
alert(ret.gid);
} else {
api.alert({msg: JSON.stringify(err)});
}
});
Android系统
可提供的1.0.0及更高版本