Version:facelib 2.2.1.8
RokidFaceSDK提供基础的人脸检测+人脸跟踪+人脸识别,能够高效进行多人识别。本SDK封装底层算法接口,提供: 1.图片检测+图片识别 2.相机预览数据人脸检测,人脸跟踪,人脸识别。 3.人脸数据库增删改查的接口 4.能够获取人脸角度以及人脸质量等信息 5.单帧图片人脸检测,支持bitmap、NV21格式数据人脸检测
在project的build.gradle中添加jcenter依赖
allprojects {
repositories {
google()
jcenter()
}
}
在app的build.gradle中添加依赖
dependencies {
implementation 'com.rokid.glass:facelib:2.2.1.8'
}
网络权限:
<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/>
相机权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
在应用的Application的onCreate方法中初始化引擎: 1. 人脸识别引擎初始化
CitrusFaceEngine.Init(Context context);
参数 | 含义 |
---|---|
context | 上下文context |
人脸数据库初始化需要下面几步操作: 1. 创建人脸数据库Helper 说明:数据库操作的实体类
FaceDbHelper(Context context)
参数 | 含义 |
---|---|
context | 上下文context |
返回:
FaceDbHelper
2. 设置人脸数据库的模式(非必须)
void setModel(int model)
参数 | 含义 |
---|---|
model | FaceDbHelper的模式 FaceDbHelper.MODEL_DB: 数据库模式 FaceDbHelper.MODEL_RECOGL: 搜索模式 默认为数据库模式 |
3.设置数据库名称 (非必须)
void configDb(String dbName)
参数 | 含义 |
---|---|
dbName | 设置数据库名称 默认数据库名称 user.db |
示例代码
FaceDbHelper dbCreator = new FaceDbHelper(getApplicationContext());
dbCreator.setModel(FaceDbHelper.MODEL_DB);
dbCreator.configDb("user.db");
说明: 添加人脸数据以及对应的图片到数据库
UserInfo add(Bitmap bm, UserInfo info)
参数 | 含义 |
---|---|
bm | 传入的图片 |
info | 人脸信息 UserInfo |
返回: 用户信息 UserInfo
示例代码:
UserInfo info = new UserInfo("name", "card no");
Bitmap bm = BitmapFactory.decodeFile("sdcard/test.jpg");
dbCreator.add(bm, info);
说明: 删除用户信息
boolean remove(String uuid)
参数 | 含义 |
---|---|
uuid | 用户信息中的uuid |
示例代码:
dbCreator.remove(uuid);
说明: 更新人脸数据信息
boolean update(Bitmap bm,UserInfo info)
参数 | 含义 |
---|---|
bm | 传入的图片 |
info | 人脸信息 UserInfo |
示例代码:
Bitmap bm = BitmapFactory.decodeFile("sdcard/test.jpg");
dbCreator.update(bm, newInfo);
说明: 分页查询用户信息
List<UserInfo> queryBySize(int index,int count)
参数 | 含义 |
---|---|
index | 开始查询的位置 |
count | 查询的数据size |
返回:
类型 | 含义 |
---|---|
List<UserInfo> |
用户信息列表 |
示例代码:
dbCreator.queryBySize(0,10);
说明:
- 数据库文件会储存在/sdcard/facesdk/ 目录下;
- 人脸数据库和算法数据库分别对应文件"user.db"和"SearchEngine.bin";
- 使用人脸识别功能时需将这两个文件拷贝至需要的设备中;
void save()
示例代码:
dbCreator.save();
说明: 清除数据库
dbCreator.clearDb();
1. 设置数据源宽高
DFaceConf setSize(int width,int height)
参数 | 含义 |
---|---|
width | 输入数据的宽 |
height | 输入数据的高 |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
2. 设置算法识别区域
DFaceConf setRoi(Rect rect)
参数 | 含义 |
---|---|
rect | 输入算法检测区域 |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
3. 设置输入数据的格式
DFaceConf setDataType(int dataType)
参数 | 含义 |
---|---|
dataType | 输入数据的格式: DataFormat.DATA_BGR bgr图片数据; DataFormat.DATA_BITMAP bitmap数据; DataFormat.DATA_YUV420 camera nv21数据 |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
4. 设置同时识别最大人脸数
DFaceConf setPoolNum(int poolNum)
参数 | 含义 |
---|---|
poolNum | 同时识别最大人脸数 |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
5. 设置识别的最大的人脸
DFaceConf setMaxSize(float faceMaxSize)
参数 | 含义 |
---|---|
faceMaxSize | 识别的最大的人脸size 取值(0f-1f)。例:如果相机分辨率为1280720,那能够识别的最大人脸的像素为width:1280faceMaxSize height:720*faceMaxSize |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
6.设置识别的最小的人脸
DFaceConf setMinSize(float faceMinSize)
参数 | 含义 |
---|---|
faceMinSize | 识别的最小的人脸size 取值(0f-1f)。例:如果相机分辨率为1280720,那能够识别的最小人脸的像素为width:1280faceMaxSize height:720*faceMaxSize |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
7. 设置单次detect的最大人脸数
DFaceConf setDetectMaxFace(int detectMaxFace)
参数 | 含义 |
---|---|
detectMaxFace | 单次detect能检测到的最大人脸数 |
返回:
类型 | 含义 |
---|---|
DFaceConf | 动态配置类 |
8. 设置识别相关配置
SFaceConf setRecog(boolean recog,String dbName)
参数 | 含义 |
---|---|
recog | 是否打开人脸识别开关 |
dbName | 人脸数据库文件夹路径 |
返回:
类型 | 含义 |
---|---|
SFaceConf | 静态配置类 |
5. 设置自动识别
SFaceConf setAutoRecog(boolean autoRecog)
参数 | 含义 |
---|---|
autoRecog | 是否打开自动识别开关 |
返回:
类型 | 含义 |
---|---|
SFaceConf | 静态配置类 |
6. 设置识别阈值
SFaceConf setTargetScore(float targetScore);
参数 | 含义 |
---|---|
targetScore | 阈值(取值0-100),小于阈值的识别结果将被过滤 |
返回:
类型 | 含义 |
---|---|
SFaceConf | 静态配置类 |
7. 设置识别超时
SFaceConf setOutTime(long ms);
参数 | 含义 |
---|---|
ms | 超时时间,超过该时间还没有超过阈值的识别结果,则返回超时 |
返回:
类型 | 含义 |
---|---|
SFaceConf | 静态配置类 |
8. 设置识别间隔
SFaceConf setRecogInterval(long ms);
参数 | 含义 |
---|---|
ms | 识别间隔,同一张人脸两次识别的时间间隔 |
返回:
类型 | 含义 |
---|---|
SFaceConf | 静态配置类 |
示例代码: |
DFaceConf conf = new DFaceConf();
conf.setSize(width, height); // 设置数据宽高
conf.setRoi(rect); // 设置检测roi区域
conf.setDataType(type) // 设置数据格式 DataFormat
SFaceConf conf = new SFaceConf();
conf.setRecog(true, dbPath); //设置路径
conf.setAutoRecog(true);//设置自动识别
conf.setTargetScore(80);//设置识别阈值
conf.setsetOutTime(2000);//设置超时时间
conf.setRecogInterval(5000);//设置识别间隔
1. 动态参数配置
VideoRokidFace create(Context context,DFaceConf dFaceConf)
参数 | 含义 |
---|---|
context | 上下文context |
dFaceConf | 动态配置类 |
返回:
VideoRokidFace
video人脸识别接口
2. 静态参数配置
sconfig(SFaceConf conf)
参数 | 含义 |
---|---|
conf | 静态配置类 |
示例代码:
VideoRokidFace videoFace = VideoRokidFace.create(context,videoDFaceConf);
videoFace.sconfig(sFaceConf);
说明:将数据传入sdk
void setData(VideoInput videoInput)
参数 | 含义 |
---|---|
videoInput | video输入数据类 |
示例代码:
videoFace.setData(new VideoInput(bytes));
说明:获取输入的数据
byte[] getBytes()
返回: 相机传入的数据
示例代码:
videoFace.getBytes();
说明:检测结果会统一以FaceModel数据结构返回
void startTrack(RokidFaceCallback rokidFaceCallback)
参数 | 含义 |
---|---|
rokidFaceCallback | 人脸检测+人脸跟踪+人脸识别的统一回调接口 |
示例代码:
videoFace.startTrack(new RokidFaceCallback() {
@Override
public void onFaceCallback(FaceModel model) {
}
});
说明:人脸识别接口的内存回收
videoFace.destroy();
说明:创建图片识别接口
IImageRokidFace imageFace = ImageRokidFace.create(context);
参数 | 含义 |
---|---|
context | context上下文 |
返回:
IImageRokidFace
图片识别的接口
示例代码:
IImageRokidFace imageFace = ImageRokidFace.create(context);
说明:图片识别静态配置
IImageRokidFace sconfig(SFaceConf sFaceConf)
参数 | 含义 |
---|---|
sFaceConf | 静态配置 |
返回:
IImageRokidFace
图片识别的接口
示例代码:
// 如果图片检测需要人脸识别,则sconfig
imageFace.sconfig(new SFaceConf().setRecog(true, dbPath));
说明:图片识别的功能实现接口
setImageFaceCallback(BitmapInput bitmapInput,ImageFaceCallBack callback)
参数 | 含义 |
---|---|
bitmapInput | bitmapInput图片输入的数据结构; |
callback | 图片人脸检测+人脸识别的统一回调接口 |
示例代码:
imageFace.setImageFaceCallback(new BitmapInput(bitmap),
new ImageRokidFace.ImageFaceCallBack() {
@Override
public void onFaceModel(FaceModel model) {
}});
说明: 图片人脸识别接口的回收
imageFace.destroy()
属性 | 含义 |
---|---|
uuid | 特征库UUID |
name | 姓名 |
cardno | 身份证号 |
nativeplace | 籍贯 |
checkcode | checkcode |
FaceModel {
int width;
int height;
List<FaceDO> faces; //人脸检测数据model,包含FaceDO list
}
FaceDO {
public RectF faceRectF; // 人脸rect
public int trackId; // trackId 人脸trackId,tracking中id不变
public boolean goodQuality;//人脸质量是否合格
public boolean goodPose;//人脸角度是否合格
public boolean goodSharpness;//人脸清晰度是否合格
public UserInfo userInfo; //人脸信息
public float[] pose; //人脸角度
public float userInfoScore; //人脸识别的分数
public float sharpness; //人脸清晰度
public boolean recogOutTime;//人脸是否超时
}