基本使用

人脸识别基本流程

1. 单目识别

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

../_images/monc.jpg

流程图:

../_images/monocular_zh.png

伪代码:

//检测人脸,返回人脸box
Bbox faceBbox = dfaceDetect.detectionMax(frame);
//判断人脸质量
float qualityScor = dfaceAssessment.predictQuality(frame, faceBbox);
if(qualityScore < 0.45){
    print("Low Quality");
    return;
}
//RGB活体检测
float liveScore = dfaceRGBLiveness.liveness_check(frame, faceBbox);
if(liveScore < 0.45){
    print("Fake Face");
    return;
}
//提取人脸特征
byte[] feature = dfaceRecognize.extractFaceFeatureByImg(frame, faceBbox);
//根据特征寻找相似度最高用户
User matchedUser = findTopSimilarityUser(feature);

2. 双目识别

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

../_images/bion.jpg

流程图:

../_images/binocular_zh.png

伪代码:

//彩色摄像头画面检测人脸,返回人脸box
Bbox faceBboxColor = dfaceDetect.detectionMax(colorFrame);
//判断人脸质量
float qualityScor = dfaceAssessment.predictQuality(colorFrame, faceBboxColor);
if(qualityScore < 0.45){
    print("Low Quality");
    return;
}

//红外摄像头画面检测人脸,返回人脸box
Bbox faceBboxIR = dfaceDetect.detectionMax(irFrame);
//红外活检
float irLiveScore = dfaceNIRLiveness.liveness_check(faceBboxColor, faceBboxIR);
if(irLiveScore < 0.45){
    print("Fake Face");
    return;
}
//RGB活体检测
float colorLiveScore = dfaceRGBLiveness.liveness_check(colorFrame, faceBboxColor);
if(colorLiveScore < 0.45){
    print("Fake Face");
    return;
}
//提取人脸特征
byte[] feature = dfaceRecognize.extractFaceFeatureByImg(colorFrame, faceBboxColor);
//根据特征寻找相似度最高用户
User matchedUser = findTopSimilarityUser(feature);

DFACE各个模块使用

SDK提供人脸检测,人脸识别,人脸姿态,活体判断等各个独立的功能提供相应的模块,用户可以按照自己的需求灵活地调用。

1. DfaceDetect

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

//设置检测最小脸
dfaceDetect.SetMinSize(80);
//检测人脸,返回人脸box列表
List<Bbox> faceBboxs = dfaceDetect.detection(frame, false);

2. DfaceTrack

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

//开启跟踪
dfaceTrack.start();
while(frame){
   //检测人脸
   List<Bbox> faceBboxs = dfaceDetect.detection(frame, false);
   //跟踪人脸,需要以上检测人脸的边框输入
   List<Bbox> trackBoxs = dfaceTrack.update(frame, faceBboxs);
}
//关闭跟踪
dfaceTrack.stop();

警告

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

3. DfaceRecognize

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

//设置检测最小脸
List<Bbox> bbox = dfaceDetect.detectionMax(frame, true);
//提取人脸特征
byte[] feature1 = dfaceRecognize.extractFaceFeatureByImg(frame, bbox;

4. DfaceCompare

DfaceCompare常用于人脸特征比对,适用于1:1,1:n比对。

//抽取人脸特征
byte[] feature1 = dfaceRecognize.extractFaceFeatureByImg(frame, bbox1;
byte[] feature2 = dfaceRecognize.extractFaceFeatureByImg(frame, bbox2;
//n个人脸特征
byte[][] feature_n;
//n个人脸特征对应的id
long[] idx_n;
//特征比对(1:1)
float similarity = dfaceCompare.similarityByFeature(feature1, feature2);

5. DfacePose

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

//设置检测最小脸
List<Bbox> bbox = dfaceDetect.detectionMax(frame, true);
//判断98关键点和姿态
List<FaceLandmark> poses = dfacePose.predictPose(frame, Arrays.asList(bbox));

注解

  • 欧拉角介绍 欧拉角

  • yaw(偏航角): 人脸朝向视角,向右转脸为正角度,向左转脸为负角度(单位角度数)

  • pitch(俯仰角): 人脸朝向视角, 向下俯为正角度,向上仰为负角度(单位角度数)

  • roll(滚转角): 人脸朝向视角,向右滚头为正,向左滚头为负(单位角度数)

  • t_x: 摄像头为视角,向摄像头右方偏离为正,左方为负(单位米)

  • t_y: 摄像头为视角,向摄像头上方偏离为正,下方为负(单位米)

  • t_z: 摄像头为视角,偏离摄像头越远值越大,该值和摄像头焦距关系很大,实际生成环境需要设置好焦距参数

6. DfaceRGBLiveness

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

//活体判断,输入图片需要减少压缩损失
float score = dfaceRGBLiveness.liveness_check(frame, box);

7. DfaceNIRLiveness

DfaceNIRLiveness是近红外活体检测模块,常用于红外活体判断。

//活体判断
int live = dfaceNIRLiveness.liveness_check(ir_box, color_box);

8. DfaceAssessment

DfaceAssessment是人脸质量评估模块。

//质量判断
float score = dfaceAssessment.predictQuality(frame, box);

9. DfaceTool

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