基本使用

人脸识别基本流程

1. (RGB Camera)人脸识别

RGB Camera人脸识别是指用普通的彩色摄像头做活体判断,然后提取人脸特征并比对。

../_images/monc.jpg

伪代码:

DfaceDetect dfaceDetect = new DfaceDetect(dfaceConfig);
DfaceFeature dfaceFeature = new DfaceFeature(dfaceConfig);
DfaceQuality dfaceQuality = new DfaceQuality(dfaceConfig);
DfaceRGBLiveness dfaceRGBLiveness = new DfaceRGBLiveness(dfaceConfig);

//检测人脸,返回人脸box
List<Box> faceBoxes = dfaceDetect.detectMaxFace(frame);
Box maxFace = faceBoxes.get(0);
//判断人脸质量
float qualityScor = faceQuality.predictQuality(frame, maxFace);
if(qualityScore < 0.20){
    print("Low Quality");
    return;
}
//RGB活体检测
float liveScore = dfaceRGBLiveness.livenessCheck(frame, maxFace);
if(liveScore < 0.76){
    print("Fake Face");
    return;
}
//提取人脸特征
byte[] feature = dfaceFeature.extractFeature(frame, maxFace);
//根据特征寻找相似度最高用户
User matchedUser = findTopSimilarityUser(feature);

2. (RGB-IR Camera)人脸识别(推荐使用)

(RGB-IR Camera)人脸识别是指用双目摄像头(彩色+红外)做活体判断,然后提取人脸特征并比对。

../_images/bion.jpg

伪代码:

DfaceDetect dfaceDetect = new DfaceDetect(dfaceConfig);
DfaceFeature dfaceFeature = new DfaceFeature(dfaceConfig);
DfaceQuality dfaceQuality = new DfaceQuality(dfaceConfig);
DfaceRGBLiveness dfaceIRLiveness = new DfaceRGBLiveness(dfaceConfig);

//检测人脸,返回人脸box
List<Box> faceBoxes = dfaceDetect.detectMaxFace(rgbFrame);
Box maxFaceBox = faceBoxes.get(0);
//判断人脸质量
float qualityScor = dfaceQuality.predictQuality(rgbFrame, maxFaceBox);
if(qualityScore < 0.20){
    print("Low Quality");
    return;
}
//IR活体检测
float liveScore = dfaceIRLiveness.livenessCheck(rgbFrame, maxFaceBox, irFrame);
if(liveScore < 0.76){
    print("Fake Face");
    return;
}
//提取人脸特征
byte[] feature = faceFeature.extractFeature(frame, maxFaceBox);
//根据特征寻找相似度最高用户
User matchedUser = findTopSimilarityUser(feature);

DFACE各个功能模块使用

SDK提供人脸检测,人脸特征码提取,活体判断,人脸关键点等各个独立的功能提供相应的处理模块,用户可以按照自己的需求灵活地调用。

1. DfaceDetect

DfaceDetect是人脸检测模块,可实时的实现多人检测,最大脸检测,人脸质量判断等功能。

DfaceDetect dfaceDetect = new DfaceDetect(dfaceConfig);
//检测人脸,返回人脸box列表
List<Box> faceBoxes = dfaceDetect.detectFace(frame);

2. DfaceTracker

DfaceTracker是人脸跟踪模块,可实现实时多人跟踪功能。

//检测人脸
List<Box> faceBoxes = dfaceDetect.detectFace(frame);
//跟踪人脸,需要以上检测人脸的边框输入
List<Box> trackBoxes = dfaceTracker.update(frame, faceBoxes);
for(Box faceBox : trackBoxes){
    //获取track id
    int trackId = faceBox.id;
}

警告

跟踪是预估判断,因此返回的位置信息有可能会超出摄像头画面范围。单独使用最好和摄像头画面范围做下判断,以免越界访问。

3. DfaceFeature

DfaceFeature是人脸特征提取模块,主要用于人脸特征提取。目前提供4种精度模式(LOW_512BYTES,HIGH_512BYTES,LOW_1024BYTES,HIGH_1024BYTES)。

DfaceConfig dfaceConfig = new DfaceConfig();
//配置特征模型版本,目前支持的人脸特征版本, V6_MASK(默认,支持戴口罩的人脸),V3(兼容小于6.0版本的特征码),V6(不支持戴口罩的人脸)
dfaceConfig.setFeatureVersion(kFEATURE_V6_MASK);

DfaceFeature dfaceFeature = new DfaceFeature(dfaceConfig);
//提取人脸特征
byte[] feature = dfaceFeature.extractFeature(frame, maxFaceBox);

4. DfaceLandmarks

DfaceLandmarks是人脸关键点模块,主要用于人脸106关键点和姿态的判断。

DfaceLandmarks dfaceLandmarks = new DfaceLandmarks(dfaceConfig);

//判断106关键点和姿态
int[] landmarks = dfaceLandmarks.detectLandmarks(frame, maxFaceBox);

5. DfaceRGBLiveness

DfaceRGBLiveness是RGB活体检测处理模块,常用于活体判断。

DfaceRGBLiveness dfaceRGBLiveness = new dfaceRGBLiveness(dfaceConfig);
//活体判断,输入图片需要减少压缩损失
float score = dfaceRGBLiveness.livenessCheck(frame, maxFaceBox);

6. DfaceIRLiveness

DfaceIRLiveness是红外活体检测处理模块,常用于红外活体判断。

DfaceIRLiveness dfaceIRLiveness = new DfaceIRLiveness(dfaceConfig);
//活体判断, 需要输入RGB和IR图像
float score = dfaceIRLiveness.livenessCheck(rgbFrame, maxFaceBox, irFrame);

7. DfaceQuality

DfaceQuality是人脸质量评估模块。

//工厂模式创建DfaceUnitQuality
DfaceQuality dfaceQuality = new DfaceQuality(dfaceConfig);
//质量判断
float score = dfaceQuality.predictQuality(frame, maxFaceBox);

8. DfaceMask

DfaceMask是人脸是否佩戴口罩检测。

DfaceMask dfaceMask = new DfaceMask(dfaceConfig);
//口罩判断
float score = dfaceMask.predictMask(frame, maxFaceBox);

9. DfaceTool

DfaceTool工具类,包含了一些图像处理,特征转换和数据处理方法。