测试开源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

相关推荐
code bean2 小时前
【C#基础】函数传参大总结
服务器·开发语言·c#
shanshan20993 小时前
上位机系统架构 | 如何设计一个高效的多相机管理系统
c#·wpf·相机
ling1s5 小时前
C#基础(13)结构体
前端·c#
.Net Core 爱好者5 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
云草桑6 小时前
逆向工程 反编译 C# net core
前端·c#·反编译·逆向工程
指尖流烟7 小时前
C#调用图表的使用方法
开发语言·c#
friklogff9 小时前
【无标题】云端之C#:全面解析6种云服务提供商的SDK
开发语言·flask·c#
c#上位机10 小时前
C#事件的用法
java·javascript·c#
chnyi6_ya10 小时前
一些写leetcode的笔记
笔记·leetcode·c#
IT规划师11 小时前
C#|.net core 基础 - 扩展数组添加删除性能最好的方法
c#·.netcore·数组