C#人脸识别之人脸特征值的提取及识别

本文介绍如何使用C#结合虹软SDK进行人脸识别,包括设置识别多个人脸,提取人脸特征值,以及如何保存和读取特征数据。通过示例代码详细解析人脸特征提取的过程,同时探讨了在实际业务系统中的人脸识别性能优化策略。
摘要由CSDN通过智能技术生成

如何识别多个人脸

在开始之前,先解决一个疑问,这个SDK可以识别多个人脸吗。答案当然是可以的。在上一章节中我们实现了识别单个人脸的功能。
你可以下面的地址下载
http://download.csdn.net/download/feishixin/9942684 本教程的相关Demo代码。
如果要识别多个人脸,需要进行下面的设置。

定义人脸的识别数目范围
int nMaxFaceNum = 50;/定义人脸识别的数目,有效范围为1-50/
修改人脸识别的程序。

在上一章节中, 我们的方法是只取到识别到的第一个人脸,因此我们只需要一个显示人脸的地方就可以了。要识别多个人脸,首先就是修改视图。
然后,修改程序为循环。

//识别每一幅图像

for (int i = 0; i < faceRes.nFace; i++)
{
    MRECT rect = (MRECT)Marshal.PtrToStructure(faceRes.rcFace + Marshal.SizeOf(typeof(MRECT)) * i, typeof(MRECT));

   Image image = CutFace(bitmap, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);


   if (i == 0)
   {
    /*第一个识别到的人脸保存在原位置*/
       this.pictureBox2.Image = image;
        this.pictureBox2.Tag = faceImageName[i];
    }
   else
   {
        /*后面识别到的人脸按顺序并排显示在下面,使用临时创建PictureBox控件的方式显示图片内容*/


       PictureBox tempPicture = new PictureBox();
       tempPicture.Width = 100;
       tempPicture.Height = 120;
       tempPicture.SizeMode = PictureBoxSizeMode.Zoom;
       tempPicture.Location = new System.Drawing.Point(10 + ((i-1) % 7) * 120, 10 + ((i-1) / 7) * 120);
       tempPicture.Image = image;
       tempPicture.Tag =faceImageName[i];
       this.panel1.Controls.Add(tempPicture);
   }

一步步实现人脸识别

先来看一下我们这节的效果
本节我们主要讲解如何根据识别到的人脸信息提取人脸数据特征,并在此基础上讲解一下如何做人脸识别

在人脸识别领域,首先是检测是否有人脸,人脸的区域是哪里,然后对这个区域进行特征点提取,在提取结束后,告诉计算机,这个人脸是谁。
计算机把这些特征信息和人脸的名称保存下来,就形成了人脸库,在识别人脸时,计算机通过一定的算法,检索库中是否有匹配到的人脸结果,给出相似度数据。当人脸的相似度数据达到一定的数值时,就可以认为同一张人脸。
相似度通常是一个0-1的小数。一般来说,数值越大,表示两个人越相近。
注:不同人脸引擎的人脸相似度不具有可比性,例如,我们从Face ++ 拿到的同一个人的人脸相似度可能会在0.8-0.9,虹软的只能在0.6-0.8之间,这并不能说明Face ++ ,它们只是算法的标准不同,例如,虹软在不同人脸0.1-0.2的时候,Face++达到了0.3-0.5 
人脸检测并建立人脸库的过程如下

本次教程我们以目录结构作为人脸的存档方式,每张人脸对应一张人脸标识和一个人脸特征。人脸标识和特征使用同一个文件名称来关联,例如人脸a.jpg的特征用a.dat来表示。

好,我们开始我们的课程
集成人脸识别SDK库

我们本次使用到的虹软的SDK包中,提供了人脸识别的库,它的名字叫face_recongnition.dll,我们找到它的SDK文档。
来建立各个结构体和API的C#映射。

首先是结构体

从本节开始,我们不再讲解原始SDK文档中的数据结构和C#数组结构如何映射的,也不再讲解P/Invoke的知识,如果需要了解相关知识,请参考我们上篇文档的相关内容。

AFR_FSDK_FaceInput

 public struct AFR_FSDK_FaceInput
    {
        public  MRECT rcF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值