ViewFaceCore模块中的FaceQuality支持预测人脸质量,最初以为是预测人体体重,实际测试过程中才发现是评估人脸图片质量,主要调用Detect函数执行图片质量检测操作,其函数原型如下所示:
csharp
//
// 摘要:
// 人脸质量评估
//
// 参数:
// image:
// 人脸图像信息
//
// info:
// 面部信息
// 通过 FaceDetector(FaceImage) 获取
//
// points:
// info 对应的关键点坐标
// 通过 FaceMark(FaceImage, FaceInfo) 获取
//
// type:
// 质量评估类型
public QualityResult Detect<T>(T image, FaceInfo info, FaceMarkPoint[] points, QualityType type)
// 质量评估结果
public class QualityResult : IFormattable
{
//
// 摘要:
// 质量评估等级
public QualityLevel Level { get; set; }
//
// 摘要:
// 质量评估分数
// 越大越好,没有范围限制
public float Score { get; set; }
//
// 摘要:
// 返回可视化字符串
public override string ToString()
}
// 摘要:
// 质量评估类型
[Description("质量评估类型")]
public enum QualityType
{
//
// 摘要:
// 亮度评估
// 亮度评估就是评估人脸区域内的亮度值是否均匀正常,存在部分或全部的过亮和过暗都会是评价为LOW。
[Description("亮度评估")]
Brightness,
//
// 摘要:
// 清晰度评估
// 清晰度这里是传统方式通过二次模糊后图像信息损失程度统计的清晰度。
[Description("清晰度评估")]
Clarity,
//
// 摘要:
// 完整度评估
// 完整度评估是朴素的判断人脸是否因为未完全进入摄像头而造成的不完整的情况。该方法不适用于判断遮挡造成的不完整。
[Description("完整度评估")]
Integrity,
//
// 摘要:
// 姿态评估
// 此姿态评估器是传统方式,通过人脸5点坐标值来判断姿态是否为正面。
[Description("姿态评估")]
Pose,
//
// 摘要:
// 姿态评估(深度)
// 此姿态评估器是深度学习方式,通过回归人头部在yaw、pitch、roll三个方向的偏转角度来评估人脸是否是正面。
// 需要模型 pose_estimation.csta
[Description("姿态评估(深度)")]
PoseEx,
//
// 摘要:
// 分辨率评估
// 判断人脸部分的分辨率。
[Description("分辨率评估")]
Resolution,
//
// 摘要:
// 清晰度评估(深度)
// 需要模型 quality_lbn.csta
// 需要模型 face_landmarker_pts68.csta
[Description("清晰度评估(深度)")]
ClarityEx,
//
// 摘要:
// 遮挡评估
// 需要模型 face_landmarker_mask_pts5.csta
[Description("遮挡评估")]
Structure
}
调用FaceQuality进行人脸质量检测主要包括以下步骤:
1)调用faceDetector类获取图片的人脸信息;
2)调用FaceLandmarker类获取人脸关键点信息;
3)调用FaceQuality类的Detect函数,根据人脸信息、人脸关键位置信息、质量评估类型等返回人脸质量评估结果。
根据上述步骤编写了FaceQuality类的测试程序(本文中的所有测试用图均来自百度图片),测试效果截图如下所示:
ViewFaceCore模块中的EyeStateDetector支持检测人脸中眼睛的开闭状态,主要调用Detect函数执行眼睛状态检测操作,其函数原型如下所示:
csharp
// 摘要:
// 眼睛状态检测。
// 眼睛的左右是相对图片内容而言的左右。
// 需要模型 eye_state.csta
//
// 参数:
// image:
// 人脸图像信息
//
// points:
// 关键点坐标
// 通过 FaceMark(FaceImage, FaceInfo) 获取
public EyeStateResult Detect<T>(T image, FaceMarkPoint[] points)
//
// 摘要:
// 眼睛状态结果
public class EyeStateResult : IFormattable
{
//
// 摘要:
// 左眼状态
public EyeState LeftEyeState { get; set; }
//
// 摘要:
// 右眼状态
public EyeState RightEyeState { get; set; }
//
// 摘要:
// 返回可视化字符串
public override string ToString()
{
return ToString(null, null);
}
}
//
// 摘要:
// 眼睛状态
[Description("眼睛状态")]
public enum EyeState
{
//
// 摘要:
// 眼睛闭合
[Description("闭眼")]
Close,
//
// 摘要:
// 眼睛张开
[Description("睁眼")]
Open,
//
// 摘要:
// 不是眼睛区域
[Description("不是眼睛区域")]
Random,
//
// 摘要:
// 状态无法判断
[Description("无法判断")]
Unknown
}
调用EyeStateDetector进行眼睛状态检测主要包括以下步骤:
1)调用faceDetector类获取图片的人脸信息;
2)调用FaceLandmarker类获取人脸关键点信息;
3)调用EyeStateDetector类的Detect函数获取指定人脸的左右眼睛的开闭状态。
根据上述步骤编写了EyeStateDetector类的测试程序,测试效果截图如下所示(人脸越清晰,检测效果越准确)。
参考文献: