IFlyFace

概述

本插件封装了讯飞SDK的人脸识别功能,人脸识别可以检测出照片或者摄像头中的人脸和关键点,支持多张人脸检测。

为了获得较高的准确率,请确保输入的图片满足以下要求

  • 图片为彩色,PNG、JPG、BMP格式的图片
  • 图片大小应超过100*100像素,可以允许一定程度的侧脸,为保证识别准确率,最好使用正脸图片。
  • 均匀光照,可允许部分阴影。
  • 脸部尽量无遮挡,眼镜等物品会一定程度上影响准确率。

注意:所有接口不可同时调用

使用此插件之前必须先配置 config 文件,配置方法如下:

  • 名称:IFlyFace
  • 参数:appId
  • 配置示例:
  <feature name="IFlyFace">
    <param name="appId" value="123ab67" />
    <param name="appId_android" value="123ab67" />
  </feature>
  • 字段描述:

    appId:注册应用IOS端的appId,注册应用请前往讯飞开放平台appId_android:注册应用Android端的appId,注册应用请前往讯飞开放平台

【android平台该插件配置】

动态库配置 ----- 附加插件制作

由于科大讯飞的 SDK 是动态生成的。所以需要开发者将动态生成的的 SDK 打包成一个附加自定义插件上传 YonBuilder移动开发 平台。制作方法如下:

下载 iIFlyFaceAppendix插件zip包并解压,将讯飞语音平台sdk中的的Msc.jar和Sunflower.jar放置在解压文件的source下,将sdk中armeabi目录下的的libmsc.so放置在解压文件的target下,重新打包成 iIFlyFaceAppendix.zip文件上传自定义插件,应用打包时勾选该插件。

onlineReg

人脸图像注册(reg):上传图像,验证图像的有效性,然后存储起来,作为数据源

onlineReg(params,callback(ret,err))

params

url:

  • 类型:字符串类型
  • 描述:图片本地路径;支持widget://、fs://

gid:

  • 类型:字符串类型
  • 描述:人脸模型id ,用于标识用户身份,长度为6-18个字符(由英文字母、数字、下划线组成,不能以数字开头)(仅android需要)

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true     //布尔类型;是否注册成功
    gid:''         //人脸模型id;status为true返回此字段
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

onlineDel

删除已存在人脸模型:根据模型id删除已存在人脸模型(仅支持Android)

onlineDel(params,callback(ret,err))

params

gid:

  • 类型:字符串类型
  • 描述:已存在模型id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
 status:true     //布尔类型;是否注册成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
 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及更高版本

onlineVerify

人脸图像验证(verify):通过与指定源图像比较,验证人脸相似性

onlineVerify(params,callback(ret,err))

params

url:

  • 类型:字符串类型
  • 描述:图片本地路径;支持widget://、fs://

gid:

  • 类型:字符串类型
  • 描述:人脸模型id

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true     //布尔类型;验证结果, 此字段为判断调用api是否成功;
    score:''       //字符类型;分数,分数越高相似度越高;
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

onlineDetect

脸图像检测(detect):能够检测出不同姿态方位的人脸在图中的位置。(仅ios支持)

onlineDetect(params,callback(ret,err))

params

url:

  • 类型:字符串类型
  • 描述:图片本地路径;支持widget://、fs://

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status:true     //布尔类型;检测结果
    faces:{[{
      confidence:10, //置信度
      attribute:{
        pose:{       //面部朝向
          pitch:0
        }
      },
      position:{     //面部的矩形区域
        bottom:6,
        left:6,
        right:6,
        top:6,
      }
    }]}      
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

onlineAlign

人脸图像聚焦(align):在给定人脸框下自动标定出两眼、鼻尖、嘴角的坐标(仅ios支持)

onlineAlign(params,callback(ret,err))

params

url:

  • 类型:字符串类型
  • 描述:图片本地路径;支持widget://、fs://

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    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:

  • 类型:JSON 对象
  • 内部字段:
{
    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

打开视频检测页面

openVideoDetection(params,callback(ret,err))(仅ios支持)

params

rect:

  • 类型:JSON 类型
  • 描述:(可选项)预览窗口的位置及大小
  • 内部字段:
{
      x: 0,    //(可选项)数字类型;富文本页面 x 坐标(相对于所属的 Window 或 Frame);默认值:0
      y: 0,    //(可选项)数字类型;富文本页面 y 坐标(相对于所属的 Window 或 Frame);默认值:0
      w: 320,  //(可选项)数字类型;富文本页面宽(相对于所属的 Window 或 Frame);默认值:屏幕宽度
      h: 300,  //(可选项)数字类型;富文本页面高(相对于所属的 Window 或 Frame);默认值:300
}

isDetect:

  • 类型:布尔类型
  • 描述:(可选项)是否绘制脸部矩形轮廓
  • 默认:true

isAlign:

  • 类型:布尔串类型
  • 描述:(可选项)是否绘制脸部关键点
  • 默认:true

color:

  • 类型:字符串类型
  • 描述:(可选项)检测到人脸时绘画矩形区域和关键点颜色;支持 rgb、rgba、#;isDetect或者isAlign都为false时此字段无效
  • 默认:#FF0000

fixedOn:

  • 类型:字符串类型
  • 描述:(可选项)插件添加到指定 frame 的名字(只指 frame,传 window 无效)
  • 默认:插件依附于当前 window

fixed:

  • 类型:布尔
  • 描述:(可选项)插件是否随所属 window 或 frame 滚动
  • 默认值:true(不随之滚动)

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 注意:detect和align不会同时返回
  • 内部字段:
{
    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:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

skipCamera

切换摄像头,当前为前摄像头,切换为后摄像头,当前为后摄像头,切换为前摄像头(仅ios支持)

skipCamera()

示例代码

var IFlyFace = api.require('IFlyFace');
IFlyFace.skipCamera();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

close

关闭视频检测页面

close()(仅ios支持)

示例代码

var IFlyFace = api.require('IFlyFace');
IFlyFace.close();

可用性

iOS系统

可提供的1.0.0及更高版本

creatGroup

创建组(仅支持Android)

创建出来的组用来存放人脸模型,存放多个人脸模型可以用来1:N用来进行一对多人脸校验

creatGroup(params,callback(ret,err))

params

groupName:

  • 类型:字符串类型
  • 描述:创建的组名

gid:

  • 类型:字符串类型
  • 描述:已创建人脸模型id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{

    status:true     //布尔类型;是否创建成功
    groupId:''         //字符串类型;组id
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

delGroup

删除已有组(仅支持Android)

delGroup(params,callback(ret,err))

params

groupId:

  • 类型:字符串类型
  • 描述:已存在组id

gid:

  • 类型:字符串类型
  • 描述:人脸模型id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
   status:true     //布尔类型;是否删除成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

addToGroup

添加人脸模型到指定组(仅支持Android)

addToGroup(params,callback(ret,err))

params

gid:

  • 类型:字符串类型
  • 描述:人脸模型id

groupId:

  • 类型:字符串类型
  • 描述:已存在组id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
   status:true     //布尔类型;是否添加成功
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

delFromGroup

人脸模型从指定组移除(仅支持Android)

delFromGroup(params,callback(ret,err))

params

gid:

  • 类型:字符串类型
  • 描述:人脸模型id

groupId:

  • 类型:字符串类型
  • 描述:已存在组id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
   status:true     //布尔类型;是否删除成功
   gid:''  //字符串类型;被移除的id
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

detectN

1:N检测(仅支持Android)

detectN(params,callback(ret,err))

params

url:

  • 类型:字符串类型
  • 描述:图片本地路径;支持widget://、fs://

groupId:

  • 类型:字符串类型
  • 描述:已存在组id

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
   status:true     //布尔类型;是否删除成功
   candidates:[] //jsong数组
   
   [{
   "model_id":"xxxxxxxx",//模型id
   "decision":"accepted",//是否是一个人脸
   "score":88.888888,//相似度
   "user":"user_name"}]
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    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及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/04/24