测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

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类的测试程序,测试效果截图如下所示(人脸越清晰,检测效果越准确)。


参考文献:

1\]https://github.com/ViewFaceCore/ViewFaceCore

相关推荐
CHANG_THE_WORLD39 分钟前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
zxbmmmmmmmmm7 小时前
在 Avalonia 中编写高性能动画
c#·xaml·avalonia·compositon
加号39 小时前
【C#】 HTTP 请求通讯实现指南
开发语言·http·c#
步步为营DotNet9 小时前
.NET 11 中 Microsoft.Extensions.AI 在智能后端推理与决策优化的应用
云原生·c#·.net
工程师00710 小时前
.NET 线程池 工作线程 扩容 + 空闲 + 回收 原理
c#·线程池·扩容·回收·空闲
njsgcs10 小时前
c# solidworks createline 拉伸发现有微小两点间隙 导致拉伸变成薄壁特征 改bug画了6个小时 解决结果
c#·bug·solidworks
时光追逐者10 小时前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
绿豆人10 小时前
进入内核-中断开启
开发语言·c#
步步为营DotNet10 小时前
.NET 11 中 C# 14 新特性在云原生微服务安全与性能优化的深度探索
云原生·c#·.net