IFlyFace

onlineReg onlineVerify onlineDAlign skipCamera creatGroup addToGroup detectN

概述

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

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

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

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

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

  • 名称:IFlyFace
  • 参数:appId
  • 配置示例:
  • 字段描述:

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

【android平台该模块配置】

动态库配置 ——- 附加模块制作

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

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

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

onlineReg(params,callback(ret,err))

params

url:

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

gid:

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

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.onlineReg({
  3. url:''
  4. },function(ret,err){
  5. if (ret.status) {
  6. alert(ret.gid);
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

onlineDel

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

onlineDel(params,callback(ret,err))

params

gid:

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

callback(ret, err)

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.onlineDel({
  3. url:''
  4. },function(ret,err){
  5. if (ret.status) {
  6. alert(ret.gid);
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

Android系统

可提供的1.0.0及更高版本

onlineVerify

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

onlineVerify(params,callback(ret,err))

params

url:

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

gid:

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

callback(ret,err)

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.onlineVerify({
  3. url:'',
  4. gid:''
  5. },function(ret,err){
  6. if (ret.status) {
  7. alert(ret.score);
  8. } else {
  9. alert(JSON.stringify(err));
  10. }
  11. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

onlineDetect

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

params

url:

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

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:true //布尔类型;检测结果
  3. faces:{[{
  4. confidence:10, //置信度
  5. attribute:{
  6. pose:{ //面部朝向
  7. pitch:0
  8. }
  9. },
  10. position:{ //面部的矩形区域
  11. bottom:6,
  12. left:6,
  13. right:6,
  14. top:6,
  15. }
  16. }]}
  17. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

可用性

iOS系统

可提供的1.0.0及更高版本

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

onlineAlign(params,callback(ret,err))

params

url:

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

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:true //布尔类型;标定结果
  3. faces:{[
  4. landmark:{ //关键点
  5. left_eye_center:{
  6. y: '229.428'
  7. },
  8. left_eye_left_corner: {
  9. x: '177.219',
  10. y: '230.914'
  11. },
  12. left_eye_right_corner: {
  13. x: '235.839',
  14. y: '236.793'
  15. },
  16. left_eyebrow_left_corner: {
  17. x: '155.253',
  18. y: '187.392'
  19. },
  20. left_eyebrow_middle: {
  21. x: '199.240',
  22. y: '182.701'
  23. },
  24. left_eyebrow_right_corner: {
  25. x: '246.582',
  26. y: '192.358'
  27. },
  28. mouth_left_corner: {
  29. x: '204.203',
  30. y: '386.777'
  31. },
  32. mouth_lower_lip_bottom: {
  33. x: '262.768',
  34. y: '416.832'
  35. },
  36. mouth_middle: {
  37. x: '263.705',
  38. y: '390.507'
  39. },
  40. mouth_right_corner: {
  41. x: '317.841',
  42. y: '390.864'
  43. },
  44. mouth_upper_lip_top: {
  45. x: '264.736',
  46. y: '367.996'
  47. },
  48. nose_bottom: {
  49. x: '267.811',
  50. y: '339.358'
  51. },
  52. nose_left: {
  53. y: '319.586'
  54. },
  55. nose_right: {
  56. x: '308.086',
  57. y: '323.936'
  58. },
  59. nose_top: {
  60. x: '271.755',
  61. y: '310.934'
  62. },
  63. right_eye_center: {
  64. x: '335.608',
  65. y: '234.335'
  66. },
  67. right_eye_left_corner: {
  68. x: '306.995',
  69. y: '238.703'
  70. },
  71. right_eye_right_corner: {
  72. x: '364.231',
  73. y: '240.307'
  74. },
  75. right_eyebrow_left_corner: {
  76. x: '300.652',
  77. y: '194.243'
  78. },
  79. right_eyebrow_middle: {
  80. x: '347.711',
  81. y: '188.787'
  82. },
  83. right_eyebrow_right_corner: {
  84. x: '391.572',
  85. y: '197.455'
  86. }
  87. }
  88. ]}
  89. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.onlineAlign({
  3. url:'',
  4. },function(ret,err){
  5. if (ret.status) {
  6. alert(JSON.stringify(ret));
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

iOS系统

可提供的1.0.0及更高版本

openVideoDetection

打开视频检测页面

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

params

rect:

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

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不会同时返回
  • 内部字段:
  1. {
  2. status:true //布尔类型;标定结果
  3. faces:{[
  4. position:{ //面部的矩形区域
  5. bottom:6,
  6. left:6,
  7. right:6,
  8. top:6,
  9. },
  10. landmark:{ //关键点
  11. left_eye_center:{
  12. x: '209.739',
  13. y: '229.428'
  14. },
  15. left_eye_left_corner: {
  16. x: '177.219',
  17. y: '230.914'
  18. },
  19. left_eye_right_corner: {
  20. x: '235.839',
  21. y: '236.793'
  22. },
  23. left_eyebrow_left_corner: {
  24. x: '155.253',
  25. y: '187.392'
  26. },
  27. left_eyebrow_middle: {
  28. x: '199.240',
  29. y: '182.701'
  30. },
  31. left_eyebrow_right_corner: {
  32. x: '246.582',
  33. y: '192.358'
  34. },
  35. mouth_left_corner: {
  36. x: '204.203',
  37. y: '386.777'
  38. },
  39. mouth_lower_lip_bottom: {
  40. x: '262.768',
  41. y: '416.832'
  42. },
  43. mouth_middle: {
  44. x: '263.705',
  45. y: '390.507'
  46. },
  47. mouth_right_corner: {
  48. x: '317.841',
  49. y: '390.864'
  50. },
  51. mouth_upper_lip_top: {
  52. x: '264.736',
  53. y: '367.996'
  54. },
  55. x: '267.811',
  56. y: '339.358'
  57. },
  58. nose_left: {
  59. x: '225.449',
  60. y: '319.586'
  61. },
  62. nose_right: {
  63. x: '308.086',
  64. y: '323.936'
  65. },
  66. nose_top: {
  67. x: '271.755',
  68. y: '310.934'
  69. right_eye_center: {
  70. x: '335.608',
  71. y: '234.335'
  72. },
  73. right_eye_left_corner: {
  74. x: '306.995',
  75. y: '238.703'
  76. },
  77. right_eye_right_corner: {
  78. x: '364.231',
  79. y: '240.307'
  80. },
  81. right_eyebrow_left_corner: {
  82. x: '300.652',
  83. y: '194.243'
  84. },
  85. right_eyebrow_middle: {
  86. x: '347.711',
  87. y: '188.787'
  88. },
  89. right_eyebrow_right_corner: {
  90. x: '391.572',
  91. y: '197.455'
  92. }
  93. }
  94. ]}
  95. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.openVideoDetection({
  3. rect:{
  4. x: 0,
  5. y: 0,
  6. w: 320,
  7. h: 500,
  8. },
  9. },function(ret,err){
  10. if (ret.status) {
  11. alert(JSON.stringify(ret));
  12. } else {
  13. alert(JSON.stringify(err));
  14. }
  15. });

可用性

iOS系统

可提供的1.0.0及更高版本

skipCamera

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

skipCamera()

示例代码

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

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

close

关闭视频检测页面

close()(仅ios支持)

示例代码

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

可用性

iOS系统

可提供的1.0.0及更高版本

creatGroup

创建组(仅支持Android)

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

creatGroup(params,callback(ret,err))

params

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

gid:

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

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status:true //布尔类型;是否创建成功
  3. groupId:'' //字符串类型;组id
  4. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

可用性

Android系统

可提供的1.0.0及更高版本

delGroup

删除已有组(仅支持Android)

delGroup(params,callback(ret,err))

params

groupId:

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

gid:

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

callback(ret, err)

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.delGroup({
  3. groupId:''
  4. },function(ret,err){
  5. if (ret.status) {
  6. alert(ret.gid);
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

Android系统

可提供的1.0.0及更高版本

addToGroup

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

addToGroup(params,callback(ret,err))

params

gid:

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

groupId:

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

callback(ret, err)

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.addToGroup({
  3. gid:'',
  4. groupId:''
  5. },function(ret,err){
  6. if (ret.status) {
  7. alert(ret.gid);
  8. } else {
  9. alert(JSON.stringify(err));
  10. }
  11. });

可用性

Android系统

可提供的1.0.0及更高版本

delFromGroup

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

delFromGroup(params,callback(ret,err))

params

gid:

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

groupId:

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

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码
  3. msg:'' //错误原因
  4. }

示例代码

  1. var IFlyFace = api.require('IFlyFace');
  2. IFlyFace.delFromGroup({
  3. gid:'',
  4. groupId:''
  5. },function(ret,err){
  6. if (ret.status) {
  7. alert(ret.gid);
  8. } else {
  9. alert(JSON.stringify(err));
  10. }
  11. });

可用性

Android系统

可提供的1.0.0及更高版本

detectN

1:N检测(仅支持Android)

detectN(params,callback(ret,err))

params

url:

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

groupId:

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

callback(ret, err)

ret:

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

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:0 //错误码

可用性

可提供的1.0.0及更高版本