bgnArcFace
来自于:布谷鸟模块工作室立即使用
active register compare search openRegister closeRegister openCompare closeCompare openSearch closeSearch addUser countUser clearAllUser removeUser getUser listUser 错误代码
概述
模块概述
bgnArcFace封装了ArcSoft虹软提供的离线人脸识别ArcFace v2.0 SDK,使用该模块可以轻松实现人脸识别功能,目前该模块只提供了人脸注册与人脸对比两个功能;虹软Face SDK支持活体检测有效防止使用静态图片的人脸攻击。最关键虹软Face SDK是免费提供的SDK。人脸采集与识别过程不需要任何服务端支持。
模块使用攻略
使用之前须从虹软AI开放平台申请开发者账号并创建应用,并在自己的应用下申请ArcFace 2.0 SDK,拿到APP_ID与SDK_KEY;注意安卓与iOS下的SDK_KEY不同,需要根据你自己的需求申请对应的SDK,虽然目前该模块只支持安卓系统但接下来我们会持续开发对iOS系统的支持。
使用此模块之前建议先配置 config.xml 文件,配置完毕,需通过云端编译生效,配置方法如下:
- 名称:bgnArcFace
- 参数:appId、sdkKey
- 配置示例:
<feature name="bgnArcFace">
<param name="appId" value="GUSLW8f8vZUDS3SiptSwur6dRJfKw8ejrc4sA7Zqg6eh"/>
<param name="sdkKey" value="CAcsn8YdyLGVJAPpx62uvmyHUR95TKvQZ5ezkffoMqxN"/>
</feature>
注意:sdkKey是指的安卓系统下的SDK KEY,开发者可以使用配置示例中的appId与sdkKey进行测试,但最后发布系统时使用自己的appId与sdkKey,因为这只是我们测试时使用的个人开发者帐号下的appId与sdkKey
模块接口
active
SDK激活
虹软的ArcFace人脸识别模块在安装到设备上后第一次使用需要对其进行联网激活操作,之后该设备在使用SDK时可以在离线网络状态下使用,但该接口并不是必须调用的接口,开发者可以根据自己的业务特性选择使用,我们已经在active及register接口中做了默认激活操作。提供该接口的目的是方便开发者能更加灵活的在自己的APP使用场景中控制在线与离线状态。注意:当APP被从设备上卸载后重新安装依然需要进行激活操作。
active(callback(ret, err))
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true, //布尔型;true|false,true表示激活成功,false表示激活失败
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace.active(function(ret,err){
if(ret.status){
alert("激活成功");
}else{
alert("激活失败");
}
});
可用性
Android系统
可提供的1.0.0及更高版本
register
人脸注册
register({params},callback(ret, err))
params
cameraId:
- 类型:字符串
- 描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: "success", //字符串;success|error|cancelled,success表示成功,error表示错误,cancelled表示用户取消操作
image:"", //获取到的人脸图片路径
faceFeature:"" //获取到的人脸特征数据
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace.register(function(ret,err){
if(ret.status=="success"){
if(ret.image){
document.getElementById("image").src=ret.image;
faceFeature = ret.faceFeature;
}
}else if(ret.status=="cancelled"){
alert("用户取消");
}else{
alert(JSON.stringify(err));
} });
可用性
Android系统
可提供的1.0.0及更高版本
compare
人脸对比
compare({params}, callback(ret, err))
params
cameraId:
- 类型:字符串
- 描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
faceFeature:
- 类型:字符串
- 描述:(必填项)通过人脸注册时获取到的人脸特征数据。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: "success", //字符串;success|error|cancelled,success表示成功,error表示错误,cancelled表示用户取消操作
score:0, //float型 取值从0到1;数值越大表示相似度越高,建议用户取值0.9以上表示同一张人脸。
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
function compare(){
bgnArcFace.compare({
"faceFeature":faceFeature
},function(ret,err){
if(ret.status=="success"){
if(ret.score>0.95){
alert("是同一个人");
}else{
alert("不是同一个人");
}
}else if(ret.status=="cancelled"){
alert("用户取消");
}else{
alert(JSON.stringify(err));
}
});
}
可用性
Android系统
可提供的1.0.0及更高版本
search
人脸搜索
该功能用于客户端搜索本地人脸库,本地人脸库数据可调用addUser接口进行数据添加
search({params}, callback(ret, err))
params
cameraId:
- 类型:字符串
- 描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
alive:
- 类型:布尔型
- 描述:(可选项)是否启用活体验证true为启用,false为不启用,启用活体验证后识别速度会有所下降,默认为false不启用。
- 默认值:false
mode:
- 类型:字符串
- 描述:(可选项)识别模式,表示单次搜索还是循环搜索,默认为单次搜索。单次搜索模式下搜索到结果后自动关闭搜索界面并返回结果。 -可选项:SINGLE-单次搜索、LOOP-循环搜索。
- 默认值:SINGLE
score:
- 类型:浮点型
- 描述:(可选项)搜索要求的最低相似度,搜索结果不小于该值时返回搜索到的用户,否则返回空对象。
- 默认值:0.9。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: "success", //字符串;success|error|cancelled,success表示成功,error表示错误,cancelled表示用户取消操作
user:{
id:1,
name:"张三",
gender:"男",
faceImage:"",//人脸照片在本机的图片地址
faceFeature:"",//人脸特征码
ext:""//自定义扩展信息
}//返回的本地用户对象。
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace.search({
cameraId:document.getElementById("cameraId").value
},function(ret,err){
if(ret.status=="success"){
if(ret.user){
document.getElementById("userId").value = ret.user.id;
document.getElementById("image").src=ret.user.faceImage;
document.getElementById("userName").innerText = ret.user.name;
}else{
alert("未搜索到用户");
}
}else if(ret.status=="cancelled"){
alert("用户取消");
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
openRegister
自定义界面人脸注册
openRegister({params},callback(ret, err))
params
rect:
- 类型:JSON 对象
- 描述:(可选项)模块的位置及尺寸
内部字段:
{
x: 0, //(可选项)数字类型;摄像头预览界面左上角的 x 坐标(相对于所属的 Window 或 Frame);默认:0
y: 0, //(可选项)数字类型;摄像头预览界面左上角的 y 坐标(相对于所属的 Window 或 Frame);默认:0
w: 320, //(可选项)数字类型;摄像头预览界面的宽度;默认:所属的 Window 或 Frame 的宽度
h: 480 //(可选项)数字类型;摄像头预览界面的高度;默认:所属的 Window 或 Frame 的高度
}
fixedOn:
- 类型:字符串类型
- 描述:(可选项)模块视图添加到指定 frame 的名字(只指 frame,传 window 无效)
- 默认:模块依附于当前 window
fixed:
- 类型:布尔
- 描述:(可选项)模块是否随所属 window 或 frame 滚动
默认值:true(不随之滚动) cameraId:
类型:字符串
描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true, //布尔型;true|false,true表示成功,false表示错误
type:"open", //返回类型,open表示预览界面打开成功,face表示返回的人脸数据
faceFeature:"" //获取到的人脸特征数据
image:"/9j/4Rk8RXhpZgAATU0AKg......"//返回的人脸照片base64图片数据
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
var offset = $api.offset($api.dom("#video"));
var faceFeature;
bgnArcFace.openRegister({
rect : {
x : 0,
y : offset.t,
w : api.winWidth,
h : api.winWidth
},
cameraId:cameraId
},function(ret,err){
if(ret.status && !faceFeature && ret.type=="face"){
faceFeature = ret.faceFeature;
image = ret.image;
document.getElementById("image").src="data:image/jpge;base64,"+ret.image;
}
});
可用性
Android系统
可提供的1.0.0及更高版本
closeRegister
关闭自定义注册界面
closeRegister()
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace .closeRegister();
可用性
Android系统
可提供的1.0.0及更高版本
openCompare
自定义界面人脸对比
openCompare({params},callback(ret, err))
params
faceFeature:
- 类型:字符串
- 描述:(必填项)待比对的人脸特征数据。
rect:
- 类型:JSON 对象
- 描述:(可选项)模块的位置及尺寸
内部字段:
{
x: 0, //(可选项)数字类型;摄像头预览界面左上角的 x 坐标(相对于所属的 Window 或 Frame);默认:0
y: 0, //(可选项)数字类型;摄像头预览界面左上角的 y 坐标(相对于所属的 Window 或 Frame);默认:0
w: 320, //(可选项)数字类型;摄像头预览界面的宽度;默认:所属的 Window 或 Frame 的宽度
h: 480 //(可选项)数字类型;摄像头预览界面的高度;默认:所属的 Window 或 Frame 的高度
}
fixedOn:
- 类型:字符串类型
- 描述:(可选项)模块视图添加到指定 frame 的名字(只指 frame,传 window 无效)
- 默认:模块依附于当前 window
fixed:
- 类型:布尔
- 描述:(可选项)模块是否随所属 window 或 frame 滚动
- 默认值:true(不随之滚动)
cameraId:
- 类型:字符串
- 描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true, //布尔型;true|false,true表示成功,false表示错误
type:"open", //返回类型,open表示预览界面打开成功,face表示返回的对比数据
score:1 //获取到的相似度,0~1之间,数值越大表示相似度越高
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
var offset = $api.offset($api.dom("#video"));
bgnArcFace.openCompare({
rect : {
x : 0,
y : offset.t,
w : api.winWidth,
h : api.winWidth
},
cameraId:1,
faceFeature:faceFeature
},function(ret,err){
if(ret.status && ret.type=="face"){
document.getElementById("text").innerText = "比对完成,人脸相似度:"+ret.score;
}
});
可用性
Android系统
可提供的1.0.0及更高版本
closeCompare
关闭自定义人脸对比界面
closeCompare()
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace .closeCompare();
可用性
Android系统
可提供的1.0.0及更高版本
openSearch
自定义界面人脸搜索
该功能用于客户端搜索本地人脸库,本地人脸库数据可调用addUser接口进行数据添加
openSearch({params},callback(ret, err))
params
rect:
- 类型:JSON 对象
- 描述:(可选项)模块的位置及尺寸
内部字段:
{
x: 0, //(可选项)数字类型;摄像头预览界面左上角的 x 坐标(相对于所属的 Window 或 Frame);默认:0
y: 0, //(可选项)数字类型;摄像头预览界面左上角的 y 坐标(相对于所属的 Window 或 Frame);默认:0
w: 320, //(可选项)数字类型;摄像头预览界面的宽度;默认:所属的 Window 或 Frame 的宽度
h: 480 //(可选项)数字类型;摄像头预览界面的高度;默认:所属的 Window 或 Frame 的高度
}
fixedOn:
- 类型:字符串类型
- 描述:(可选项)模块视图添加到指定 frame 的名字(只指 frame,传 window 无效)
- 默认:模块依附于当前 window
fixed:
- 类型:布尔
- 描述:(可选项)模块是否随所属 window 或 frame 滚动
- 默认值:true(不随之滚动)
cameraId:
- 类型:字符串
- 描述:(可选项)摄像头ID 0是后置摄像头,1是前置摄像头,默认为前置摄像头。 -可选项:0-后置摄像头、1-前置摄像头。
alive:
- 类型:布尔型
- 描述:(可选项)是否启用活体验证true为启用,false为不启用,启用活体验证后识别速度会有所下降,默认为false不启用。
- 默认值:false
mode:
- 类型:字符串
- 描述:(可选项)识别模式,表示单次搜索还是循环搜索,默认为单次搜索。单次搜索模式下搜索到结果后自动关闭搜索界面并返回结果。 -可选项:SINGLE-单次搜索、LOOP-循环搜索。
- 默认值:SINGLE
score:
- 类型:浮点型
- 描述:(可选项)搜索要求的最低相似度,搜索结果不小于该值时返回搜索到的用户,否则返回空对象。
- 默认值:0.9。
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status:true, //布尔型;true|false,true表示成功,false表示错误
type:"open", //返回类型,open表示预览界面打开成功,face表示返回的对比数据
user:{
id:1,
name:"张三",
gender:"男",
faceImage:"",//人脸照片在本机的图片地址
faceFeature:"",//人脸特征码
ext:""//自定义扩展信息
}//返回的本地用户对象。
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型,错误码
msg: //错误消息
}
示例代码
var bgnArcFace = api.require('bgnArcFace');
var offset = $api.offset($api.dom("#video"));
bgnArcFace.openSearch({
rect : {
x : 0,
y : offset.t,
w : api.winWidth,
h : api.winWidth
},
cameraId:cameraId,
mode:"LOOP"
},function(ret,err){
if(ret.status && ret.type=="face"){
if(ret.user){
document.getElementById("userName").innerText=ret.user.name;
document.getElementById("image").src=ret.user.faceImage;
}else{
document.getElementById("userName").innerText="查无此人";
document.getElementById("image").src="";
}
}
});
可用性
Android系统
可提供的1.0.0及更高版本
closeSearch
关闭自定义人脸搜索界面
closeSearch()
示例代码
var bgnArcFace = api.require('bgnArcFace');
bgnArcFace .closeSearch();
可用性
Android系统
可提供的1.0.0及更高版本
addUser
在本地添加注册用户
addUser({params}, callback(ret, err))
params
user:
- 类型:JSON对像
- 描述:(必填项)。
描述:
格式{
id:"",用户ID
name:"",用户名称
gender:"",//性别
ext:"",//自定义扩展内容
faceFeature:"",//人脸特征码
faceImage:""//人脸图片,可以是远程图片或本地图片地址,也可以是base64格式的数据,如果是base64格式,系统会自动转成本地的jpg格式的图片
}
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否解析成功
user:JSON格式的数据对像,返回添加成功的用户对像,如果user对象原来的faceImage是base64,返回的对象会替换成本地的jpg格式的图片地址
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.addUser({
user:{
id:1,
name:"张三",
faceFeature:""
faceImage:"/9j/4Rk8RXhpZgAATU0AKg......"
}
},function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
countUser
统计本地注册用户数
countUser(callback(ret, err))
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否成功
count:10 //int 型;返回用户数量
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.countUser(function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
clearAllUser
清空所有本地注册用户
clearAllUser(callback(ret, err))
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否成功
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.clearAllUser(function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
removeUser
移除指定的本地注册用户
removeUser({params},callback(ret, err))
params
userId:
- 类型:字符串类型
- 描述:(必填项)要删除的用户ID
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否成功
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.removeUser({
userId:1
},function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
getUser
取得指定本地注册用户
getUser({params},callback(ret, err))
params
userId:
- 类型:字符串类型
- 描述:(必填项)要获取的用户ID
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否成功
user:{
id:"",用户ID
name:"",用户名称
gender:"",//性别
ext:"",//自定义扩展内容
faceFeature:"",//人脸特征码
faceImage:""//人脸图片地址
} //用户JSON对像
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.getUser({
userId:1
},function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
listUser
取得全部本地注册用户
listUser(callback(ret, err))
callback(ret, err)
ret:
- 类型:JSON 对象
- 内部字段:
{
status: true //布尔型;true||false,是否成功
list:[{
id:"",用户ID
name:"",用户名称
gender:"",//性别
ext:"",//自定义扩展内容
faceFeature:"",//人脸特征码
faceImage:""//人脸图片地址
}] //用户JSON对像
}
err:
- 类型:JSON 对象
- 内部字段:
{
code: 0 //数字类型;
msg: //错误消息
}
示例代码
var bgnArcFace= api.require('bgnArcFace');
bgnArcFace.listUser(function(ret, err) {
if (ret.status) {
alert(JSON.stringify(ret));
}else{
alert(JSON.stringify(err));
}
});
可用性
Android系统
可提供的1.0.0及更高版本
错误代码
错误码名十六进制十进制错误码说明
MOK 0 0 成功
MERR_UNKNOWN 1 1 错误原因不明
MERR_INVALID_PARAM 2 2 无效的参数
MERR_UNSUPPORTED 3 3 引擎不支持
MERR_NO_MEMORY 4 4 内存不足
MERR_BAD_STATE 5 5 状态错误
MERR_USER_CANCEL 6 6 用户取消相关操作
MERR_EXPIRED 7 7 操作时间过期
MERR_USER_PAUSE 8 8 用户暂停操作
MERR_BUFFER_OVERFLOW 9 9 缓冲上溢
MERR_BUFFER_UNDERFLOW A 10 缓冲下溢
MERR_NO_DISKSPACE B 11 存贮空间不足
MERR_COMPONENT_NOT_EXIST C 12 组件不存在
MERR_GLOBAL_DATA_NOT_EXIST D 13 全局数据不存在
MERR_FSDK_INVALID_APP_ID 700128673 无效的App Id
MERR_FSDK_INVALID_SDK_ID 7002 28674 无效的SDK key
MERR_FSDK_INVALID_ID_PAIR 7003 28675 AppId和SDKKey不匹配
MERR_FSDK_MISMATCH_ID_AND_SDK 7004 28676 SDKKey和使用的SDK不匹配
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED 7005 28677 系统版本不被当前SDK所支持
MERR_FSDK_LICENCE_EXPIRED 7006 28678 SDK有效期过期,需要重新下载更新
MERR_FSDK_FR_INVALID_MEMORY_INFO 12001 73729 无效的输入内存
MERR_FSDK_FR_INVALID_IMAGE_INFO 12002 73730 无效的输入图像参数
MERR_FSDK_FR_INVALID_FACE_INFO 12003 73731 无效的脸部信息
MERR_FSDK_FR_NO_GPU_AVAILABLE 12004 73732 当前设备无GPU可用
MERR_FSDK_FR_MISMATCHED_FEATURE_LEVEL 12005 73733 待比较的两个人脸特征的版本不一致
MERR_FSDK_FACEFEATURE_UNKNOWN 14001 81921 人脸特征检测错误未知
MERR_FSDK_FACEFEATURE_MEMORY1400281922 人脸特征检测内存错误
MERR_FSDK_FACEFEATURE_INVALID_FORMAT 14003 81923 人脸特征检测格式错误
MERR_FSDK_FACEFEATURE_INVALID_PARAM 14004 81924 人脸特征检测参数错误
MERR_FSDK_FACEFEATURE_LOW_CONFIDENCE_LEVEL 14005 81925 人脸特征检测结果置信度低
MERR_ASF_EX_BASE_FEATURE_UNSUPPORTED_ON_INIT 15001 86017 Engine不支持的检测属性
MERR_ASF_EX_BASE_FEATURE_UNINITED 15002 86018 需要检测是属性未初始化
MERR_ASF_EX_BASE_FEATURE_UNPROCESSED 15003 86019 待获取的属性未在process中处理过
MERR_ASF_EX_BASE_FEATURE_UNSUPPORTED_ON_PROCESS 15004 86020 PROCESS不支持的检测属性,例如FR,有自己独立的处理函数
MERR_ASF_EX_BASE_INVALID_IMAGE_INFO 15005 86021 无效的输入图像
MERR_ASF_EX_BASE_INVALID_FACE_INFO 15006 86022 无效的脸部信息
MERR_ASF_BASE_ACTIVATION_FAIL 16001 90113 SDK激活失败,请打开读写权限
MERR_ASF_BASE_ALREADY_ACTIVATED 16002 90114 SDK已激活
MERR_ASF_BASE_NOT_ACTIVATED 16003 90115 SDK未激活
MERR_ASF_BASE_SCALE_NOT_SUPPORT 16004 90116 detectFaceScaleVal不支持
MERR_ASF_BASE_VERION_MISMATCH 16005 90117 SDK版本不匹配
MERR_ASF_BASE_DEVICE_MISMATCH 16006 90118 设备不匹配
MERR_ASF_BASE_UNIQUE_IDENTIFIER_MISMATCH 16007 90119 唯一标识不匹配
MERR_ASF_BASE_PARAM_NULL 16008 90120 参数为空
MERR_ASF_BASE_LIVENESS_EXPIRED 16009 90121 活体检测功能已过期
MERR_ASF_BASE_VERSION_NOT_SUPPORT 1600A 90122 版本不支持
MERR_ASF_BASE_SIGN_ERROR 1600B 90123 签名错误
MERR_ASF_BASE_DATABASE_ERROR 1600C 90124 数据库插入错误
MERR_ASF_BASE_UNIQUE_CHECKOUT_FAIL 1600D 90125 唯一标识符校验失败
MERR_ASF_BASE_COLOR_SPACE_NOT_SUPPORT 1600E 90126 颜色空间不支持
MERR_ASF_BASE_IMAGE_WIDTH_HEIGHT_NOT_SUPPORT 1600F 90127 图片宽度或高度不支持
MERR_ASF_BASE_READ_PHONE_STATE_DENIED 16010 90128 android.permission.READ_PHONE_STATE权限被拒绝
MERR_ASF_BASE_ACTIVATION_DATA_DESTROYED 16011 90129 激活数据被破坏,请删除激活文件,重新进行激活
MERR_ASF_NETWORK_BASE_COULDNT_RESOLVE_HOST 17001 94209 无法解析主机地址
MERR_ASF_NETWORK_BASE_COULDNT_CONNECT_SERVER 17002 94210 无法连接服务器
MERR_ASF_NETWORK_BASE_CONNECT_TIMEOUT 17003 94211 网络连接超时
MERR_ASF_NETWORK_BASE_UNKNOWN_ERROR 17004 94212 网络未知错误