下载SDK

下载人脸识别-离线版Android SDK

1. 登录 习悦开发者平台,进入 人脸识别-离线版 SDk 页面,点击“Android SDK下载”按钮,如图:

2. 按要求填写您 下载SDK的用途 ,填完后点击“生成SDK”按钮,如图:

3. 系统将根据您所填的内容生成一个离线SDK,耗时0-3秒,如图:

4. 成功生成后,请点击上方大蓝按钮进行sdk的下载,如图:

Android 开发

人脸检测 - 开发流程图

人脸识别 - 开发流程图

开始开发

1. SDK配置:将sdk中的libs下的所有文件复制到android项目中的libs下,包括so库和jar包。

2. so库路径配置:在编辑项目中的build.gradle文件,配置lib路径,配置如下:

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

    右键选择jar包,选择 add as library

3. 使用ZHThinkjoyFace类进行人脸检测以及识别,具体的使用方法请看 api文档

数据类

Point

用于保存坐标信息,使用两个float的变量x,y来存放某一点的坐标位置。

成员名 类型 描述
x float 横坐标
y float 纵坐标

FaceRectangle

用于保存人脸框的位置信息,使用长度为2的Point数组保存人脸框左上和右下的坐标。

成员名 类型 描述
faceRectangle Point[2] 人脸框左上和右下的坐标

FaceLandMark

用于保存人脸的五个关键点坐标。分别是左眼,右眼,鼻子,左嘴角,右嘴角的坐标。

成员名 类型 描述
landMark Point[5] 人脸的五个关键点坐标

FaceFeature

用于保存人脸的特征。

成员名 类型 描述
feature float[128] 保存一张人脸的特征

FaceConfig

用于保存人脸检测的各种参数。

成员名 类型 描述
MinFaceSize int 最小人脸尺寸
Interval int 全图检测的间隔(跟踪模式下有效)
DetectMode int 人脸检测的模式(正常模式或者跟踪模式)
Rotaion int 图片旋转的角度(右旋)
ResultMode int 用于设置返回坐标为原图坐标还是旋转之后的坐标
DETECT_MODE_NORMAL 常量 正常模式
DETECT_MODE_TRACK 常量 跟踪模式
RESULT_MODE_NORMAL 常量 设置返回原图坐标
RESULT_MODE_ROTATE 常量 设置返回旋转之后图的坐标
ROTATE_0 常量 设置旋转角度为0
ROTATE_90 常量 设置旋转角度为90
ROTATE_180 常量 设置旋转角度为180
ROTATE_270 常量 设置旋转角度为270

接口类

ZHThinkjoyFace

人脸识别的主要接口类,包含人脸位置及关键点检测,特征提取,特征比对。

创建类对象

ZHThinkjoyFace getInstance(Context context);
参数说明
参数名 参数类型 参数说明
必须 context Context 当前的上下文
返回值
参数类型 参数说明
ZHThinkjoyFace 接口类的单例对象
使用示例
ZHThinkjoyFace zhThinkjoyFace = ZHThinkjoyFace.getInstance(this);

初始化

init();
使用示例
zhThinkjoyFace.init();

参数设置

FaceConfig getConfig();
返回值
参数类型 参数说明
FaceConfig 返回当前的人脸检测参数
void setConfig(FaceConfig faceConfig);
参数说明
参数名 参数类型 参数说明
faceConfig FaceConfig 用于设置当前人脸检测参数
参数范围说明
参数名 范围
Rotation ROTATE_0 旋转0度
ROTATE_90 旋转90度
ROTATE_180 旋转180度
ROTATE_270 旋转270度
DetectMode DETECT_MODE_NORMAL 正常模式
DETECT_MODE_TRACK 跟踪模式
ResultMode RESULT_MODE_ROTATE 返回结果为旋转之后的图片坐标
RESULT_MODE_NORMAL 返回结果为原图的坐标
使用示例
FaceConfig faceConfig = zhthinkjoyFace.getConfig();
//设置图片的旋转角度为180度
faceConfig.Rotation = FaceConfig.ROTATE_90;
// 设置当前的模式为跟踪模式
faceConfig.DetectMode = FaceDetectConfig.DETECT_MODE_TRACK;
faceConfig.Interval = 10;
faceConfig.ResultMode = FaceDetectConfig.RESULT_MODE_CONVERSE;
zhthinkjoyFace.setConfig(faceConfig);

人脸检测

void faceDetect(Bitmap bitmap, List<FaceRectangle> faceRectangleList, List<FaceLandMark> faceLandMarkList);
参数说明
参数名 参数类型 参数说明
必须 bitmap Bitmap 位图
必须 faceRectangleList List<FaceRectangle> (返回参数)人脸位置列表
必须 faceLandMarkList List<FaceLandMark> (返回参数)人脸关键点列表
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();
zhThinkjoyFace.faceDetect(bitmap, faceRectangleList, faceLandMarkList);
void faceDetect(byte[] imageArray, int imageType, int imageWidth, int imageHeight,
List<FaceRectangle> faceRectangleList, List<FaceLandMark> faceLandMarkList);
参数说明
参数名 参数类型 参数说明
必须 imageArray byte[] 保存当前检测图片的byte数组
必须 imageType int 当前图片的类型
必须 imageWidth int 当前图片的宽度
必须 imageHeight int 当前图片的高度
必须 faceRectangleList List<FaceRectangle> (返回参数) 所有人脸的位置信息
必须 faceLandMarkList List<FaceLandMark> (返回参数)所有人脸的关键点坐标
参数取值范围
参数名 取值范围
imageType IMAGE_FORMAT_NV21 设置图片格式为NV21
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();

zhThinkjoyFace.faceDetect(imageArray, ZHThinkjoyFace.IMAGE_FORMAT_NV21, 1920, 1080, faceRectangleList,
faceLandMarkList);

人脸特征提取

void featureExtract(Bitmap bitmap, List<FaceLandMark> faceLandMarkList, List<FaceFeature> faceFeatureList);
参数说明
参数名 参数类型 参数说明
必须 bitmap Bitmap 位图
必须 faceLandMarkList List<FaceLandMark> 人脸关键点列表
必须 faceFeatureList List<FaceFeature> (返回参数)人脸特征列表
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();
zhThinkjoyFace.faceDetect(bitmap, faceRectangleList, faceLandMarkList);
List<FaceFeature> faceFeatureList = new ArrayList<>();
zhThinkjoyFace.featureExtract(bitmap, faceLandMarkList, faceFeatureList);
void featureExtract(byte[] imageArray, int imageType, int imageWidth, int imageHeight,
List<FaceLandMark> faceLandMarkList, List<FaceFeature> faceFeatureList);
参数说明
参数名 参数类型 参数说明
必须 imageArray byte[] 保存当前检测图片的byte数组
必须 imageType int 当前需要进行特征提前的图片的类型
必须 imageWidth int 当前传入图片的宽度
必须 imageHeight int 当前传入图片的高度
必须 faceLandMarkList List<FaceLandMark> 人脸关键点位置
必须 faceFeatureList List<FaceFeature> (返回参数)所有人脸特征列表
参数取值范围
参数名 取值范围
imageType IMAGE_FORMAT_NV21 设置图片格式为NV21
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();
zhThinkjoyFace.faceDetect(imageArray, ZHThinkjoyFace.IMAGE_FORMAT_NV21, 1920, 1080, faceRectangleList,
faceLandMarkList);
List<FaceFeature> faceFeatureList = new ArrayList<>();
zhThinkjoyFace.featureExtract(imageArray, ZHThinkjoyFace.IMAGE_FORMAT_NV21, 1920, 1080,faceLandMarkList,
faceFeatureList);

人脸检测和特征提取

void faceDetectAndFeatureExtract(Bitmap bitmap, List<FaceRectangle> faceRectangleList,
List<FaceLandMark> faceLandMarkList, List<FaceFeature> faceFeatureList) ;
参数说明
参数名 参数类型 参数说明
必须 bitmap Bitmap 位图
必须 faceRectangleList List<FaceRectangle> (返回参数)人脸位置列表
必须 faceLandMarkList List<FaceLandMark> (返回参数)人脸关键点列表
必须 faceFeatureList List<faceFeature> (返回参数)人脸特征列表
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();
List<FaceFeature> faceFeatureList = new ArrayList<>();
zhThinkjoyFace.FaceDetectAndFeatureExtract(bitmap, faceRectangleList, faceLandMarkList, faceFeatureList);
void faceDetectAndFeatureExtract(byte [] imageArray, int imageType, int imageWidth, int imageHeight,
List<FaceRectangle> faceRectangleList, List<FaceLandMark> faceLandMarkList, List<FaceFeature> faceFeatureList);
参数说明
参数名 参数类型 参数说明
必须 imageArray byte[] 当前需要进下检测和特征提取的图片
必须 imageType int 当前传入的图片的类型
必须 imageWidth int 当前传入图片的宽度
必须 imageHeight int 当前传入图片的高度
必须 faceRectangleList List<FaceRectangle> 所有人脸的位置信息
必须 faceLandMarkList List<FaceLandMark> 当前人脸关键点位置
必须 faceFeatureList List<faceFeature> 所有人脸特征列表
参数取值范围
参数名 取值范围
imageType IMAGE_FORMAT_NV21 设置图片格式为NV21
使用示例
List<FaceRectangle> faceRectangleList = new ArrayList<>();
List<FaceLandMark> faceLandMarkList = new ArrayList<>();
List<FaceFeature> faceFeatureList = new ArrayList<>();
zhThinkjoyFace.FaceDetectAndFeatureExtract(imageArray, ZHThinkjoyFace.IMAGE_FORMAT_NV21, 1920, 1080,
faceRectangleList, faceLandMarkList, faceFeatureList);

特征比对

double[] featureCompare(FaceFeature faceFeature, List<FaceFeature> faceFeatureList);
参数说明
参数名 参数类型 参数说明
必须 faceFeature FaceFeature 人脸特征
必须 faceFeatureList List<FaceFeature> 人脸特征列表
返回值
参数类型 参数说明
double[] faceFeature与faceFeatureList中每个特征比对出来的分数,每个分数的值域为[0.0, 1.0]
使用示例
//faceFeature是人脸特征,faceFeatureList是人脸特征列表。
double[] score;
score = zhThinkjoyFace.featureCompare(faceFeature, faceFeatureList);
Q群
咨询