测试开源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

代码是调用开源SDk的FaceCore关键代码。附件中有详细的接口调用说明 FaceCore人脸识别开放平台 (SERVICE INTERFACE PLATFORM)是基于人脸检测、比对核心业务技术的服务平台。平台可为外部合作伙伴提供基于高精度人脸识别技术为基础的相关服务,例如Api、人脸识别、数据安全等。作为人脸识别的重要开发途径,FaceCore平台将推动各行各业定制、创新、进化,并最终促成新商业文明生态圈的建立。我们的使命是把人脸识别技术、规范等一系列核心技术基础服务,像水、电、煤一样输送给所有需要的合作伙伴、开发者、社区媒体、安全机构和各行各业。帮助社会各界通过使用此平台获得更丰厚的商业价值。 服务器测试接口: /api/hello/ 服务器测试接口,返回服务器当前时间。 人脸比对、识别接口: /api/facecompare/ 根据参数FaceFeature1,FaceFeature2获取两个人脸的相似度。 /api/facedetectcount/ 根据参数FaceImage,获取图像中的人脸数量。 /api/facedetect/ 根据参数FaceImage,获取图像中的人脸、眼睛位置和特征。 /api/urlfacedetect/ 根据参数Url,获取图像中的人脸、眼睛位置和特征。 人脸存储管理接口: /api/personface/similar/ Method:POST;根据参数Feature人脸特征,返回appkey存储的全部人脸相似度。 /api/personface/getall/ Method:GET;返回appkey存储的全部人脸。 /api/personface/{id} Method:GET;返回指定id人脸详细信息。 /api/personface/ Method:POST;添加一个人脸信息。 /api/personface/ Method:PUT;修改一个人脸信息。 /api/personface/{id} Method:DELETE;删除一个人脸信息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值