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

2023-11-06

  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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • kafka如何保证消息不被重复消费

    1 原因 1 kafka有个offset的概念 当每个消息被写进去后 都有一个offset 代表他的序号 然后consumer消费该数据之后 隔一段时间 会把自己消费过的消息的offset提交一下 代表我已经消费过了 下次我要是重启 就会继
  • 模式识别学习初感悟

    学习模式识别已经快一个月了 从开始的混沌迷茫到现在的小有感觉 不能说自己进步了很多 只能说自己没有虚度这一个月的时光 下面相对自己这一个月的学习做一个总结 希望各位老师同学能多提宝贵意见 毕竟学术要在交流中才能发展 考研的生活结束后 顺利进
  • HTML中使用input type="file"时,不允许修改value属性值

    在HTML中使用
  • C++基础知识 - auto_ptr智能指针 (C++98)

    auto ptr 使用详解 C 98 auto ptr 是c 98定义的智能指针模板 其定义了管理指针的对象 可以将new 获得 直接或间接 的地址赋给这种对象 当对象过期时 其析构函数将使用delete 来释放内存 用法 头文件 incl
  • “华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)

    目录 摘 要 1 问题重述 1 1 问题背景 1 2 问题重述 2 模型假设 3 符号说明
  • 据说程序员节 随手记录下matlab的tan和atan(反正切 arctan函数)

    matlab求正切 反正切 随笔 tan函数测试 tan 0 0 tan 45 1 6198 tan pi 4 1 可以看出 matlab的输入单位是rad弧度 弧度和角度的换算单位为 1 rad 180 pi o 1o 1 pi 180
  • 黑客入门学习方法和盗号思路 别把这个想得很神秘

    大神请绕过 还有盗号的一些方法和思路 骗子太多 别上当 此文只是希望更多的人了解 更能很好的保护好自身虚拟财产 黑客 看着很神秘 其实都是普通人 工作不同而已 当然 有的很厉害的 他们智商都很高 这里不做讨论 就说说普通人如何学习这一块 入
  • JAVA系列教程

    1 Java快速教程 http www cnblogs com vamei archive 2013 03 31 2991531 html 2 Java 教程 http www runoob com java java tutorial h
  • jquery-动态添加,删除

    前言 jquery的动态添加和删除 以及显示他的数量 效果图 实现代码
  • ChatHub

    1写在前面 最近忙的不行 根本没有时间打开电脑 随着GPT 4和new bing的发布 真的可以说是AI的iphone时刻到来了 现在也是越来越多的网站接入了AI 以后人人都可以是程序员了 New Bing在GPT 4的加持下 功力大增 搜
  • 重学二、函数指针&指针运算

    目录 1 多级指针 2 数组与数组指针 3 采用指针遍历数组 4 循环时给数组赋值 5 指针类型有何用 7 函数指针 1 多级指针 int main int num 66 int pointer num 一级指针 int sec point
  • 总结:修改Anaconda中的Jupyter Notebook默认工作路径的三种方式

    总结 修改Anaconda中的Jupyter Notebook默认工作路径的三种方式 方式1 打开Windows的cmd 在cmd中输入jupyter notebook generate config如下图 可以看到路径为D Users 找
  • Qt之QTableView 获取当前选中行

    QModelIndexList list ui gt tableView gt selectedIndexes if list count lt 0 return QModelIndex index ui gt tableView gt s
  • ElasticSearch讲解——基础概念

    一 什么是ElasticSearch ElasticSearch以下简称为ES ES是一款基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎 并且基于RESTful web接口对外提供检索服务能力 Elasticsea
  • 展望2020

    区块链行业在2019年末迎来高光时刻 国家明确指出把区块链作为核心技术自主创新重要突破口 加快推动区块链技术和产业创新发展 新年伊始 陀螺财经邀请到数位学术圈 产业圈的相关人士 运用他们的专业知识 行业实践 剖析2020年行业的发展动向 谈
  • 【算法】链表

    算法 链表 反转链表 移除链表 交换链表 链表相交 删除链表中的倒数第N个节点 环形链表 反转链表 反转链表是指将单向链表的顺序逆转 即原本的链表方向由头节点指向尾节点 变为尾节点指向头节点 在 JavaScript 中 可以通过修改节点的
  • KEIL的下载图标是灰色的怎么办

    今天用cubemx配置好之后 generate发现下载图表是灰色的 解决方法 魔术棒下面的debug选项 有个右下角有个空手动输入 MPU
  • mock测试工具

    什么是mock测试 mock常见场景 mock常用工具 实战 1 什么是mock测试 mock测试就是对于某些不容易构造或者不容易获取的对象 用一个虚拟的对象来创建以便测试的测试方法 2 mock常见场景 1 无法控制第三方系统某接口的返回
  • PTA 7-100 敲笨钟 (20 分)(C语言版)

    微博上有个自称 大笨钟V 的家伙 每天敲钟催促码农们爱惜身体早点睡觉 为了增加敲钟的趣味性 还会糟改几句古诗词 其糟改的方法为 去网上搜寻压 ong 韵的古诗词 把句尾的三个字换成 敲笨钟 例如唐代诗人李贺有名句曰 寻章摘句老雕虫 晓月当帘
  • 测试开源C#人脸识别模块ViewFaceCore(2:人脸关键点定位器和活体检测)

    ViewFaceCore模块中的FaceLandmarker类支持识别人脸关键点 也即人脸上的关键位置的坐标 其中主要调用Mark函数返回图片中指定人脸的关键点位置集合 该类需配合FaceDetector类共同使用 FaceLandmark