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


参考文献:

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

相关推荐
凯丨6 小时前
AI 蠕虫来了:恶意文档如何通过 Copilot for Word 自我传播?
人工智能·c#·copilot
Aaron - Wistron6 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
骊城英雄8 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰8 小时前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
哎呦喂我去去去8 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
caishenzhibiao10 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
库拉库拉里10 小时前
Word文档的标题总是自动出现首行缩进怎么办?
c#·word·xhtml
在世修行10 小时前
从零打造 C# 工业视觉检测系统(一):项目全景与架构设计
c#·视觉检测
牡丹雅忻111 小时前
AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
java·开发语言·c#
脚踏实地皮皮晨12 小时前
002002002_DepandencyObject类2
开发语言·windows·算法·c#·visual studio