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

  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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
一、主要内容:OpenCV能够实现强大丰富的图像处理,但是它缺少一个能够支持它运行的界面。Csharp经过多年的发展,得益于它的“所见及所得”能力,非常方便编写界面。这两者如果能够“双剑合璧”,将有效帮助实际工作产出。本课着重推荐GOCW采用“Csharp基于CLR直接调用Opencv编写的算法库”方法,能够将最新的OpenCV技术引入进来,同时保证生成程序的最小化。    为了进一步说明Csharp和OpenCV的结合使用,首先一个较为完整的基于winform实现答题卡识别的例子,相比较之前的实现,本次进一步贴近生产实际、内涵丰富,对算法也进行了进一步提炼。同时我们对WPF下对OpenCV函数的调用、OpenCV.js的调用进行相关教授。       二、课程结构1、 EmguCV、OpenCVSharp和GOCW之间进行比较(方便代码编写、能够融入最新的算法、速度有保障、方便调试找错、拒绝黑箱化);2、视频采集模块的构建,视频采集和图像处理之间的关系;3、视频采集专用的SDK和“陪练”系统的介绍;4、在视频增强类项目中和图像处理项目中,算法的选择;5、Csharp界面设计、图片的存储和其他构建设计;6、较为完整的答题卡识别例子,兼顾界面设计和算法分析;8、WPF基于GOCW也同样可以基于GOCW实现算法调用;webForm虽然也可以通过类似方法调用,但是OpenCV.JS的方法更现代高效。9、关于软件部署的相关要点和窍门。       三、知识要点:1、基本环境构建和程序框架;2、CLR基本原理和应用方法;3、接入、采集、模拟输入;4、图像处理,通过构建循环采集图片;5、增强和实时处理;6、基于投影等技术的答题卡识别算法;7、存储、转换;8、部署交付。        课程能够帮助你掌握Csharp调用Opencv的基本方法,获得相应框架代码和指导;从而进一步提升实现“基于图像处理”的解决方案能力。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值