创建应用

创建Android人脸识别应用

1. 登录 习悦开发者平台,进入 控制台 页面,点击“创建应用”按钮,如图:

2. 填写应用相关信息,勾选Android应用平台,提交应用,如图:

3. 在我的应用模块可以查看已创建的应用及应用信息,如图:

Android 开发

功能流程图


实体解释 userId:在习悦人脸识别服务中,userId可理解为应用中的用户,对应开发者的应用中账户体系,userId的唯一性由开发者进行维护;userId保证了用户(非开发者)数据的独立和安全。
FaceSet:人脸集合,是人脸样本管理单位,是人脸数据(Face)的集合,由开发者进行创建,在一个userId中FaceSet名称是不可重复的;人脸检索就是对FaceSet进行检索,检索集合里最相似的Face数据。
Face:人脸数据,是人脸识别服务中的最基本单位,基于人脸图片生成,服务将图片中的人脸进行识别,返回相应的Face数据作为人脸凭证,后续可添加到FaceSet,做人脸特征分析(年龄、性别),人脸对比和人脸检索。
集合样本:是FaceSet的基本单元,单位是Face,Face作为集合样本后,对集合进行检索时,将成为被检索的数据。

示例Demo

开始开发

1. 下载 人脸识别Android SDK
2. 在我的应用模块,获取应用的API Key 与 API Secret;

3. 把API Key与API Secret在AndroidManifest.xml配置文件中进行文件配置并设置授权服务启动,并配置授权服务。

<service android:name="cn.thinkjoy.sdk.b.b"/>
<meta-data android:name="THINK_JOY_KEY" android:value="您的API KEY"/>
<meta-data android:name="THINK_JOY_SECRET" android:value="您的API SECRET"/>

4. 同时您需要在AndroidManifest.xml文件中添加如下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

5. 复制SDK中libs目录下的文件复制到项目libs目录下,并将raw目录复制到res目录下,在build.gradle中的android模块中添加以下代码。

sourceSets {
    main {
        jniLibs.srcDirs = ['libs'];
    }
}

6. 创建自定义Application并使应用继承此类,在onCreat中进行SDK初始化服务;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SDKInitializer.init(this);
        SDKInitializer.setRunStatus(this,0);   //设置开发状态,0为正式版  1为测试版,不设置默认为正式版
    }
}

7. 在应用的MainActivity中的onResume与onDestroy分别调用sdk的对应周期,控件后台服务定时授权的销毁与重新绑定授权。

@Override
protected void onResume() {
    super.onResume();
    SDKInitializer.onResume(getApplicationContext());
}

@Override
protected void onDestroy() {
    super.onDestroy();
    SDKInitializer.onDestroy(getApplicationContext());
}

8. 配置好环境后,需要创建一位用户(需要开发者自己管理,长度为1-32位字母或数字),创建成功后的用户id需要您自己管理,代码如下:

UserManage.newInstance(this).bindUser(userId, new UserBindListener() {
    @Override
    public void onUserBind(String userId, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

9. 用户创建成功后即可进行更多操作,以下是人脸区域检测示例代码:

DetectManage.newInstance(this).getFaceRegion(bitmap, new FaceRegionCheckListener() {
    @Override
    public void onFaceRegionCheck(FaceInfo faceInfo, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

10. 人脸检测成功得到Face数据模型数组,详解请看人脸识别Android Demo,根据返回结果绘制脸框如下图:

API功能概览

API功能

接口分类 接口名称 功能说明
UserManage bindUser 绑定新用户
DetectManage getFaceRegion 人脸区域检测
SetManage creatFaceSet 创建人脸集合
getFaceSet 查询用户人脸集合
getFaceSetDetail 查询人脸集合详情
updateFaceSet 修改人脸集合
deleteFaceSet 删除人脸集合
refreshFaceSet 刷新集合数据
FaceManage addFace 添加人脸(Image)
addFace 添加人脸(FaceId)
getFaceId 获取人脸列表
getFaceDetail 获取人脸详情
setFaceInfo 修改人脸信息
faceAnalyze 人脸特征分析
deleteFace 删除人脸
SearchManage faceSearch 人脸检索 (Image)
faceSearch 人脸检索 (FaceID)
CompareManage faceCompare 人脸对比 (Image : Image)
faceCompare 人脸对比 (Image : FaceID)
faceCompare 人脸对比 (FaceID : FaceID)

绑定新用户

接口名称

bindUser

描述

使用人脸识别SDK,在绑定API key和API Secret后,需要您绑定一个用户后才能进行接下来的操作;该用户绑定后可重复绑定,目前没有解绑功能;

参数

参数名 参数类型 参数说明
必须 userId String 用户绑定的ID(1-32位数字/字母)

返回值说明

字段 类型 说明
userId String 绑定用户ID
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

UserManage.newInstance(this).bindUser(userId, new UserBindListener() {
    @Override
    public void onUserBind(String userId, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

人脸区域检测

接口名称

getFaceRegion

描述

用户绑定成功后,检测图片中人脸的位置及人脸特征;

参数

参数名 参数类型 参数说明
必须 bitmap Bitmap 待检索图片位图,建议使用 Bitmap.Config ARGB_8888 格式
可选 isAge boolean 是否检测年龄,默认为false
isGender boolean 是否检测性别,默认为false

返回值说明

字段 类型 说明
faceInfo FaceInfo 人脸信息数据模型
faceNum int 图片中包含的人脸数量
face List<Face> 人脸特征信息数组
faceId String 人脸ID
注:faceId如果连续72小时没有存放在任意FaceSet中,则该faceId将会失效。
imgId String 人脸图片ID
attribute FaceAttribute 人脸特征信息数据模型
age double 年龄
gender List<Double> 性别概率,下标0为女性概率,下标1为男性概率
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
landmark FaceLandmark 人脸特征点位置坐标数据模型
注:特征点坐标有可能出现负值,请开发者注意处理。
x int X轴坐标
y int Y轴坐标
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

DetectManage.newInstance(this).getFaceRegion(bitmap, isAge, isGender, new FaceRegionCheckListener() {
    @Override
    public void onFaceRegionCheck(FaceInfo faceInfo, ErrorMsg error) {
       if (error.getCode() == 0){
            ...
       }
    }
});

创建人脸集合

接口名称

creatFaceSet

描述

绑定用户成功后,给该用户添加FaceSet,用于接下来的操作;同一用户下FaceSetName不能重复,且需满足参数说明中的对应格式;创建FaceSet的同时可以为其设置标签;

参数

参数名 参数类型 参数说明
必须 facesetName String 集合名称
tag String 集合标签,可用于标识集合
userparam String 用户参数,可用于标识集合

返回值说明

字段 类型 说明
faceSet FaceSet FaceSet基础数据模型
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SetManage.newInstance(this).creatFaceSet(faceSetName, tag, userparam, new FaceSetListener() {
    @Override
    public void onFaceSetListener(FaceSet set, ErrorMsg msg) {
        if (msg.getCode() == 0) {
            ...
        }
    }
});

查询用户人脸集合

接口名称

getFaceSet

描述

绑定用户后,根据faceSet的标签tag查询用户下对应faceSet;可以设置start控制从第几个开始查询;

参数

参数名 参数类型 参数说明
可选 tag String 集合标签,默认为””
start int 控制从第几个FaceSet开始返回,默认为0;

返回值说明

字段 类型 说明
sets List<FaceSet> FaceSet信息数组
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SetManage.newInstance(this).getFaceSet("", 0, new FaceSetQueryListener() {
    @Override
    public void onFaceSetQueryListener(List<FaceSet> sets, ErrorMsg msg) {
        if (msg.getCode() == 0) {
           ...
        }
    }
});

查询人脸集合详情

接口名称

getFaceSetDetail

描述

绑定用户后,根据faceSet的ID查看对应faceSet详情;

参数

参数名 参数类型 参数说明
必须 faceSetId String 集合ID

返回值说明

字段 类型 说明
detail FaceSetDetail FaceSet详情数据模型
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
face_count int FaceSet中存在的人脸数量
faceId List<String> FaceSet中存在的所有人脸ID数组
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SetManage.newInstance(this).getFaceSetDetail(faceSetId, new FaceSetDetailListener() {
    @Override
    public void onFaceSetDetail(FaceSetDetail detail, ErrorMsg error) {
        if (error.getCode() == 0){
            tv_set_name.setText(setDetail.getFacesetName());
           ...
        }
    }
});

修改人脸集合

接口名称

updateFaceSet

描述

绑定用户成功后,根据faceSetId对faceSet中的自定义标签信息进行更新修改。

参数

参数名 参数类型 参数说明
必须 faceSetId String 集合ID
可选 tag String 集合标签,可用于标识集合
userParam String 用户参数,可用于标识集合

返回值说明

字段 类型 说明
faceSet FaceSet FaceSet基础数据模型
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SetManage.newInstance(this).updateFaceSet(faceSetId, tag, params, new FaceSetListener() {
    @Override
    public void onFaceSetListener(FaceSet set, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

删除人脸集合

接口名称

deleteFaceSet

描述

绑定用户成功后,对于已经创建的faceSet,可以根据已存在FaceSet的ID删除该用户下的FaceSet;删除前可以检测该FaceSet下是否已经存在Face,如选择检测且该FaceSet下存在Face,则删除失败,防止一些误删的操作;不检测就会直接删除该FaceSet;

参数

参数名 参数类型 参数说明
必须 faceSetId String 集合ID
可选 check_empty boolean true,删除前检测是否包含face,检测到存在face则不删除,检测到不存在face则删除;
false,删除前不检测,直接删除;
默认为false;

返回值说明

字段 类型 说明
faceSet FaceSet FaceSet基础数据模型
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SetManage.newInstance(FaceSetActivity.this).deleteFaceSet(faceSetId,true,new FaceSetDeleteListener(){
    @Override
    public void onFaceSetDelete(FaceSet set, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

刷新集合数据

接口名称

refreshFaceSet

描述

绑定用户后,根据faceSet的ID对faceSet的人脸数据进行刷新,可把人脸数据加入缓存,加快人脸检索速度。

注:每次对faceSet进行增加Face或删除Face后,调用该接口进行数据刷新,其他操作不需要进行刷新。

参数

参数名 参数类型 参数说明
必须 faceSetId String 集合ID

返回值说明

字段 类型 说明
success boolean 是否操作成功
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

public void refreshFaceSet() {
    SetManage.newInstance(this).refreshFaceSet(faceSetId, new SuccessListener() {
        @Override
        public void onSuccessListener(boolean success, ErrorMsg errorMsg) {

        }
    });
}

添加人脸(Image)

接口名称

addFace

描述

绑定用户后,根据已存在faceSet的ID和人脸图片,将人脸图片添加到FaceSet中;人脸图片必须只含有一个人脸;

注意:调用该接口后,需要调用刷新集合数据接口,在集合检索中才能生效。
建议:批量操作后调用一次刷新集合数据接口即可。

参数

参数名 参数类型 参数说明
必须 bitmap Bitmap 待检索图片位图,建议使用 Bitmap.Config ARGB_8888 格式
facesetId String 集合ID

返回值说明

字段 类型 说明
addInfo FaceAddInfo 添加人脸信息数据模型
addCount int 本次操作的人脸数量
faceCount int 添加后集合的人脸数量
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).addFace(bitmap, faceSetId, personId, new FaceAddListener() {
    @Override
    public void onFaceAddListener(FaceAddInfo faceAddInfo, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

添加人脸(FaceId)

接口名称

addFace

描述

绑定用户后,根据已存在faceSet的ID和FaceID,将FaceID添加到FaceSet中;FaceID可以通过 人脸区域检测人脸对比(Image:Image) 获得;

注意:调用该接口后,需要调用刷新集合数据接口,在集合检索中才能生效。
建议:批量操作后调用一次刷新集合数据接口即可。

参数

参数名 参数类型 参数说明
必须 faceId List<String> 人脸ID数组
facesetId String 集合ID

返回值说明

字段 类型 说明
addInfo FaceAddInfo 添加人脸信息数据模型
addCount int 本次操作的人脸数量
faceCount int 添加后集合的人脸数量
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).addFace(faceId, faceSetId, new FaceAddListener() {
    @Override
    public void onFaceAddListener(FaceAddInfo faceAddInfo, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

获取人脸列表

接口名称

getFaceId

描述

用户绑定成功后,通过已存在FaceSet的ID和人脸标签personId查询人脸列表;

参数

参数名 参数类型 参数说明
必须 facesetId String 集合ID
可选 personId String 人脸标签,默认为””

返回值说明

字段 类型 说明
faceId List<String> 人脸ID数组
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).getFaceId(faceSetId, personId, new FaceIdQueryListener() {
    @Override
    public void onFaceIdQueryListener(List<String> faceId, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

获取人脸详情

接口名称

getFaceDetail

描述

用户绑定成功后,根据faceId查看人脸详情;

参数

参数名 参数类型 参数说明
必须 faceId String 人脸ID
可选 isGetUrl boolean 是否获取人脸图片链接,默认为false

返回值说明

字段 类型 说明
detail FaceDetail 人脸详情数据模型
faceId String 人脸ID
imgId String 人脸图片ID
personId String 人员标签
tag String 人脸标签
url String 人脸图片链接
facesets List<String> 人脸所属集合列表
position FacePosition 人脸位置坐标信息
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).getFaceDetail(faceId,true, new FaceDetailListener() {
    @Override
    public void onFaceDetailListener(FaceDetail detail, ErrorMsg error) {
        if (error.getCode() == 0){
           ...
        }
    }
});

修改人脸信息

接口名称

setFaceInfo

描述

用户绑定成功后,通过有效的FaceID修改人脸标示信息;

参数

参数名 参数类型 参数说明
必须 faceId String 人脸ID
可选 personId String 人员标签
tag String 人脸标签

返回值说明

字段 类型 说明
detail FaceDetail 人脸详情数据模型
faceId String 人脸ID
imgId String 人脸图片ID
personId String 人员标签
tag String 人脸标签
url String 人脸图片链接
facesets List<String> 人脸所属集合列表
position FacePosition 人脸位置坐标信息
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).setFaceInfo(faceId, personId, tag, new FaceDetailListener() {
    @Override
    public void onFaceDetailListener(FaceDetail detail, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

人脸特征分析

接口名称

faceAnalyze

描述

用户绑定成功后,通过有效的FaceID分析人脸特征;

参数

参数名 参数类型 参数说明
必须 faceId List<String> 人脸ID数组

返回值说明

字段 类型 说明
face List<Face> 人脸特征数据模型
faceId String 人脸ID
imgId String 人脸图片ID
attribute FaceAttribute 人脸特征信息数据模型
age double 年龄
gender List<Double> 性别概率,下标0为女性概率,下标1为男性概率
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
landmark FaceLandmark 人脸特征点位置坐标数据模型
注:特征点坐标有可能出现负值,请开发者注意处理。
x int X轴坐标
y int Y轴坐标
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(this).faceAnalyze(faceIds, new FaceAnalyzeListener() {
    @Override
    public void onFaceAnalyzeListener(List<Face> face, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

删除人脸

接口名称

deleteFace

描述

绑定用户后,根据已存在faceSet的ID和已添加到FaceSet中faceID,将该Face从FaceSet中删除;

注意:调用该接口后,需要调用刷新集合数据接口,在集合检索中才能生效。
建议:批量操作后调用一次刷新集合数据接口即可。

参数

参数名 参数类型 参数说明
必须 faceId List<String> 人脸ID数组
facesetId String 集合ID

返回值说明

字段 类型 说明
deleteInfo FaceDeleteInfo 删除人脸信息数据模型
deleteCount int 本次操作的人脸数量
faceCount int 删除后集合的人脸数量
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

FaceManage.newInstance(FaceListActivity.this).deleteFace(faceId, faceSetId, new FaceDeleteListener() {
    @Override
    public void onFaceDeleteListener(FaceDeleteInfo deleteInfo, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

人脸检索(Image)

接口名称

faceSearch

描述

用户绑定成功后,根据有效FaceSet的ID,使用img在faceSet中检索最相似的face;img上有多张人脸时,只对识别度最高的人脸做操作;

参数

参数名 参数类型 参数说明
必须 bitmap Bitmap 待检索图片位图,建议使用 Bitmap.Config ARGB_8888 格式
facesetId String 检索集合ID
可选 topNum int 需要检索的结果集数量,必须大于1,默认为1

返回值说明

字段 类型 说明
searchInfo FaceSearchInfo 人脸检索信息数据模型
searchFace SearchFace 待检索的人脸信息(用图片进行检索才返回)
faceId String 人脸ID
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
resultFace ResultFace 检索到的人脸信息
faceId String 人脸ID
personId String 人员标签
confidence double 人脸相似度,取值范围(0-1)
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SearchManage.newInstance(this).faceSearch(bitmap, faceSetId, topNum, new FaceSearchListener() {
    @Override
    public void onFaceSearchListener(FaceSearchInfo search, ErrorMsg errorMsg) {
        if (errorMsg.getCode() == 0){
           ...
        }
    }
});

人脸检索(FaceID)

接口名称

faceSearch

描述

用户绑定成功后,根据有效FaceSet的ID,使用FaceID在faceSet中检索最相似的face;FaceID可以通过 人脸区域检测人脸对比(Image:Image) 获得;

参数

参数名 参数类型 参数说明
必须 faceId String 待检索人脸ID
facesetId String 检索集合ID
可选 topNum int 需要检索的结果集数量,必须大于1,默认为1

返回值说明

字段 类型 说明
searchInfo FaceSearchInfo 人脸检索信息数据模型
searchFace SearchFace 待检索的人脸信息(用图片进行检索才返回)
faceId String 人脸ID
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
resultFace ResultFace 检索到的人脸信息
faceId String 人脸ID
personId String 人员标签
confidence double 人脸相似度,取值范围(0-1)
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

SearchManage.newInstance(this).faceSearch(faceId, faceSetId, topNum, new FaceSearchListener() {
    @Override
    public void onFaceSearchListener(FaceSearchInfo search, ErrorMsg errorMsg) {
        if (errorMsg.getCode() == 0){
           ...
        }
    }
});

人脸对比(Image:Image)

接口名称

faceCompare

描述

用户绑定成功后,根据两张图片对比两张Face的相似度;当图片上有多张人脸时,只选取识别度最高的人脸做对比;

参数

参数名 参数类型 参数说明
必须 bitmap1 Bitmap 对比图片位图1,建议使用 Bitmap.Config ARGB_8888 格式
bitmap2 Bitmap 对比图片位图2,建议使用 Bitmap.Config ARGB_8888 格式

返回值说明

字段 类型 说明
compare FaceCompare 人脸对比数据模型
confidence double 人脸相似度,取值范围(0-1)
faceInfo List<CompareFaceInfo> 对比图片人脸信息数组(没有传入图片时,该数组不返回数据)
faceId String 人脸ID
注:faceId如果连续72小时没有存放在任意FaceSet中,则该faceId将会失效。
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

CompareManage.newInstance(this).faceCompare(bitmap, bitmap2,new FaceCompareListener() {
    @Override
    public void onFaceCompareListener(FaceCompare compare, ErrorMsg error) {
        if (error.getCode() == 0){
            ...
        }
    }
});

人脸对比(Image:FaceID)

接口名称

faceCompare

描述

用户绑定成功后,根据一个有效的FaceID和一张图片对比的相似度;FaceID可以通过 人脸区域检测人脸对比(Image:Image) 获得;当图片上有多张人脸时,只选取识别度最高的人脸做对比;

参数

参数名 参数类型 参数说明
必须 bitmap Bitmap 待检索图片位图,建议使用 Bitmap.Config ARGB_8888 格式
faceId String 人脸ID

返回值说明

字段 类型 说明
compare FaceCompare 人脸对比数据模型
confidence double 人脸相似度,取值范围(0-1)
faceInfo List<CompareFaceInfo> 对比图片人脸信息数组(没有传入图片时,该数组不返回数据)
faceId String 人脸ID
注:faceId如果连续72小时没有存放在任意FaceSet中,则该faceId将会失效。
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

CompareManage.newInstance(this).faceCompare(faceId1, faceId2, new FaceCompareListener() {
    @Override
    public void onFaceCompareListener(FaceCompare compare, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

人脸对比(FaceID:FaceID)

接口名称

faceCompare

描述

用户绑定成功后,根据两个有效的FaceID对比两张Face的相似度;FaceID可以通过 人脸区域检测人脸对比(Image:Image) 获得;

参数

参数名 参数类型 参数说明
必须 faceId1 String 第一个人脸ID
faceId2 String 第二个人脸ID

返回值说明

字段 类型 说明
compare FaceCompare 人脸对比数据模型
confidence double 人脸相似度,取值范围(0-1)
faceInfo List<CompareFaceInfo> 对比图片人脸信息数组(没有传入图片时,该数组不返回数据)
faceId String 人脸ID
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
left int
top int
bottom int
right int
error ErrorMsg 错误信息详情,code为0时表示成功

调用示例

CompareManage.newInstance(this).faceCompare(faceId1, faceId2, new FaceCompareListener() {
    @Override
    public void onFaceCompareListener(FaceCompare compare, ErrorMsg error) {
        if (error.getCode() == 0) {
            ...
        }
    }
});

返回状态码

状态码 描述
0 SUCCESS 成功
1101 DB_ADD_OP_ERROR 数据库添加操作异常
1102 DB_UPDATE_OP_ERROR 数据库更新操作异常
1103 DB_DELETE_OP_ERROR 数据库删除操作异常
1104 DB_QUERY_OP_ERROR 数据库查询操作异常
1800 HTTP_ERROR http链接错误
1900 API_ERROR 服务错误
1901 MISSING_ARGUMENTS 缺少必要参数
1902 INVALID_ARGUMENTS 参数非法
1903 WRONG_ARGUMENTS 参数解析错误
1904 API_NOT_FOUND 不支持的操作
1905 INVALID_ID 非法ID
1906 NAME_EXISTS Name已存在
1907 FACESET_NOT_EMPTY 人脸集合中存在人脸
1908 NO_FACE_DETECTED 图片中未检测到人脸
1909 MULTI_FACES_DETECTED 图片中检测到多张人脸
1910 FACESET_NO_FACE 集合中没有人脸
1951 INVALID_IMAGE_SIZE 图片像素分辨率超过限制(1920X1920)
1952 LARGE_SIZE 图片字节过大
1953 NOT_BINDING 用户未绑定
1954 NOT_AUTH 未授权
1955 NOT_UNPACK 图片无法解压

FaceSet

字段 类型 说明
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签

FaceSetDetail

字段 类型 说明
facesetId String FaceSet的ID
facesetName String FaceSet名称
tag String 自定义标签
userparam String 自定义标签
face_count int FaceSet中存在的人脸数量
faceId List<String> FaceSet中存在的所有人脸ID数组

FaceAddInfo

字段 类型 说明
addCount int 本次操作的人脸数量
faceCount int 添加后集合的人脸数量

FaceDeleteInfo

字段 类型 说明
deleteCount int 本次操作的人脸数量
faceCount int 删除后集合的人脸数量

FaceDetail

字段 类型 说明
faceId String 人脸ID
imgId String 人脸图片ID
personId String 人员标签
tag String 人脸标签
url String 人脸图片链接
facesets List<String> 人脸所属集合列表
position FacePosition 人脸位置坐标信息
注:位置坐标有可能出现负值,请开发者注意处理。

FacePosition

字段 类型 说明
left int
top int
bottom int
right int

Face

字段 类型 说明
faceId String 人脸ID
imgId String 人脸图片ID
attribute FaceAttribute 人脸特征信息数据模型
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。
landmark FaceLandmark 人脸特征点位置坐标数据模型
注:特征点坐标有可能出现负值,请开发者注意处理。

FaceAttribute

字段 类型 说明
age double 年龄
gender List<Double> 性别概率,下标0为女性概率,下标1为男性概率

FaceInfo

字段 类型 说明
faceNum int 图片中包含的人脸数量
face List<Face> 人脸特征信息数组

FaceCompare

字段 类型 说明
confidence double 人脸相似度,取值范围(0-1)
faceInfo List<CompareFaceInfo> 对比图片人脸信息数组(没有传入图片时,该数组不返回数据)

CompareFaceInfo

字段 类型 说明
faceId String 人脸ID
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。

FaceSearchInfo

字段 类型 说明
searchFace SearchFace 待检索的人脸信息(用图片进行检索才返回)
resultFace ResultFace 检索到的人脸信息

SearchFace

字段 类型 说明
faceId String 人脸ID
imgId String 人脸图片ID
position FacePosition 人脸位置坐标信息数据模型
注:位置坐标有可能出现负值,请开发者注意处理。

ResultFace

字段 类型 说明
faceId String 人脸ID
personId String 人员标签
confidence double 人脸相似度,取值范围(0-1)

FaceLandmark

字段 类型 说明
x int X轴坐标
y int Y轴坐标
Q群
咨询