人脸识别SDK

1. 概述

SUNMI人脸识别SDK是一种面向安卓设备的人脸技术开发包。此SDK开发包包含人脸检测、人脸识别和人证比对等功能,以arr包+models的形式发布。本文档介绍了SDK的使用说明以及数据结构和接口的定义,便于开发者在调用SDK接口时参考。

1.1. 文档使用范围

该人脸识别接口文档主要适用于人脸识别开发的相关人员参考阅读。

1.2. 功能清单

SUNMI人脸识别SDK主要提供如下功能:

模块功能
人脸检测检测图片中出现人脸的位置,并标记出人脸的五个关键点位置
人脸识别 将当前人脸和数据库中的人脸进行匹配,确定当前人脸身份信息
人证比对采集身份证上的照片,并且判断当前人脸是否和身份证上的人脸匹配

1.3. 开发包SDK的说明

SUNMI人脸识别SDK包含sunmi_facelib.aar文件和models文件夹。其中models文件夹包含一个配置文件和六个模型文件:

文件/文件夹名说明
sunmi_facelib.aarSDK lib库相关代码的arr
models配置文件:config.json模型文件:face_graph.json、face_param.params、detect_graph.json、detect_param.params、liveness_graph.json和liveness_param.params

注: SUNMI人脸识别SDK 只有一个实例,是线程不可重入的。只能同时由一个线程调用,不能在多个线程里面同时调用。

2. 环境信息

系统环境平台编译环境
Android7及以上arm, arm64NDK

3. Java SDK使用说明

3.1. 获取设备硬件指纹

SUNMI人脸识别SDK的授权需要绑定硬件指纹信息以及Android系统信息。在第一次使用前,开发者可以通过如下代码获取硬件指纹信息提供给商米,商米将验证并提供人脸识别SDK的license授权文件。该文件用于3.6中的验证授权。
注:需保证wifi开关为打开状态。

String fingerprint = SunmiFaceSDK.getDeviceFingerprint(context);

3.2. 导入SDK

在Android Studio项目中导入SDK aar包即可。

3.3. 存放模型文件

模型文件(.json和.params文件)可以存放在SD卡某个路径下,也可以存放在APP文件路径下。请务必保证模型所在路径可以被访问。

3.4. 配置config.json文件

使用模型包中config.json文件作为模板,或者自行创建一个config.json文件,拷贝如下代码。根据3.3中6个文件face_graph.json、face_param.params、detect_graph.json、detect_param.params、liveness_graph.json和liveness_param.params存放的实际路径进行修改。SDK需通过读取此config.json配置文件进行初始化。

{  
    // 人脸识别库文件,此文件在SDK Jnilibs里,一般不需要修改
    "face_lib_path": "libface_lib.so", 
    // 人脸识别库网络描述文件,需要绝对路径 
    "face_graph_path": "/storage/emulated/0/faceTest/face_graph.json",  
    // 人脸识别库网络参数文件,需要绝对路径 
    "face_param_path": "/storage/emulated/0/faceTest/face_param.params",  
    // 人脸检测库文件,此文件在SDK Jnilibs里,一般不需要修改  
     "detect_lib_path": "libdetect_lib.so", 
    // 人脸检测库网络描述文件,需要绝对路径 
     "detect_graph_path": "/storage/emulated/0/faceTest/detect_graph.json",  
    // 人脸检测库网络参数文件,需要绝对路径 
    "detect_param_path": "/storage/emulated/0/faceTest/detect_param.params",  
    // 活体检测库文件,此文件在SDK Jnilibs里,一般不需要修改 
    "liveness_lib_path": "libliveness_lib.so",  
     // 活体检测库网络描述文件,需要绝对路径  
    "liveness_graph_path": "/storage/emulated/0/faceTest/liveness_graph.json",  
     // 活体检测库网络参数文件,需要绝对路径  
    "liveness_param_path": "/storage/emulated/0/faceTest/liveness_param.params",  
    // 人脸库存放路径,需要绝对路径  
    "face_db_file": "/storage/emulated/0/faceTest/sunmi_face.db", 
    // 3D活体检测模型
    "depth_detector": "/storage/emulated/0/faceTest/depth_detector.yml"
}

3.5. 始化SDK

以下为SDK调用init接口执行初始化的示例。init接口参数为3.4中的config.json文件的路径。

String confPath = Environment.getExternalStorageDirectory() + 
"/faceTest/config.json";
int code = SunmiFaceSDK.init(confPath);

3.6. 验证授权文件

使用类似如下代码读取授权文件内容到Java String中,再通过verifyLicense接口验证。若验证通过,可正常调用SDK其他接口。若验证失败,调用SDK其他接口将返回授权错误代码。错误代码为“10”,则表示授权文件无效;错误代码为“11”,则表示授权文件过期。如有授权问题,请联系商米解决。
注:需保证wifi开关为打开状态。

String license = readToString(Environment.getExternalStorageDirectory() + 
"/faceTest/license_valid.txt");
int code = SunmiFaceSDK.verifyLicense(context, license); // context为Android Context

3.7. 配置SDK

SUNMI人脸识别SDK参数都可动态配置,建议先通过getConfig得到当前参数,根据需要将参数修改完成后,再用setConfig接口进行设置。示例代码如下:

SunmiFaceConfigParam param = new SunmiFaceConfigParam();
SunmiFaceSDK.getConfig(param);
param.setDistance_threshold_(1.0f); //范围在1.0~1.2比较合适,越小,人脸识别越严格
param.setYaw_threshold_(50.f);//人脸姿态阈值,设置较小的人脸姿态阈值,阈值越小,人脸姿态要求越严格,保证相对正面的人脸姿态做识别
param.setPitch_threshold_(50.f);
param.setRoll_threshold_(50.f);
param.setMin_face_size(60);//最小人脸检测尺寸,较大较清晰的人脸识别较准确
param.setImage_quality_threshold_(10);//阈值越高,人脸清晰度越好,人脸识别越准确
param.setMin_luminance_(10);//最小光照
param.setMax_luminance_(180);//最大光照
param.setLiveness_on_(true);//开启人脸活体检测
param.setThread_num_(1); //使用一个cpu核心执行人脸检测,人脸识别
int code = SunmiFaceSDK.setConfig(param);

3.8. 提取人脸特征

提取步骤:

  1. 获取的Bitmap图片:用户根据需求,从摄像头获取bitmap传给SDK。
  2. 传入图片的尺寸:人脸SDK检测最佳输入图的宽高比为1:1。若宽高比过大,可能导致检测性能略微下降。
  3. 图像格式处理:将获取的Bitmap图片转为BGR byte buffer格式。(可参考如下示例代码)
  4. 接口调用:传入BGR byte buffer,通过SunmiFaceImage构造函数创建SunmiFaceImage。再通过getImageFeatures接口传入SunmiFaceImage图片数据,得到SunmiFaceImageFeatures人脸结果。
  5. 多人脸识别逻辑:如果有多张人脸,SunmiFaceFeature在SunmiFaceImageFeatures中按照置信度score从高到低排列。
  6. 人脸库记录:faceFeature2FaceDBRecord把得到的人脸特征转换为人脸库的记录,设置相关ID,name。
  7. 资源释放:SunmiFaceImageFeatures在SDK中动态分配内存空间,使用完毕后需要调用接口释放资源。

示例代码如下:

public static byte[] getPixelsBGR(Bitmap image) {
    // 计算图片有多少字节
    int bytes = image.getByteCount();

    ByteBuffer buffer = ByteBuffer.allocate(bytes); // 创建新的buffer
    image.copyPixelsToBuffer(buffer); // 移动字节数据到buffer

    byte[] temp = buffer.array(); // 获取包含数据的底层数组
    byte[] pixels = new byte[(temp.length / 4) * 3]; // 分配空间给BGR

    // 对像素重组
    for (int i = 0; i ‹ temp.length / 4; i++) {
        pixels[i * 3] = temp[i * 4 + 2];        //B
        pixels[i * 3 + 1] = temp[i * 4 + 1];    //G
        pixels[i * 3 + 2] = temp[i * 4];        //R
    }
    return pixels;
}
private void addFeature(String name) {
    if (bitmap == null) {
        Toast.makeText(context, "请先拍照", Toast.LENGTH_SHORT).show();
        return;
    }
    byte[] srcData = FileUtils.getPixelsBGR(bitmap);
    SunmiFaceImage image = new SunmiFaceImage(srcData, bitmap.getHeight(), bitmap.getWidth(), 1);
    SunmiFaceImageFeatures features = new SunmiFaceImageFeatures();
    SunmiFaceSDK.getImageFeatures(image, features);
    SunmiFaceFeature feature_ary = features.getFeatures_();
    Log.e("ma", "face info: " + features.getFeatures_count_());
    if (features.getFeatures_count_() == 0) {
        showId("没有检测到人脸,请重新拍照!");
        return;
    }
    SunmiFaceFeature feature = SunmiFaceLib.SunmiFaceFeatureArray_getitem(feature_ary, 0);
    SunmiFaceDBRecord record = SunmiFaceSDK.faceFeature2FaceDBRecord(feature);
    record.setId_(name);
    record.setName_(name);
    SunmiFaceSDK.addDBRecord(record);
    SunmiFaceSDK.releaseImageFeatures(features);
    Log.e("face", "采集成功 " + etName.getText().toString());
}

3.9. 人脸库添加人脸特征

SunmiFaceDBRecord包含img_id_、id和name三个参数,其中img_id_无需设置,id和name需要调用者进行设置:

  1. img_id_无需设置。调用addDBRecord将记录成功加入到人脸库后,SunmiFaceDBRecord中img_id_会自动被设置为人脸库中代表此图片的唯一id。img_id_可以理解为录入图片的唯一名字,SDK保证返回的img_id不重复。用户可以以img_id为文件名来保存拍摄的人脸照片。根据此img_id可以调用deleteDBRecord来删除这条记录。
  2. id为被录入人脸的人员的唯一id。SDK考虑开发者调用的灵活性,没有对其唯一性进行限制。在通常情况下,建议调用者务必保证id的唯一性,id可理解为一般不会重号的身份证号,食堂卡号,会员号等。
  3. name可以不唯一,允许出现两个人名相同的情况,同时允许每个人录入多张人脸。

示例:
数据库中记录:
用户A,id为0001,姓名张三,图片1,图片2;
用户B, id为0002,姓名也是张三,图片3,图片4,图片5。
用户A和B同名,并且都有多张图片,存储每张图片提取的人脸特征。

3.10.  获取人脸关键点

通过getLandmark_得到人脸关键点数组,在获取数组中的每个关键点信息。示例代码如下:

SunmiFaceFeature feature = SunmiFaceLib.SunmiFaceFeatureArray_getitem(feature_ary, 0);
SunmiFaceLmk lmk_ary = feature.getLandmark_();
for(int i = 0; i ‹ SunmiFaceLibConstants.SUNMI_FACE_LANDMARK_LEN; i++) {
    SunmiFaceLmk lmk = SunmiFaceLib.SunmiFaceLmkArray_getitem(lmk_ary, i);
}

3.11. 搜索人脸库

调用searchDB执行人脸库搜索寻找最相似的人脸。如果SDK判断人脸距离小于阈值,matched设为true,否则为false。示例代码如下:

SunmiFaceDBRecord record = SunmiFaceSDK.faceFeature2FaceDBRecord(feature);
SunmiFaceDBIdInfo info = new SunmiFaceDBIdInfo();
SunmiFaceSDK.searchDB(record, info);
if (info.getIs_matched_()) {
	Log.e("ma", “Found”);
}
else {
Log.e("ma", “Not Found”);
}

3.12. 人脸1:1比对

分别对要比对的两张图片进行人脸特征的提取,得到类型为SunmiFaceFeature两个人脸特征feature1,feature2。在调用compare1v1接口得到比对结果。getIsMatched()得到比对结果,getDistance()得到两张人脸的距离度量。

SunmiFaceCompareResult result;
int code = SunmiFaceSDK.compare1v1(feature1, feature2, result)
boolean isMatched = result.getIsMatched()
float distance = result.getDistance();

3.13. 检测3D活体

3D活体检测使用奥比中光3D结构光摄像头实现3D活体检测功能。
注:目前仅支持奥比中光D2 plus摄像头,固定输入彩色图分辨率480×640,深度图分辨率400×640。彩色图和深度图存在一定的位置偏差。以彩色图位置为参考,深度图在x方向偏差为75像素,y方向偏差为-15像素。

深度图depth为16bit数据,表示物体到摄像头以毫米为单位的距离。需要注意以下几点:

  1. 使用3D活体检测,要求BRG图像分辨率为 480×640,深度图分辨率为 400×640
  2. 保证BGR图像和深度图像在时间上是对应的。
  3. 3D活体检测存在一定的真人判断为非活体的概率。所以推荐判断非活体需要执行3次左右来确认。非活体判断为真人的概率低于1%。

3D活体检测的使用步骤如下:

  • 1. 开启3D活体检测,配置阈值。
SunmiFaceConfigParam param = new SunmiFaceConfigParam();
SunmiFaceSDK.getConfig(param);
param.setLivenessOn(true);
param.setDepthLivenessThreshold(0.5f); //推荐阈值在0.5左右
param.setDepthXOffset(75); //设置深度图x方向偏移量
param.setDepthYOffset(-15); //设置深度图y方向偏移量
ret = SunmiFaceSDK.setConfig(param);
  • 2. 构造SunmiFaceImage,同时传入BGR图像和深度图像。
SunmiFaceImage image = new SunmiFaceImage(srcData, bitmap.getHeight(), bitmap.getWidth(), depth, depth_height, depth_width, 1);
  • 3. 查看活体判断结果,如果code为FACE_CODE_OK则判断为活体。如果code为FACE_CODE_NOT_LIVENESS则判断为非活体。
int code = SunmiFaceSDK.getImageFeatures(image, features);

3.14. 人脸属性获取

人脸属性首先需要获取人脸特征faceFeature,再根据人脸特征获取年龄和性别属性,主要示例代码如下:

SunmiFaceFeature faceFeature = SunmiFaceLib.SunmiFaceFeatureArrayGetItem(features.getFeatures(), 0);
SunmiFaceAge ageInfo = faceFeature.getAge();
int age = ageInfo.getClassification();
float ageScore = ageInfo.getScore();
SunmiFaceGender genderInfo = faceFeature.getGender();
int gender = genderInfo.getClassification();
float genderScore = genderInfo.getScore();

4. 数据类型定义

4.1. 类型别名

别名类型说明
SunmiFaceStatusintTypedef,定义在face_type.h 文件中
SunmiFaceHandlevoid*Typedef,定义在face.h 文件中

4.2. 宏

接口使用的数据类型定义在face_type.h头文件中,主要数据如下:

成员说明
SUNMI_FACE_FEATURE_LEN256人脸特征向量长度
SUNMI_FACE_ID_LEN64id字符长度限制
SUNMI_FACE_NAME_LEN64人脸用户名长度
SUNMI_FACE_IMG_ID_LEN64人脸采集图片ID长度
SUNMI_FACE_LANDMARK_LEN5人脸关键点数量

4.3. 枚举类型

接口使用的数据结构定义在face_type.h头文件中。

4.3.1. SunmiFaceStatusCode 商米人脸识别状态码

枚举成员状态码说明
FACE_CODE_OK0正确
FACE_CODE_UNINIT1SDK没有初始化
FACE_CODE_EMPTY_IMAGE2图片为空
FACE_CODE_NO_MODEL3无加载模型文件
FACE_CODE_CONFIG_ERROR4配置错误
FACE_CODE_BAD_ILLUMINATION5光线条件不好
FACE_CODE_POSE_ERROR6面部位置不符合要求
FACE_CODE_SMALL_FACE_SIZE7人脸尺寸太小
FACE_CODE_LOW_IMAGE_QUALITY8人脸图像模糊
FACE_CODE_NOT_LIVENESS9非活体人脸图像
FACE_CODE_LICENSE_ERROR10授权文件无效
FACE_CODE_LICENSE_EXPIRED11授权文件过期
FACE_CODE_IMAGE_ID_ERROR101删除时图像id不存在
FACE_CODE_OTHER_ERROR1000其他错误

4.3.2. SunmiFaceGenderType 性别类型

枚举成员说明
FACE_ATTR_FEMALE0性别女
FACE_ATTR_MALE1性别男

4.4. 结构体类型

4.4.1. SunmiFaceRect人脸框位置

成员类型说明
x1_float人脸框左上角横坐标
y1_float人脸框左上角纵坐标
x2_float人脸框右下角横坐标
y2_float人脸框右小角纵坐标
score_float置信度

4.4.2. SunmiFaceLmk人脸关键点坐标

成员类型说明
x_float关键点横坐标
y_float关键点纵坐标

4.4.3. SunmiFaceImage人脸识别输入图像

成员类型说明
buf_unsigned char *图片像素字节地址
buf_len_int字节缓冲区长度
img_w_int图像宽度
img_h_int图像高度
max_face_count_int单图人脸数最大返回值
depth_buf_unsigned char *深度图数据字节地址
depth_buf_len_int深度图数据长度
depth_img_w_int深度图宽度
depth_img_h_int深度图高度

4.4.4. SunmiFacePose人脸姿态

成员类型说明
pitch_float俯仰角度
yaw_float偏航角度
roll_float翻滚角度

4.4.5. SunmiFaceAge 年龄

成员类型说明
classification_int年龄范围(0-74岁)
score_float置信度

4.4.6. SunmiFaceGender 性别

成员类型说明
classification_int性别分类(0: female ; 1: male)
score_float置信度

4.4.7. SunmiFaceFeature单个特征提取输出信息结构体

成员类型说明
face_rect_SunmiFaceRect人脸矩形框位置
liveness_score_float活体分数
feature_[SUNMI_FACE_FEATURE_LEN]float人脸特征数组
landmark_[SUNMI_FACE_LANDMARK_LEN]SunmiFaceLmk关键点
pose_SunmiFacePose人脸姿态
age_ SunmiFaceAge 年龄
gender_SunmiFaceGender 性别

4.4.8. SunmiFaceImageFeatures多个特征提取输出信息结构体

成员类型说明
features_SunmiFaceFeature *特征数组
features_count_int特征数组长度

4.4.9. SunmiFaceConfigParam人脸配置参数

成员类型说明
thread_num_intSDK人脸检测人脸识别计算使用的线程数量(cpu核数),0代表使用所有的cpu核
distance_threshold_float人脸距离阈值
yaw_threshold_float偏航角度阈值
pitch_threshold_float俯仰角度阈值
roll_threshold_float翻滚角度阈值
min_face_sizeint人脸最小尺寸
image_quality_threshold_float图像质量阈值
min_luminance_int最低亮度
max_luminance_int最高亮度
rgb_liveness_threshold_floatRGB活体检测阈值
depth_liveness_threshold_float3D活体检测阈值
liveness_on_bool活体检测开关

4.4.10. SunmiFaceCompareResult人脸匹配结果

成员类型说明
is_matched_bool如果距离小于人脸间距阈值,则为真,否则为假
distance_float人脸距离

4.4.11. SunmiFaceDBRecord人脸数据库记录

成员类型说明
id_[SUNMI_FACE_ID_LEN]char人脸唯一id
name_[SUNMI_FACE_NAME_LEN]char用户名
img_id_[SUNMI_FACE_IMG_ID_LEN]char人脸采集图像唯一id
feature_[SUNMI_FACE_FEATURE_LEN]float人脸特征

4.4.12. SunmiFaceDBIdInfo人脸数据库信息

成员类型说明
id_[SUNMI_FACE_ID_LEN]char人脸唯一id
name_[SUNMI_FACE_NAME_LEN]char用户名
is_matched_bool如果距离小于人脸间距阈值,则为真,否则为假
distance_float人脸距离

5. C++函数接口定义

对外接口的定义在face.h头文件中。

5.1. 函数接口定义

5.1.1. SunmiFaceGetVersion

函数定义:SUNMI_FACE_API const char* SunmiFaceGetVersion();

函数功能:获取Sunmi人脸识别SDK版本

返回值:SDK版本字符串

5.1.2. SunmiFaceCreate

函数定义:SunmiFaceStatus SunmiFaceCreate(SunmiFaceHandle* handle);

函数功能:创建句柄,用户需要保持这个句柄直到释放

变量类型说明
handleSunmiFaceHandle*输出参数,创建人脸SDK句柄

返回值:SunmiFaceStatus

5.1.3. SunmiFaceInit

函数定义:SunmiFaceStatus SunmiFaceInit(SunmiFaceHandle handle,  const std::string& config_file);

函数功能:使用配置文件初始化SDK

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
config_fileconst std::string&配置文件路径

返回值:SunmiFaceStatus

5.1.4. SunmiFaceGetErrorString

函数定义:const char* SunmiFaceGetErrorString(SunmiFaceStatus code);

函数功能:通过SunmiFaceStatus得到错误描述字符串

变量类型说明
codeSunmiFaceStatusSunmiFaceStatus code

返回值:错误描述字符串

5.1.5. SunmiFaceVerifyLicense

函数定义:SunmiFaceStatus SunmiFaceVerifyLicense(SunmiFaceHandle handle, const std::string& fingerprint, const std::string& license);

函数功能:验证设备指纹和授权文件是否合法

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
fingerprintconst std::string&设备指纹字符串
licenseconst std::string&授权文件字符串

返回值:SunmiFaceStatus

5.1.6. SunmiFaceSetConfig

函数定义:SunmiFaceStatus SunmiFaceSetConfig(SunmiFaceHandle handle, const SunmiFaceConfigParam& config);  

函数功能:设置配置信息

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
configconst SunmiFaceConfigParam&配置参数

返回值:SunmiFaceStatus

5.1.7. SunmiFaceGetConfig

函数定义:SunmiFaceStatus SunmiFaceGetConfig(SunmiFaceHandle handle, SunmiFaceConfigParam& config);

函数功能:获取当前SDK参数

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
configSunmiFaceConfigParam&配置参数

返回值:SunmiFaceStatus

5.1.8. SunmiFaceRelease

函数定义:SunmiFaceStatus SunmiFaceRelease(SunmiFaceHandle handle);

函数功能:释放句柄

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄

返回值:SunmiFaceStatus

5.1.9. SunmiFaceGetImageFeatures

函数定义:SunmiFaceStatus SunmiFaceGetImageFeatures(SunmiFaceHandle handle, SunmiFaceImage image, SunmiFaceImageFeatures *features);

函数功能:从图像中获取人脸特征

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
imageSunmiFaceImage输入图片结构体
featuresSunmiFaceImageFeatures *返回人脸特征

返回值:SunmiFaceStatus

5.1.10. SunmiFaceCompare1v1

函数定义:SunmiFaceStatus SunmiFaceCompare1v1(SunmiFaceHandle handle, SunmiFaceFeature *feature1, SunmiFaceFeature *feature2, SunmiFaceCompareResult *compare_result);

函数功能:1:1人脸比对

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
feature1SunmiFaceFeature *比较特征1
feature2SunmiFaceFeature *比较特征2
compare_resultSunmiFaceCompareResult *比对结果

返回值:SunmiFaceStatus

5.1.11. SunmiFaceReleaseImageFeatures

函数定义:SunmiFaceStatus SunmiFaceReleaseImageFeatures(SunmiFaceImageFeatures *features);

函数功能:释放人脸特征

变量类型说明
featuresSunmiFaceImageFeatures *人脸特征

返回值:SunmiFaceStatus

5.1.12. SunmiFaceInitDB

函数定义:SunmiFaceStatus SunmiFaceInitDB(SunmiFaceHandle handle, const char* db_name);

函数功能:打开人脸数据库文件,如果不存在,则创建空的人脸数据库。SDK初始化时会默认打开config.json里面指定的face_db_file

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
db_nameconst char*数据库文件名称

返回值:SunmiFaceStatus

5.1.13. SunmiFaceAddDBRecord

函数定义:SunmiFaceStatus SunmiFaceAddDBRecord(SunmiFaceHandle handle, SunmiFaceDBRecord *record);

函数功能:添加一条人脸记录到人脸数据库中

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
recordSunmiFaceDBRecord *record人脸记录

返回值:SunmiFaceStatus

5.1.14. SunmiFaceSearchDB

函数定义:SunmiFaceStatus SunmiFaceSearchDB(SunmiFaceHandle handle, SunmiFaceDBRecord *record, SunmiFaceDBIdInfo *idInfo);

函数功能:1:N 人脸搜索

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
recordSunmiFaceDBRecord *人脸库记录结构体
idInfoSunmiFaceDBIdInfo *搜索结果

返回值:SunmiFaceStatus

5.1.15. SunmiFaceDeleteDBRecord

函数定义:SunmiFaceStatus SunmiFaceDeleteDBRecord(SunmiFaceHandle handle, char *img_id);

函数功能:根据图像id删除人脸数据库中的一个人脸记录

变量类型说明
handleSunmiFaceHandle输出参数,创建人脸SDK句柄
img_idchar *人脸采集图像在人脸库里的唯一ID

返回值:SunmiFaceStatus

6. Java函数接口定义

对外接口的定义在SunmiFaceSDK.java文件中。

6.1. 接口类定义

类名说明
SunmiFaceSDK人脸识别接口类名定义

6.2. 函数接口定义

6.2.1. getVersion

函数定义:public static String getVersion()

函数功能:获取Sunmi人脸识别SDK版本号

返回值:SDK版本字符串

6.2.2. Init

函数定义:public static int init(String configPath)

函数功能:初始化SDK

变量类型说明
configPathString配置文件路径

返回值:SunmiFaceStatusCode

6.2.3. verifyLicense

函数定义:public static int verifyLicense(Context context, String license)

函数功能:验证许可证

变量类型说明
contextContextAndroid context
licenseString许可证字符串

返回值:SunmiFaceStatusCode

6.2.4. getDeviceFingerprint

函数定义:public static String getDeviceFingerprint(Context context)

函数功能:获取Android设备指纹

变量类型说明
contextContextandroid context

返回值:设备指纹字符串

6.2.5. getErrorString

函数定义:public static String getErrorString(int code)

函数功能:获得错误字符串

变量类型说明
codeint错误代码

返回值:错误描述字符串

6.2.6. setConfig

函数定义:public static int setConfig(SunmiFaceConfigParam config)

函数功能:设置配置

变量类型说明
configSunmiFaceConfigParamSDK配置参数

返回值:SunmiFaceStatusCode

6.2.7. getConfig

函数定义:public static int getConfig(SunmiFaceConfigParam config)

函数功能:获取当前SDK配置

变量类型说明
configSunmiFaceConfigParamSDK配置参数

返回值:SunmiFaceStatusCode

6.2.8. getImageFeatures

函数定义:public static int getImageFeatures(SunmiFaceImage image, SunmiFaceImageFeatures features)

函数功能:从图像中进行人脸检测和人脸特征提取

变量类型说明
imageSunmiFaceImage输入图像
featuresSunmiFaceImageFeatures返回人脸特征

返回值:SunmiFaceStatusCode

6.2.9. compare1v1

函数定义:public int compare1v1(SunmiFaceFeature feature1, SunmiFaceFeature feature2, SunmiFaceCompareResult compare_result)

函数功能:人脸1:1比对

变量类型说明
features1SunmiFaceFeature人脸特征1
features2SunmiFaceFeature人脸特征2
compare_resultSunmiFaceCompareResult比对结果

返回值:SunmiFaceStatusCode

6.2.10. releaseImageFeatures

函数定义:public static int releaseImageFeatures(SunmiFaceImageFeatures features)

函数功能:释放人脸特征

变量类型说明
featuresSunmiFaceImageFeatures人脸特征

返回值:SunmiFaceStatusCode

6.2.11. initDB

函数定义:public static int initDB(String db_name)

函数功能:初始化新人脸数据库

变量类型说明
db_nameString人脸数据库文件名

返回值:SunmiFaceStatusCode

6.2.12. faceFeature2FaceDBRecord

函数定义:public static SunmiFaceDBRecord faceFeature2FaceDBRecord(SunmiFaceFeature feature)

函数功能:将人脸特征结构体转换成人脸库记录结构体

变量类型说明
featureSunmiFaceFeature人脸特征

返回值:SunmiFaceDBRecord

6.2.13. addDBRecord

函数定义:public static int addDBRecord(SunmiFaceDBRecord record)

函数功能:添加一条记录到人脸数据库,添加成功后通过img_id_可以的到人脸库中图片的ID,后续可以用来删除操作

变量类型说明
recordSunmiFaceDBRecord人脸库记录结构体

返回值:SunmiFaceStatusCode

6.2.14. searchDB

函数定义:public static int searchDB(SunmiFaceDBRecord record, SunmiFaceDBIdInfo idInfo)

函数功能:数据库中1:N人脸比对

变量类型说明
recordSunmiFaceDBRecord要搜索的人脸记录
idInfoSunmiFaceDBIdInfo搜索结果

返回值:SunmiFaceStatusCode

6.2.15. deleteDBRecord

函数定义:public static int deleteDBRecord(String img_id)

函数功能:根据图像id删除人脸数据库中的一条记录

变量类型说明
img_idString人脸采集图像的ID

返回值:SunmiFaceStatusCode