测试开源C#人脸识别模块ViewFaceCore(2:人脸关键点定位器和活体检测)

news2024/11/20 18:28:08

  ViewFaceCore模块中的FaceLandmarker类支持识别人脸关键点,也即人脸上的关键位置的坐标,其中主要调用Mark函数返回图片中指定人脸的关键点位置集合,该类需配合FaceDetector类共同使用。
  FaceLandmarker类支持识别3种类型的人脸关键点:68个关键点检测模型、5个关键点检测模型、戴口罩关键点检测模型,默认使用5个关键点检测模型,即左眼中心、右眼中心、鼻尖、左嘴角和右嘴角等5个人脸关键位置的坐标。
  采用FaceLandmarker和FaceDetector类识别并绘制人脸关键点的示例代码如下所示:

	 private class ImageFaceInfo
     {
         public FaceInfo Face;
         public FaceMarkPoint[] MarkPoints;
     }

     private void pnlImage_Paint(object sender, PaintEventArgs e)
     {
         ...
         ...
         if (m_image != null)
         {
             e.Graphics.DrawImage(m_image, m_startX, m_startY, m_image.Width * m_scale, m_image.Height * m_scale);

             if(m_faces.Count>0)
             {
                 for(int i=0; i<m_faces.Count; i++)
                 {
                     e.Graphics.DrawRectangle(Pens.Red,
                         m_startX + m_faces[i].Face.Location.X * m_scale,
                         m_startY + m_faces[i].Face.Location.Y * m_scale,
                         m_faces[i].Face.Location.Width * m_scale,
                         m_faces[i].Face.Location.Height * m_scale);

                     if (m_faces[i].MarkPoints!=null && m_faces[i].MarkPoints.Length>0)
                     {
                         foreach(FaceMarkPoint mp in m_faces[i].MarkPoints)
                         {
                             e.Graphics.DrawEllipse(Pens.Red, m_startX + Convert.ToInt32(mp.X - 3) * m_scale, m_startY + Convert.ToInt32(mp.Y -3) * m_scale, 6 * m_scale, 6 * m_scale);
                         }
                     }
                 }
             }
         }
     }
	 private void btnFace_Click(object sender, EventArgs e)
     {
         ...
         ...
         
         FaceDetector faceDetector = new FaceDetector();

         FaceLandmarkConfig config = new FaceLandmarkConfig();
         config.MarkType = MarkType.Normal;

         FaceLandmarker faceMark = new FaceLandmarker(config);

         m_faces.Clear();
         FaceInfo[] infos = faceDetector.Detect(bitmap);
         
         ...
         ...
         
         for (int i = 0; i < infos.Length; i++)
         {
             ImageFaceInfo fInfo = new ImageFaceInfo();
             fInfo.Face = infos[i];             
             fInfo.MarkPoints = faceMark.Mark(bitmap, infos[i]);

             m_faces.Add(fInfo);
         }

         ...
         ...
     }

  采用68个关键点检测模型时的程序运行效果如下所示(图片来自百度图片):
在这里插入图片描述
  采用5个关键点检测模型时的程序运行效果如下所示:
在这里插入图片描述
在这里插入图片描述
  ViewFaceCore模块的FaceAntiSpoofing类支持活体检测功能,所谓活体检测是指检测图片或视频中的人物是否是真人活体(参考文献2)。FaceAntiSpoofing类中的AntiSpoofing函数用于单帧活体检测,同时AntiSpoofingVideo函数用于视频帧活体检测,这两个函数的声明类似,但是视频帧活体检测AntiSpoofingVideo函数如果返回结果中的状态为Detecting,则需继续传入下一帧图片,关于该函数的用法后续会单独测试,本文中主要测试单帧活体检测函数AntiSpoofing。

	public AntiSpoofingResult AntiSpoofing(FaceImage image, FaceInfo info, FaceMarkPoint[] points)
   
    //返回结果如果为 ViewFaceCore.Model.AntiSpoofingStatus.Detecting,则说明需要继续调用此方法,传入更多的图片
	public AntiSpoofingResult AntiSpoofingVideo(FaceImage image, FaceInfo info, FaceMarkPoint[] points)

  AntiSpoofing函数的返回类型AntiSpoofingResult的结构如下,主要是通过AntiSpoofingStatus属性判断是否为活体,而该结果是依据清晰度和真实度的值得出的,主要逻辑为如果清晰度(clarity)低的话,就会直接返回FUZZY。清晰度满足阈值,则判断真实度(reality),超过阈值则认为是真人,低于阈值是攻击。阈值是通过FaceAntiSpoofingConfig设置的。
在这里插入图片描述
在这里插入图片描述
  程序的运行效果如下图所示:
在这里插入图片描述
在这里插入图片描述
  通过单张图片检测活体不是很靠谱,后续还得测试视频帧的识别效果。

参考文献:
[1]https://github.com/ViewFaceCore/ViewFaceCore
[2]https://www.leixue.com/ask/what-is-in-vivo-testing

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

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

相关文章

KingFunsion工程开发规范——JS规范

哈喽&#xff0c;大家好&#xff0c;我是雷工。 今天学习KingFunsion工程开发规范之JS规范。 第一章 统一规范 1.1. 一行代码只做一件事&#xff1b; 1.2. 长行拆分&#xff1b; 1.3. 代码块外使用try catch包裹&#xff1b; 1.4. 全局变量在数据词典中定义&#xff1b;…

分析业务团队如何进行技术建设

背景 大部分中大型的互联网公司&#xff0c;会按照一个技术团队 多个业务团队的组织形式。技术团队负责技术基础建设&#xff0c;而业务部门更多的聚焦在业务迭代上。 这种组织形式有其优越性&#xff1a; 可以避免大量重复技术建设 减少上下文&#xff0c;降低沟通成本 …

网络安全 Day20-计算机网络基础知识05(网络原理)

计算机网络基础知识05&#xff08;网络原理&#xff09; 1. OSI 模型2. VMware虚拟机NAT模式下上网原理3. 不能上网故障排查 1. OSI 模型 OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 2. VMware虚拟机N…

Qt+GDAL开发笔记(一):在windows系统mingw32编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131931309 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面

目录 ​编辑 一、前言 1、什么是腾讯云 Cloud Studio 2、本文实验介绍 二、前期准备工作 1、注册 Cloud Studio 2、初始化工作空间 三、开发一个简版的点餐系统页面 1、安装依赖 1.1、安装 antd-mobile 1.2、安装 less 和 less-loader 1.3、暴露 webpack 配置文件 …

Linux JDK 安装详解

安装JDK 1.1 下载jdk压缩包 下载地址&#xff1a; Java Downloads | Oracle Java Downloads | Oracle 下载完成之后上传到服务器 # 1.将JDK解压缩到指定目录 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/ 注意:-C参数是将JDK解压之后文件放入usr目录中 # 2.进入jdk解压缩目录…

前端Vue仿支付宝自定义可滑动轮播分页宫格菜单组件,可支持九宫格 十二宫格 十五宫格

背景介绍 随着技术的不断发展&#xff0c;传统的开发方式使得系统的复杂度越来越高。在传统开发过程中&#xff0c;一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c;我们采用了组件化的开发模…

SpringBoot+Prometheus+Grafana实现系统可视化监控

场景 SpringBoot中集成Actuator实现监控系统运行状态&#xff1a; SpringBoot中集成Actuator实现监控系统运行状态_springboot actuator 获取系统运行时长_霸道流氓气质的博客-CSDN博客 基于以上Actuator实现系统监控&#xff0c;还可采用如下方案。 Prometheus Prometheu…

EC200U-CN学习(一)

EC200U系列内置丰富的网络协议&#xff0c;集成多个工业标准接口&#xff0c;并支持多种驱动和软件功能&#xff08;适用于Windows 7/8/8.1/10、Linux和Android等操作系统下的USB驱动&#xff09;&#xff0c;极大地拓展了其在M2M领域的应用范围&#xff0c;如POS、POC、ETC、共…

PMP项目成本管理-控制成本-挣值分析

适用于控制成本过程的数据分析技术包括: 挣值分析 (EVA Earned value analysis) 挣值分析将实际进度和成本绩效与绩效测量基准进行比较。EVM(Earned value Management)把范围基准、成本基准和进度基准整合起来&#xff0c;形成绩效测量基准。它针对每个工作包和控制账户&…

MPAS跨尺度、可变分辨率模式

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…

【LeetCode】19.删除链表的倒数第N个结点

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…

Stable Diffusion - 扩展 SegmentAnything 和 GroundingDINO 实例分割算法 插件的配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131918652 Paper and GitHub&#xff1a; Segment Anything: SAM - Segment Anything GitHub: https://github.com/facebookresearch/s…

HCIA 第二课总结

配置网络设备的明文密钥实验组网 实验拓扑 将一个路由器使用配置口进行连接 sys #进入系统视图模式 sysname RTA #给设备命名 user-interface console 0 #进入用户接口配置界面 authentication-mode password #配置认证模式为密钥认证 set authentication password ciphe…

【优选算法题练习】day8

文章目录 一、974. 和可被 K 整除的子数组1.题目简介2.解题思路3.代码4.运行结果 二、525. 连续数组1.题目简介2.解题思路3.代码4.运行结果 三、560. 和为 K 的子数组1.题目简介2.解题思路3.代码4.运行结果 总结 一、974. 和可被 K 整除的子数组 1.题目简介 974. 和可被 K 整…

Vue3+ElementPlus实际项目快速开发模板Pure Admin

发现了一个超好用的模板项目&#xff0c;不仅有很全面的完整版&#xff0c;还有精简的可以直接拿来用的后台管理框架。文档很全面&#xff0c;甚至有B站配套视频! PureAdmin保姆级文档 vue-pure-admin快速开发教程&#xff08;使用Vue3、Vite、Element-Plus、TypeScript、Tail…

基于nodejs+vue微信小程序加油站服务管理系统

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 基于微信小程序加油站服务 系统分为用户和管理员两个角色 用户微信端的主要功能有&#xff1a; 1.用户注册和登陆小程序 2.用户…

【C#】微软的Roslyn 是个啥?

一、说明 Roslyn 是微软重写的C#编译器并开源。 Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。以下是它如何在过去十年企业Microsoft的最黑暗中开始&#xff0c;并成为所有C#&#xff08;和VB&#xff09;的开源&#xff0c;跨平台&#xff0c;公共语言引擎&#xff0c…

LiveGBS流媒体平台GB/T28181功能-设备树自定义分组自定义组织机构选择通道共享给上级国标平台配置权限给指定用户

LiveGBS流媒体平设备树自定义分组自定义组织机构选择通道共享给上级国标平台权限给指定用户 1、背景2、分组2.1、新建分组2.2、选择通道2.3、导入设备2.4、编辑名称2.5、删除分组2.6、移除分组 3、国标级联3.1、分组共享节点3.1.1、共享给上级平台3.1.2、分配权限给用户 3.2、级…

智能制造RFID设备包括哪些?

智能制造是现代制造业的重要发展方向&#xff0c;其核心是数字化、网络化和智能化。而在智能制造中&#xff0c;RFID设备是一种不可或缺的技术手段&#xff0c;主要用于实现物品的识别、追踪和化管理。以下是智能制造中常用的RFID设备及其功能&#xff1a; 1、 RFID读写器 RFID…