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

news2024/11/16 1:49:50

  ViewFaceCore模块中的FaceQuality支持预测人脸质量,最初以为是预测人体体重,实际测试过程中才发现是评估人脸图片质量,主要调用Detect函数执行图片质量检测操作,其函数原型如下所示:

	    //
        // 摘要:
        //     人脸质量评估
        //
        // 参数:
        //   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函数执行眼睛状态检测操作,其函数原型如下所示:

	// 摘要:
    //     眼睛状态检测。
    //     眼睛的左右是相对图片内容而言的左右。
    //     需要模型 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tf卡为什么显示0字节?tf卡显示0字节怎么恢复数据

我的TF卡现在显示字节为0&#xff0c;想要打开总是会弹出要求格式化的对话框&#xff0c;里面有我重要的数据。请问如何恢复里面的数据啊&#xff1f;急&#xff01;急&#xff01;急&#xff01; ——在日常使用中&#xff0c;我们可能将重要的数据存储在TF卡中。然而&#x…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十天 40/50【二叉树递归】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

flask中的蓝图

flask中的蓝图 在 Flask 中&#xff0c;蓝图&#xff08;Blueprint&#xff09;是一种组织路由和服务的方法&#xff0c;它允许你在应用中更灵活地组织代码。蓝图可以大致理解为应用或者应用中的一部分&#xff0c;可以在蓝图中定义路由、错误处理程序以及静态文件等。然后可以…

vcruntime140_1.dll无法继续执行代码重新安装方法

cruntime140_1.dll是Windows操作系统中的一个动态链接库文件&#xff0c;它包含了一些与C运行时相关的函数和资源。在Windows系统中&#xff0c;许多应用程序和游戏都依赖于vcruntime140_1.dll文件来正常运行。当系统中缺少或损坏了vcruntime140_1.dll文件时&#xff0c;就会出…

Unity源码分享-黄金矿工游戏完整版

Unity源码分享-黄金矿工游戏完整版 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88118933

flask创建数据库连接池

flask创建数据库连接池 在Python中&#xff0c;您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装&#xff0c;实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系…

superset为何无法上传excel,csv等外部文件

superset为何无法上传excel&#xff0c;csv等外部文件 这是由于没有打开数据库的上传外部文件的权限 1.打开数据库连接设置&#xff0c;选择Allow file uploads to database 2.发现这里的上传链接都可以使用

HTML+CSS+JavaScript:实现京东官网固定导航栏

一、需求 在京东官网首页&#xff0c;只要页面滚动到京东秒杀倒计时的位置&#xff0c;顶部的导航栏就会自动出现且固定在窗口最上方&#xff0c;如下图 我们将模仿京东官网的效果&#xff0c;做一个简易的固定导航栏&#xff0c;如下图 二、代码素材 以下是缺失JS部分的代码…

你应该知道的关于PCB布线的31条建议

1、走线长度应包含过孔和封装焊盘的长度。 2、布线角度优选135角出线方式&#xff0c;任意角度出线会导致制版出现工艺问题。 图1 PCB布线的角度 3、布线避免直角或者锐角布线&#xff0c;导致转角位置线宽变化&#xff0c;阻抗变化&#xff0c;造成信号反射&#xff0c;如图2…

AVL/B-/+ Tree查找

文章目录 0 树表的查找1 二叉排序树1.1 二叉排序树的操作1.1.1 二叉排序树的存储1.1.2 二叉排序树的递归查找1.1.3 二叉排序树的插入1.1.4 二叉排序树的生成1.1.5 二叉排序树的删除 1.2 二叉排序树的查找性能分析 2 平衡二叉树&#xff08;AVL树&#xff09;2.1 失衡二叉排序树…

WEB:web2

背景知识 代码审计 题目 由上述可知&#xff0c;这段代码定义了一个函数encode&#xff0c;接受一个字符串参数$str&#xff0c;并返回对其进行加密后的结果 加密算法包括&#xff1a; 使用strrev函数将字符串进行翻转&#xff1b;对翻转后的每个字符&#xff0c;将其ASCII值…

【playbook】Ansible的脚本----playbook剧本

Ansible的脚本----playbook剧本 1.playbook剧本组成2.playbook剧本实战演练2.1 实战演练一&#xff1a;给被管理主机安装Apache服务2.2 实战演练二&#xff1a;使用sudo命令将远程主机的普通用户提权为root用户2.3 实战演练三&#xff1a;when条件判断指定的IP地址2.4 实战演练…

企业如何制定数字化管理决策方案

数字化管理决策是指通过利用数字技术和数据分析来辅助和支持管理决策的过程。它利用计算机、互联网和其他技术来收集、分析和解释大量的数据&#xff0c;从而帮助管理者做出更准确、更有效的决策。 数字化管理决策的关键 数据收集与分析&#xff1a;数字化管理决策依赖于数据…

FreeRTOS之队列

什么是队列&#xff1f; 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构&#xff0c;队列可以在任务与任务间、中断和任 务间传递信息。 关于队列的几个名词&#xff1a; 队列项目&#xff1a;队列中的每一个数据&#xff1b; 队列长度&#xff1a;队列能够…

PHP生成动态小程序二维码自定义路径和参数

PHP生成动态小程序二维码自定义路径和参数 小程序路径src 参数params http://test.com?srcindex/index/index&paramsstore_id10<?php $src$_GET[src]; $params$_GET[params];doPageNewQr($src,$params); function doPageNewQr($src,$params){//配置APPID、APPSECRET$A…

品牌触点:特别关注消费者的关键接触点

品牌触点&#xff1a;特别关注消费者的关键接触点 有个专门岗位&#xff1a;触点经理 打造品牌是超级工程 关键触点要持久不断地努力 很受启发 趣讲大白话&#xff1a;让消费者见一次喜欢一次 【趣讲信息科技240期】 **************************** 品牌触点是品牌与消费群体接触…

2023-将jar包上传至阿里云maven私有仓库(云效制品仓库)

一、背景介绍 如果要将平时积累的代码工具jar包&#xff0c;上传至云端&#xff0c;方便团队大家一起使用&#xff0c;一般的方式就是上传到Maven中心仓库&#xff08;但是这种方式步骤多&#xff0c;麻烦&#xff0c;而且上传之后审核时间比较长&#xff0c;还不太容易通过&a…

Spring 6【数据绑定之类型转换(Type Conversion)】(十一)-全面详解(学习总结---从入门到深化)

目录 数据绑定之类型转换(Type Conversion) 数据绑定之类型转换(Type Conversion) 1.PropertyEditor 在Spring框架3.0之前并没有提供类型转换器&#xff0c;而是使用JDK原生的java.beans.PropertyEditor进行类型转换&#xff08;提供了PropertyEditor接口的几个实现类&#x…

指令调度(Instruction Scheduling)

指令调度&#xff08;Instruction Scheduling&#xff09; 指令调度的约束基本机器模型基本块调度全局调度 指令调度是为了提高指令级并行&#xff08;ILP&#xff09;&#xff0c;对于超长指令字&#xff08;VLIW, Very Long Instruction Word&#xff09;和多发射系统&#x…