脸部识别_3d脸部识别下载 - CSDN
精华内容
参与话题
  • 人脸识别的流程

    千次阅读 2019-02-13 22:16:49
    记录一下目前对人脸识别流程及识别方法的理解,以后随着认识的提升不断更新 人脸识别:给定一张图片识别出这张图片中的人脸是谁的脸 在整个过程中所使用的图片都是灰度化之后的图片。 为什么要转化为灰度图片?1....

    记录一下目前对人脸识别流程及识别方法的理解,以后随着认识的提升不断更新

    人脸识别:给定一张图片识别出这张图片中的人脸是谁的脸

    在整个过程中所使用的图片都是灰度化之后的图片。

    为什么要转化为灰度图片?1.识别物体最关键的部分是,找到物体的边缘,就是图片的梯度,图片的梯度计算用到的就是灰度化之后的图片。2.颜色容易受到光照影响,难以提供关键信息,最重要的是灰度化之后可以加快计算速度。

    人脸识别主要分为下面四个步骤:

    1.人脸检测:识别出图片中有人脸,找到人脸的位置,并圈出来

           怎么检测?都有什么样的方式?优劣点?

    2.人脸对齐:在已经检测到人脸的基础上,自动找到人脸上的眼睛鼻子嘴和脸的轮廓等标志性特征位置

    貌似很多算法都是基于某一盘论文的,比如One Millisecond Face Alignment with an Ensemble of Regression Trees

    PS:还看不懂:采用了两种分类方法以突出特征提取网络的能力和效果,采用的两种方法分别为:联合贝叶斯人脸校验( Joint Bayesian)和神经网络方法(neural network)。其中第一种方法联合贝叶斯是一种超有效的人脸校验算法,是传统贝叶斯脸算法的提升

    3.人脸校验:判断两张人脸是不是同一张人脸

       通过神经网络来提取人脸深层次的抽象特征,这种抽象特征可以区分出两张不同的人脸,在特征提取后,再用分类器进行分类。

     

    4.人脸识别:判断图片中的人脸是谁的脸

     

     

     

    参考:

            https://blog.csdn.net/jiajinrang93/article/details/72297975

    展开全文
  • 人脸识别主要算法原理

    万次阅读 多人点赞 2019-04-25 15:17:25
    人脸识别主要算法原理 主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法、基于模板的方法和基于模型的方法。 1.基于几何特征的方法是最早、最传统的方法,通常需要和其他算法结合才能有比较好的...

    最新人工智能论文:http://paperreading.club

    人脸识别主要算法原理

    主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法、基于模板的方法和基于模型的方法。

    1. 基于几何特征的方法是最早、最传统的方法,通常需要和其他算法结合才能有比较好的效果;
    2. 基于模板的方法可以分为基于相关匹配的方法、特征脸方法、线性判别分析方法、奇异值分解方法、神经网络方法、动态连接匹配方法等。
    3. 基于模型的方法则有基于隐马尔柯夫模型,主动形状模型和主动外观模型的方法等。

    1. 基于几何特征的方法

    人脸由眼睛、鼻子、嘴巴、下巴等部件构成,正因为这些部件的形状、大小和结构上的各种差异才使得世界上每个人脸千差万别,因此对这些部件的形状和结构关系的几何描述,可以做为人脸识别的重要特征。几何特征最早是用于人脸侧面轮廓的描述与识别,首先根据侧面轮廓曲线确定若干显著点,并由这些显著点导出一组用于识别的特征度量如距离、角度等。Jia 等由正面灰度图中线附近的积分投影模拟侧面轮廓图是一种很有新意的方法。
        采用几何特征进行正面人脸识别一般是通过提取人眼、口、鼻等重要特征点的位置和眼睛等重要器官的几何形状作为分类特征,但Roder对几何特征提取的精确性进行了实验性的研究,结果不容乐观。

    可变形模板法可以视为几何特征方法的一种改进,其基本思想是 :设计一个参数可调的器官模型 (即可变形模板),定义一个能量函数,通过调整模型参数使能量函数最小化,此时的模型参数即做为该器官的几何特征。
        这种方法思想很好,但是存在两个问题,一是能量函数中各种代价的加权系数只能由经验确定,难以推广,二是能量函数优化过程十分耗时,难以实际应用。 基于参数的人脸表示可以实现对人脸显著特征的一个高效描述,但它需要大量的前处理和精细的参数选择。同时,采用一般几何特征只描述了部件的基本形状与结构关系,忽略了局部细微特征,造成部分信息的丢失,更适合于做粗分类,而且目前已有的特征点检测技术在精确率上还远不能满足要求,计算量也较大。 

    2. 局部特征分析方法(Local Face Analysis)

        主元子空间的表示是紧凑的,特征维数大大降低,但它是非局部化的,其核函数的支集扩展在整个坐标空间中,同时它是非拓扑的,某个轴投影后临近的点与原图像空间中点的临近性没有任何关系,而局部性和拓扑性对模式分析和分割是理想的特性,似乎这更符合神经信息处理的机制,因此寻找具有这种特性的表达十分重要。基于这种考虑,Atick提出基于局部特征的人脸特征提取与识别方法。这种方法在实际应用取得了很好的效果,它构成了FaceIt人脸识别软件的基础。

    3. 特征脸方法(Eigenface或PCA)

    特征脸方法是90年代初期由Turk和Pentland提出的目前最流行的算法之一,具有简单有效的特点, 也称为基于主成分分析(principal component analysis,简称PCA)的人脸识别方法。
        特征子脸技术的基本思想是:从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似地表征人脸图像。这些特征向量称为特征脸(Eigenface)。

    实际上,特征脸反映了隐含在人脸样本集合内部的信息和人脸的结构关系。将眼睛、面颊、下颌的样本集协方差矩阵的特征向量称为特征眼、特征颌和特征唇,统称特征子脸。特征子脸在相应的图像空间中成子空间,称为子脸空间。计算出测试图像窗口在子脸空间的投影距离,若窗口图像满足阈值比较条件,则判断其为人脸。 
        基于特征分析的方法,也就是将人脸基准点的相对比率和其它描述人脸脸部特征的形状参数或类别参数等一起构成识别特征向量,这种基于整体脸的识别不仅保留了人脸部件之间的拓扑关系,而且也保留了各部件本身的信息,而基于部件的识别则是通过提取出局部轮廓信息及灰度信息来设计具体识别算法。现在Eigenface(PCA)算法已经与经典的模板匹配算法一起成为测试人脸识别系统性能的基准算法;而自1991年特征脸技术诞生以来,研究者对其进行了各种各样的实验和理论分析,FERET'96测试结果也表明,改进的特征脸算法是主流的人脸识别技术,也是具有最好性能的识别方法之一。
        该方法是先确定眼虹膜、鼻翼、嘴角等面像五官轮廓的大小、位置、距离等属性,然后再计算出它们的几何特征量,而这些特征量形成一描述该面像的特征向量。其技术的核心实际为“局部人体特征分析”和“图形/神经识别算法。”这种算法是利用人体面部各器官及特征部位的方法。如对应几何关系多数据形成识别参数与数据库中所有的原始参数进行比较、判断与确认。Turk和Pentland提出特征脸的方法,它根据一组人脸训练图像构造主元子空间,由于主元具有脸的形状,也称为特征脸  ,识别时将测试  图像投影到主元子空间上,得到一组投影系数,和各个已知人的人脸图像比较进行识别。Pentland等报告了相当好的结果,在 200个人的 3000幅图像中得到 95%的正确识别率,在FERET数据库上对 150幅正面人脸象只有一个误识别。但系统在进行特征脸方法之前需要作大量预处理工作如归一化等。
        在传统特征脸的基础上,研究者注意到特征值大的特征向量 (即特征脸 )并不一定是分类性能好的方向,据此发展了多种特征 (子空间 )选择方法,如Peng的双子空间方法、Weng的线性歧义分析方法、Belhumeur的FisherFace方法等。事实上,特征脸方法是一种显式主元分析人脸建模,一些线性自联想、线性压缩型BP网则为隐式的主元分析方法,它们都是把人脸表示为一些向量的加权和,这些向量是训练集叉积阵的主特征向量,Valentin对此作了详细讨论。总之,特征脸方法是一种简单、快速、实用的基于变换系数特征的算法,但由于它在本质上依赖于训练集和测试集图像的灰度相关性,而且要求测试图像与训练集比较像,所以它有着很大的局限性。

    基于KL 变换的特征人脸识别方法
    基本原理:
        KL变换是图象压缩中的一种最优正交变换,人们将它用于统计特征提取,从而形成了子空间法模式识别的基础,若将KL变换用于人脸识别,则需假设人脸处于低维线性空间,且不同人脸具有可分性,由于高维图象空间KL变换后可得到一组新的正交基,因此可通过保留部分正交基,以生成低维人脸空间,而低维空间的基则是通过分析人脸训练样本集的统计特性来获得,KL变换的生成矩阵可以是训练样本集的总体散布矩阵,也可以是训练样本集的类间散布矩阵,即可采用同一人的数张图象的平均来进行训练,这样可在一定程度上消除光线等的干扰,且计算量也得到减少,而识别率不会下降。

    4. 基于弹性模型的方法

        Lades等人针对畸变不变性的物体识别提出了动态链接模型 (DLA),将物体用稀疏图形来描述 (见下图),其顶点用局部能量谱的多尺度描述来标记,边则表示拓扑连接关系并用几何距离来标记,然后应用塑性图形匹配技术来寻找最近的已知图形。Wiscott等人在此基础上作了改进,用FERET图像库做实验,用 300幅人脸图像和另外 300幅图像作比较,准确率达到 97.3%。此方法的缺点是计算量非常巨大 。
        Nastar将人脸图像 (Ⅰ ) (x,y)建模为可变形的 3D网格表面 (x,y,I(x,y) ) (如下图所示 ),从而将人脸匹配问题转化为可变形曲面的弹性匹配问题。利用有限元分析的方法进行曲面变形,并根据变形的情况判断两张图片是否为同一个人。这种方法的特点在于将空间 (x,y)和灰度I(x,y)放在了一个 3D空间中同时考虑,实验表明识别结果明显优于特征脸方法。
        Lanitis等提出灵活表现模型方法,通过自动定位人脸的显著特征点将人脸编码为 83个模型参数,并利用辨别分析的方法进行基于形状信息的人脸识别。弹性图匹配技术是一种基于几何特征和对灰度分布信息进行小波纹理分析相结合的识别算法,由于该算法较好的利用了人脸的结构和灰度分布信息,而且还具有自动精确定位面部特征点的功能,因而具有良好的识别效果,适应性强识别率较高,该技术在FERET测试中若干指标名列前茅,其缺点是时间复杂度高,速度较慢,实现复杂。

    5. 神经网络方法(Neural Networks)

    人工神经网络是一种非线性动力学系统,具有良好的自组织、自适应能力。目前神经网络方法在人脸识别中的研究方兴未艾。Valentin提出一种方法,首先提取人脸的 50个主元,然后用自相关神经网络将它映射到 5维空间中,再用一个普通的多层感知器进行判别,对一些简单的测试图像效果较好;Intrator等提出了一种混合型神经网络来进行人脸识别,其中非监督神经网络用于特征提取,而监督神经网络用于分类。Lee等将人脸的特点用六条规则描述,然后根据这六条规则进行五官的定位,将五官之间的几何距离输入模糊神经网络进行识别,效果较一般的基于欧氏距离的方法有较大改善,Laurence等采用卷积神经网络方法进行人脸识别,由于卷积神经网络中集成了相邻像素之间的相关性知识,从而在一定程度上获得了对图像平移、旋转和局部变形的不变性,因此得到非常理想的识别结果,Lin等提出了基于概率决策的神经网络方法 (PDBNN),其主要思想是采用虚拟 (正反例 )样本进行强化和反强化学习,从而得到较为理想的概率估计结果,并采用模块化的网络结构 (OCON)加快网络的学习。这种方法在人脸检测、人脸定位和人脸识别的各个步骤上都得到了较好的应用,其它研究还有 :Dai等提出用Hopfield网络进行低分辨率人脸联想与识别,Gutta等提出将RBF与树型分类器结合起来进行人脸识别的混合分类器模型,Phillips等人将MatchingPursuit滤波器用于人脸识别,国内则采用统计学习理论中的支撑向量机进行人脸分类。
        神经网络方法在人脸识别上的应用比起前述几类方法来有一定的优势,因为对人脸识别的许多规律或规则进行显性的描述是相当困难的,而神经网络方法则可以通过学习的过程获得对这些规律和规则的隐性表达,它的适应性更强,一般也比较容易实现。因此人工神经网络识别速度快,但识别率低 。而神经网络方法通常需要将人脸作为一个一维向量输入,因此输入节点庞大,其识别重要的一个目标就是降维处理。
        PCA的算法描述:利用主元分析法 (即 Principle Component Analysis,简称 PCA)进行识别是由 Anderson和 Kohonen提出的。由于 PCA在将高维向量向低维向量转化时,使低维向量各分量的方差最大,且各分量互不相关,因此可以达到最优的特征抽取。

    6. 其它方法:

    除了以上几种方法,人脸识别还有其它若干思路和方法,包括一下一些:
    1) 隐马尔可夫模型方法(Hidden Markov Model)
    2) Gabor 小波变换+图形匹配
    (1)精确抽取面部特征点以及基于Gabor引擎的匹配算法,具有较好的准确性,能够排除由于面部姿态、表情、发型、眼镜、照明环境等带来的变化。
    (2)Gabor滤波器将Gaussian络函数限制为一个平面波的形状,并且在滤波器设计中有优先方位和频率的选择,表现为对线条边缘反应敏感。
    (3)但该算法的识别速度很慢,只适合于录象资料的回放识别,对于现场的适应性很差。

    3) 人脸等密度线分析匹配方法
    (1) 多重模板匹配方法
    该方法是在库中存贮若干标准面像模板或面像器官模板,在进行比对时,将采样面像所有象素与库中所有模板采用归一化相关量度量进行匹配。
    (2) 线性判别分析方法(Linear Discriminant Analysis,LDA)
    (3)本征脸法
        本征脸法将图像看做矩阵 ,计算本征值和对应的本征向量作为代数特征进行识别 ,具有无需提取眼嘴鼻等几何特征的优点 ,但在单样本时识别率不高 ,且在人脸模式数较大时计算量大 
    (4) 特定人脸子空间(FSS)算法
    该技术来源于但在本质上区别于传统的"特征脸"人脸识别方法。"特征脸"方法中所有人共有一个人脸子空间,而该方法则为每一个体人脸建立一个该个体对象所私有的人脸子空间,从而不但能够更好的描述不同个体人脸之间的差异性,而且最大可能地摈弃了对识别不利的类内差异性和噪声,因而比传统的"特征脸算法"具有更好的判别能力。另外,针对每个待识别个体只有单一训练样本的人脸识别问题,提出了一种基于单一样本生成多个训练样本的技术,从而使得需要多个训练样本的个体人脸子空间方法可以适用于单训练样本人脸识别问题。
    (5)奇异值分解(singular value decomposition,简称SVD)
    是一种有效的代数特征提取方法.由于奇异值特征在描述图像时是稳定的,且具有转置不变性、旋转不变性、位移不变性、镜像变换不变性等重要性质,因此奇异值特征可以作为图像的一种有效的代数特征描述。奇异值分解技术已经在图像数据压缩、信号处理和模式分析中得到了广泛应用.

     

    7. 面像识别的主要商业系统

    90年代中后期以来,一些商业性的面像识别系统开始进入市场。目前,主要商业系统包括:
    ● Visionics公司的FaceIt面像识别系统,该系统基于Rockefeller大学开发的局部特征分析(LFA)算法;
    ● Lau Tech.公司的面像识别/确认系统,采用MIT技术;
    ● Miros公司的Trueface及eTrue身份验证系统,其核心技术为神经网络;
    ● C-VIS公司的面像识别/确认系统;
    ● Banque-Tec.公司的身份验证系统;
    ● Visage Gallery’s 身份认证系统,基于MIT媒体实验室的Eigenface技术;
    ● Plettac Electronic’s FaceVACS出入控制系统;
    ● 台湾的BioID系统,它基于人脸、唇动和语音三者信息融合的Biometrics系统。

    其中,FaceIt系统是最具有代表性的商业产品,目前已在很多地方得到了应用。去年,它在英国用于被称为“Mandrake”的反罪犯系统中,该系统在144个监控摄像机采集的视频序列中搜索已知的罪犯或者嫌疑犯,如发现可能的罪犯,系统将通知中心控制室的警员。
    笔者曾使用过FaceIt系统,并对其进行了各项指标的评测。结果表明,该系统在控制光照、准正面(3坐标轴上的旋转不超过15度)、无饰物的情况下具有较好的识别性能。但在实用过程中也发现,只有训练集人脸图像的采集条件与测试集人脸图像的采集条件基本一致时才能具有良好的识别性能,否则,其性能将急剧下降,尤其光照变化、姿态变化、黑框眼镜、帽子、夸张的表情、胡须和长发等对其性能的影响更大。

    面像识别系统的测试
        基于对面像识别技术在军事安全等领域重要性的考虑,美国国防部的ARPA资助建立了一个对现有面像识别技术进行评测的程序,并分别于1994年8月、1995年3月和1996年9月(截至1997年3月)组织了三次面像识别和人脸确认的性能评测,其目的是要展示面像识别研究的最新进展和最高学术水平,同时发现现有面像识别技术所面临的主要问题,为以后的研究提供方向性指南。尽管该测试只对美国研究机构开放,但它在事实上成为了该领域的公认测试标准,其测试结果已被认为反映了面像识别研究的最高学术水平。
        根据2000年公开发表的FERET’97测试报告,美国南加州大学(USC)、马里兰大学(UMD)、麻省理工学院(MIT)等研究机构的面像识别技术具有最好的识别性能。在训练集和测试集摄像条件相似的200人的识别测试中,几个系统都产生了接近100%的识别率。值得一提的是,即使是最简单的相关匹配算法也具有很高的识别性能。在更大对象集的FERET测试中(人数大于等于1166人),在同一摄像条件下采集的正面图像识别中,最高首选识别率为95%;而对用不同的摄像机和不同的光照条件采集的测试图像,最高首选识别率骤降为82%;对一年后采集的图像测试,最大的准确率仅仅接近51%。
        

    该测试结果表明,目前的面像识别算法对于不同的摄像机、不同的光照条件和年龄变化的适应能力非常差,理应得到研究者的足够重视。而且值得注意的是,该测试中所用的人脸图像均为比较标准的正面人脸图像,姿态变化非常小,也没有夸张的表情和饰物,以及没有提及面部毛发改变的情况。所以,我们认为,除了FERET测试所揭示的上述面像识别研究需要面对的问题之外,还需要考虑诸如姿态、饰物(眼镜、帽子等)、面部表情、面部毛发等可变因素对面像识别性能的影响。这些因素也是开发实用的面像识别产品时必然会遇到的最关键的技术问题。
    为进一步测试商业面像识别系统的性能,并揭示2000年前后面像识别技术的最新进展,美国国防部的反毒品技术开发计划办公室于去年5月和6月对美国的主要商业面像识别系统进行了评测,称为FRVT’2000(Face Recognition Vender Test)评测。该计划邀请了美国所有面像识别系统厂商参加,共24家,但只有8家响应,最终有5家公司参加了评测,而只有3家的系统在规定时间内完成了全部对比实验。可以认为,这3家公司的产品是目前最具竞争力的商业识别系统,它们分别是FaceIt系统、Lau Tech.公司的系统和C-VIS公司的系统。FRVT’2000评估了这些系统对图像压缩、用户-摄像机距离、表情、光照、录制设备、姿态、分辨率和时间间隔等影响因素的识别性能。结果表明,面像识别系统的性能与1997年的测试相比有了一定的进步,但其识别性能对各种条件,如光照、老化、距离、姿态等,仍然离人们的期望值较远。

    国内:

    中科院-上海银晨

    近年来,国内学者在对特征脸技术进行认真研究的基础上,尝试了基于特征脸特征提取方法和各种后端分类器相结合的方法,并提出了各种各样的改进版本或扩展算法,主要的研究内容包括线性/非线性判别分析(LDA/KDA)、Bayesian概率模型、支持矢量机(SVM)、人工神经网络(NN)以及类内和类间双子空间(inter/intra-class dual subspace)分析方法等等。

     近年来,中科院计算所在对特征脸技术进行认真研究的基础上,尝试了基于特征脸特征提取方法和各种后端分类器相结合的方法,并提出了各种各样的改进版本或扩展算法,主要的研究内容包括线性/非线性判别分析(LDA/KDA)、Bayesian概率模型、支持矢量机(SVM)、人工神经网络(NN)以及类内和类间双子空间(inter/intra-class dual subspace)分析方法等等。
      针对Eigenface算法的缺点,中科院计算所提出了特定人脸子空间(FSS)算法。该技术来源于但在本质上区别于传统的"特征脸"人脸识别方法:"特征脸"方法中所有人共有一个人脸子空间,而中科院计算所的方法则为每一个体人脸建立一个该个体对象所私有的人脸子空间,从而不但能够更好的描述不同个体人脸之间的差异性,而且最大可能地摈弃了对识别不利的类内差异性和噪声,因而比传统的"特征脸算法"具有更好的判别能力。另外,针对每个待识别个体只有单一训练样本的人脸识别问题,中科院计算所提出了一种基于单一样本生成多个训练样本的技术,从而使得需要多个训练样本的个体人脸子空间方法可以适用于单训练样本人脸识别问题。在Yale人脸库、本实验室350人图像库上的对比实验也表明中科院计算所提出的方法比传统的特征脸方法、模板匹配方法对表情、光照、和一定范围内的姿态变化具有更好的鲁棒性,具有更优的识别性能。
      弹性图匹配技术是一种基于几何特征和对灰度分布信息进行小波纹理分析相结合的识别算法,由于该算法较好的利用了人脸的结构和灰度分布信息,而且还具有自动精确定位面部特征点的功能,因而具有良好的识别效果,该技术在FERET测试中若干指标名列前茅,其缺点是时间复杂度高,实现复杂。中科院计算所对该算法进行了研究,并提出了一些启发策略。
     4、 人脸识别关键问题研究
      a) 人脸识别中的光照问题
      光照变化是影响人脸识别性能的最关键因素,对该问题的解决程度关系着人脸识别实用化进程的成败。中科院计算所将在对其进行系统分析的基础上,考虑对其进行量化研究的可能性,其中包括对光照强度和方向的量化、对人脸反射属性的量化、面部阴影和照度分析等等。在此基础上,考虑建立描述这些因素的数学模型,以便利用这些光照模型,在人脸图像预处理或者归一化阶段尽可能的补偿乃至消除其对识别性能的影响。重点研究如何在从人脸图像中将固有的人脸属性(反射率属性、3D表面形状属性)和光源、遮挡及高光等非人脸固有属性分离开来。基于统计视觉模型的反射率属性估计、3D表面形状估计、光照模式估计,以及任意光照图像生成算法是中科院计算所的主要研究内容。具体考虑两种不同的解决思路:
       1、 利用光照模式参数空间估计光照模式,然后进行针对性的光照补偿,以便消除非均匀正面光照造成的阴影、高光等影响;
       2、 基于光照子空间模型的任意光照图像生成算法,用于生成多个不同光照条件的训练样本,然后利用具有良好的学习能力的人脸识别算法,如子空间法,SVM等方法进行识别,
      

    b) 人脸识别中的姿态问题研究
      姿态问题涉及头部在三维垂直坐标系中绕三个轴的旋转造成的面部变化,其中垂直于图像平面的两个方向的深度旋转会造成面部信息的部分缺失。使得姿态问题成为人脸识别的一个技术难题。解决姿态问题有三种思路: 
    第一种思路是学习并记忆多种姿态特征,这对于多姿态人脸数据可以容易获取的情况比较实用,其优点是算法与正面人脸识别统一,不需要额外的技术支持,其缺点是存储需求大,姿态泛化能力不能确定,不能用于基于单张照片的人脸识别算法中等。
    第二种思路是基于单张视图生成多角度视图,可以在只能获取用户单张照片的情况下合成该用户的多个学习样本,可以解决训练样本较少的情况下的多姿态人脸识别问题,从而改善识别性能。 
      第三种思路是基于姿态不变特征的方法,即寻求那些不随姿态的变化而变化的特征。中科院计算所的思路是采用基于统计的视觉模型,将输入姿态图像校正为正面图像,从而可以在统一的姿态空间内作特征的提取和匹配。
      

    因此,基于单姿态视图的多姿态视图生成算法将是中科院计算所要研究的核心算法,中科院计算所的基本思路是采用机器学习算法学习姿态的2D变化模式,并将一般人脸的3D模型作为先验知识,补偿2D姿态变换中不可见的部分,并将其应用到新的输入图像上去。

    展开全文
  • 人脸识别之facenet代码实现

    万次阅读 多人点赞 2018-09-03 15:35:36
    上一篇博文介绍了facenet的原理,这篇讲解一下代码的实现,对于facenet的代码目前也有写好的部分。具体见链接facenet代码实现 。大家可以通过git直接下载代码,然后运行里面的validata_on_lfw.py。...

    上一篇博文介绍了facenet的原理,这篇讲解一下代码的实现,对于facenet的代码目前也有写好的部分。具体见链接facenet代码实现 。大家可以通过git直接下载代码,然后运行里面的validata_on_lfw.py。输入对应的lfw数据的路径就可以检测模型对lfw数据的准确度。

     validata_on_lfw.py中,主要是通过data/pairs.txt对lfw进行分对读取。并标记出每一对图片是不是一类。对于训练的结果计算其对应的距离并和给出的阀值进行比较,当距离小于给出的阀值时是一类,大于时不是一类。最后根据判断的结果和标记的结果计算对应的准确率和其他的值。

    在该代码中通过(use_fixed_image_standardizatiion来控制采用固定值归一化(减去127.5然后除以128.0)),根据代码可以看出该处理并没有给use_fixed_image_standardizatiion赋值所以采用的是每张图片单独处理的方式。并且没有给crop赋值所以采用了resize_image_with_crop_or_pad的裁剪方式。同时准确度的计算方面才用看10折交叉交叉验证把输入的数据分成训练和测试在训练上找到一个合适的阀值(开始输入的阀值时0到4每隔0.01取一个),最后对测试数据采用找到的阀值计算准去度最后平均得到的。

    另外在代码实现的过程中建议使用tf.cast(imag ,tf.float32)将读出的图片类型转换为float型,这样在进行去噪操作时会避免数值计算带来的误差。也会相应的提高准确度。

     

     

    use_fixed_image_standardization

     cluster.py:该程序主要是采用密度聚类的方式对提取出的特征进行聚类分析。对于这个文件大家可以运行一下,并且好好理解一下,可以帮助大家理解模型的使用。

    对于项目中的代码,建议大家运行上述2个即可。然后根据自己的想法对模型结果进行自己的处理。我开始的时候把里面每个代码的实现过程都看了一遍,但是后来发现看完之后除了浪费时间没有别的其他作用。

    基于该代码,我自己写了一个人脸的识别过程。主要是在图片中识别对应的每个人是谁。该问题主要分为两部分:第一标签的采集。首先对于输入的图片进行人脸对齐,将对齐之后的图片采用网络进行处理并将产生的向量和标签的名字存为对应的.npy文件方便后续的使用。具体如下:

     

    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    from scipy import misc
    import tensorflow as tf
    import numpy as np
    import os
    import sys
    import argparse
    from facenetuse.use_model import until
    from facenetuse.mtcnn import detect_face
    from sklearn.cluster import DBSCAN
    # 对标签文件中的图片进行处理,生成最终的标签和特征
    # 最终返回一个二维数据对数组,第一个元素表示标签名字,第二个元素表示标签对应的特征向量
    
    def main(args):
        pnet, rnet, onet = create_network_face_detection()
        with tf.Graph().as_default():
            with tf.Session() as sess:
                until.load_model(args.model)
                # 从文件夹中读取数据生成对应的列表
                label, image_list = until.load_label_image_from_folder(args.data_dir)
                print(len(label))
                # print(image_list)
    
                # 采用MTCNN将读取的数据进行人脸检测,生成对应的大小的人脸数据
                images = until.align_data(image_list, args.image_size, args.margin, pnet, rnet, onet)
                # 定义模型中的输入和输出张量
                images_placeholder = sess.graph.get_tensor_by_name("input:0")
                embeddings = sess.graph.get_tensor_by_name("embeddings:0")
                phase_train_placeholder = sess.graph.get_tensor_by_name("phase_train:0")
                feed_dict = {images_placeholder: images, phase_train_placeholder: False}
                emb = sess.run(embeddings, feed_dict=feed_dict)
    
        np.save(os.path.join(args.output_dir, "label.npy"), label)
        np.save(os.path.join(args.output_dir, "emb.npy"), emb)
    
    
    def create_network_face_detection():
        with tf.Graph().as_default():
            sess = tf.Session()
            with sess.as_default():
                pnet, rnet, onet = detect_face.create_mtcnn(sess, None)
        return pnet, rnet, onet
    
    
    def parse_arguments(argv):
        parser = argparse.ArgumentParser()
    
        parser.add_argument('--model', type=str,
                            help='Either a directory containing the meta_file and ckpt_file or a model'
                                 ' protobuf (.pb) file',
                            )
        parser.add_argument('--data_dir', type=str,
                            help='The directory containing the images to cluster into folders.',
                            )
        parser.add_argument('--output_dir', type=str,
                            help='The directory containing the images to cluster into folders.',
                            )
        parser.add_argument('--image_size', type=int,
                            help='Image size (height, width) in pixels.', default=160)
        parser.add_argument('--margin', type=int,
                            help='Margin for the crop around the bounding box (height, width) in pixels.', default=44)
        parser.add_argument('--min_cluster_size', type=int,
                            help='The minimum amount of pictures required for a cluster.', default=1)
        parser.add_argument('--cluster_threshold', type=float,
                            help='The minimum distance for faces to be in the same cluster', default=1.0)
        parser.add_argument('--largest_cluster_only', action='store_true',
                            help='This argument will make that only the biggest cluster is saved.')
    
        return parser.parse_args(argv)
    
    
    if __name__ == '__main__':
        main(parse_arguments(sys.argv[1:]))

    对于输入的图片,采用相同的人脸对齐技术处理,然后对处理后的图片调用同样的网络生成对应的特征向量,并使用生成的特征向量和标签向量计算其对应的距离。选择距离最小的标签作为识别出来的结果。具体代码如下:

     

    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    from scipy import misc
    import tensorflow as tf
    import numpy as np
    import os
    import sys
    import argparse
    from facenetuse.use_model import  until
    from facenetuse.mtcnn import detect_face
    from sklearn.cluster import DBSCAN
    # 对文件夹内的图像进行读取,取出其对应的特征向量后并与标签中的特征向量
    # 行比较,最终确定最终的图片类别
    
    
    def main(args):
        pnet, rnet, onet = create_network_face_detection()
        with tf.Graph().as_default():
            with tf.Session() as sess:
                until.load_model(args.model)
                # 从标签数据中读入对应的标签信息
                label = np.load(os.path.join(args.label_dir, "label.npy"))
                label_feature = np.load(os.path.join(args.label_dir, "emb.npy"))
                print(label.shape)
                print(label_feature.shape)
                # 从文件夹中读取数据生成对应的列表
                image_list, _ = until.load_images_from_folder(args.data_dir)
                # 采用MTCNN将读取的数据进行人脸检测,生成对应的大小的人脸数据
                images = until.align_data(image_list, args.image_size, args.margin, pnet, rnet, onet)
                # 定义模型中的输入和输出张量
                images_placeholder = sess.graph.get_tensor_by_name("input:0")
                embeddings = sess.graph.get_tensor_by_name("embeddings:0")
                phase_train_placeholder = sess.graph.get_tensor_by_name("phase_train:0")
                feed_dict = {images_placeholder: images, phase_train_placeholder: False}
                emb = sess.run(embeddings, feed_dict=feed_dict)
                print(emb.shape)
                # 后续均为对模型算出的数据进行的处理
                nrof_images = len(images)
                label_num = label.shape[0]
                matrix = np.zeros((nrof_images, label_num))
                # Print distance matrix
                print('Distance matrix')
                for i in range(nrof_images):
                    for j in range(label_num):
                        dist = np.sqrt(np.sum(np.square(np.subtract(emb[i, :], label_feature[j, :]))))
                        matrix[i][j] = dist
                        print('  %1.4f  ' % dist, end='')
                    print()
    
                for i in range(nrof_images):
                    list_dir = matrix[i, :]
                    min_dir = np.min(list_dir)
                    index = np.where(min_dir == list_dir)[0]
                    print(label[index])
    
    
    def create_network_face_detection():
        with tf.Graph().as_default():
            sess = tf.Session()
            with sess.as_default():
                pnet, rnet, onet = detect_face.create_mtcnn(sess, None)
        return pnet, rnet, onet
    
    
    def parse_arguments(argv):
        parser = argparse.ArgumentParser()
    
        parser.add_argument('--model', type=str,
                            help='Either a directory containing the meta_file and ckpt_file or a model'
                                 ' protobuf (.pb) file',
                           )
        parser.add_argument('--data_dir', type=str,
                            help='The directory containing the images to cluster into folders.',
                            )
        parser.add_argument('--out_dir', type=str,
                            help='The output directory where the image clusters will be saved.',
                           )
        parser.add_argument('--label_dir', type=str,
                            help='The directory containing the images to cluster into folders.',
                            ')
        parser.add_argument('--image_size', type=int,
                            help='Image size (height, width) in pixels.', default=160)
        parser.add_argument('--margin', type=int,
                            help='Margin for the crop around the bounding box (height, width) in pixels.', default=44)
        parser.add_argument('--min_cluster_size', type=int,
                            help='The minimum amount of pictures required for a cluster.', default=1)
        parser.add_argument('--cluster_threshold', type=float,
                            help='The minimum distance for faces to be in the same cluster', default=1.0)
        parser.add_argument('--largest_cluster_only', action='store_true',
                            help='This argument will make that only the biggest cluster is saved.')
    
        return parser.parse_args(argv)
    
    
    if __name__ == '__main__':
        main(parse_arguments(sys.argv[1:]))

     

    经过上述两步的处理就可以识别自己的图片了。当然也可以使用结果对图片进行其他的操作,无论进行什么样的操作其实就和模型本身没有关系了。主要是对特征向量的处理。

    注意:

    1. 在识别过程中,我们发现图片经过处理后生成的特征向量是512维,不是128维,不知道是不是和选取的模型有关

    2. 阀值的选取:在validata_on_lfw实现的过程中,阀值并不是1.1,而是在0-4每隔0.01进行切分,利用分出来的值分别作为阀值进行准确率的计算,最终选择准确率最大的阀值作为分类的依据。该值是1.23。所以在平时使用过程中当数据量较大时也可以借鉴该方法;数据量较小时可以选取最小的值作为阀值(此时最小是指生成的标签向量之间的距离最小)。

    展开全文
  • 人脸识别之特征脸方法(Eigenface)

    万次阅读 多人点赞 2015-04-25 22:16:27
    人脸识别之特征脸方法(Eigenface)zouxy09@qq.comhttp://blog.csdn.net/zouxy09 因为需要,花了一点时间写了下经典的基于特征脸(EigenFace)的人脸识别方法的Matlab代码。这里仅把该代码分享出来。其实,在较新...

    人脸识别之特征脸方法(Eigenface)

    zouxy09@qq.com

    http://blog.csdn.net/zouxy09

     

          因为需要,花了一点时间写了下经典的基于特征脸(EigenFace)的人脸识别方法的Matlab代码。这里仅把该代码分享出来。其实,在较新版本的OpenCV中已经提供了FaceRecognizer这一个类,里面不仅包含了特征脸EigenFace,还有FisherFace和LBPHFace这三种人脸识别方法,有兴趣的可以参考OpenCV的API手册,里面都有很详细的使用例程了。

     

    一、特征脸

          特征脸EigenFace从思想上其实挺简单。就相当于把人脸从像素空间变换到另一个空间,在另一个空间中做相似性的计算。这么说,其实图像识别的基本思想都是一样的,首先选择一个合适的子空间,将所有的图像变换到这个子空间上,然后再在这个子空间上衡量相似性或者进行分类学习。那为什么要变换到另一个空间呢?当然是为了更好的做识别或者分类了。那为什么变换到一个空间就好识别或者分类了呢?因为变换到另一个空间,同一个类别的图像会聚到一起,不同类别的图像会距离比较远,或者在原像素空间中不同类别的图像在分布上很难用个简单的线或者面把他们切分开,然后如果变换到另一个空间,就可以很好的把他们分开了。有时候,线性(分类器)就可以很容易的把他们分开了。那既然人类看起来同类的图像本来就是相似的,不同类的图像就不太相似,那为什么在原始的像素空间他们同类不会很近,不同类不会很远,或者他们为什么不好分开呢?因为图像各种因素的影响,包括光照、视角、背景和形状等等不同,会造成同一个目标的图像都存在很大的视觉信息上的不同。如下图所示。

           世界上没有存在任何两片完全相同的叶子,虽然他们都是叶子。万千世界,同一类事物都存在共性,也存在个性,这就是这个世界多彩的原因。那怎么办呢?很自然,只要在我们想要的粒度上把同一类目标的共性找出来就好了,而且这个共性最好和我们要区分的类是不一样的。什么叫我们想要的粒度?我理解和我们的任务相关的。例如我们要区分人和车,那人的共性就是有脸、有手、有脚等等。但如果我们要区分亚洲人和非洲人,那么亚洲人的共性就是黄色皮肤等等。可以试着想象,上帝把世界万物组织成一个树状结构,树的根就是万物之源,下一层可以分成生物和非生物,再下一层将生物分为……(囧,想象不到),直到最底层,万物,你我,为树的一片普通得再普通的叶子。树越往下,粒度越小,分类越细(哈哈,自己乱扯的)。停!废话多了点,跑题了,回到刚才的问题,重头戏来了,要变换到什么空间,才具备上述这种良好类内相似、类间区分的效果?到这,我就只能say sorry了。计算机视觉领域发展了几十年,就为了这一个问题倾注了无数研究者的智慧与心血。当然了,也诞生和孕育了很多经典和有效的解答。(个人理解,上述说的实际上就是特征提取)。从一开始的颜色特征(颜色直方图)、纹理特征(Harr、LBP、HOG、SIFT等)、形状特征等到视觉表达Bag of Words,再到特征学习Deep Learning,技术的发展总能带给人希望,曙光也越来越清晰,但路还很远,是不?      

           扯太多了,严重离题了。上面说到,特征脸EigenFace的思想是把人脸从像素空间变换到另一个空间,在另一个空间中做相似性的计算。EigenFace选择的空间变换方法是PCA,也就是大名鼎鼎的主成分分析。它广泛的被用于预处理中以消去样本特征维度之间的相关性。当然了,这里不是说这个。EigenFace方法利用PCA得到人脸分布的主要成分,具体实现是对训练集中所有人脸图像的协方差矩阵进行本征值分解,得对对应的本征向量,这些本征向量(特征向量)就是“特征脸”。每个特征向量或者特征脸相当于捕捉或者描述人脸之间的一种变化或者特性。这就意味着每个人脸都可以表示为这些特征脸的线性组合。实际上,空间变换就等同于“搞基”,原始像素空间的基就是单位“基”,经过PCA后空间就是以每一个特征脸或者特征向量为基,在这个空间(或者坐标轴)下,每个人脸就是一个点,这个点的坐标就是这个人脸在每个特征基下的投影坐标。哦噢,说得有点绕。

          下面就直接给出基于特征脸的人脸识别实现过程:

    1)将训练集的每一个人脸图像都拉长一列,将他们组合在一起形成一个大矩阵A。假设每个人脸图像是MxM大小,那么拉成一列后每个人脸样本的维度就是d=MxM大小了。假设有N个人脸图像,那么样本矩阵A的维度就是dxN了。

    2)将所有的N个人脸在对应维度上加起来,然后求个平均,就得到了一个“平均脸”。你把这个脸显示出来的话,还挺帅的哦。

    3)将N个图像都减去那个平均脸图像,得到差值图像的数据矩阵Φ。

    4)计算协方差矩阵C=ΦΦT。再对其进行特征值分解。就可以得到想要的特征向量(特征脸)了。

    5)将训练集图像和测试集的图像都投影到这些特征向量上了,再对测试集的每个图像找到训练集中的最近邻或者k近邻啥的,进行分类即可。

          算法说明白了都是不明白的,所以还是得去看具体实现。因此,可以对照下面的代码来弄清楚这些步骤。

          另外,对于步骤4),涉及到求特征值分解。如果人脸的特征维度d很大,例如256x256的人脸图像,d就是65536了。那么协方差矩阵C的维度就是dxd=65536x65536。对这个大矩阵求解特征值分解是很费力的。那怎么办呢?如果人脸的样本不多,也就是N不大的话,我们可以通过求解C’=ΦTΦ矩阵来获得同样的特征向量。可以看到这个C’=ΦTΦ只有NxN的大小哦。如果N远远小于d的话,那么这个力气就省得很值了。那为什么求解C’=ΦTΦ矩阵的特征向量可以获得C=ΦΦT的特征向量?万众瞩目时刻,数学以完美舞姿登上舞台。证明如下:

          其中,ei是C’=ΦTΦ的第i个特征向量,vi是C=ΦΦT的第i个特征向量,由证明可以看到,vi=Φei。所以通过求解C’=ΦTΦ的特征值分解得到ei,再左乘Φ就得到C=ΦΦT的特征向量vi了。也就是我们想要的特征脸。

     

    二、Matlab实现

          下面的代码主要是在著名的人脸识别数据库YaleB中进行实现。用的是裁切后的人脸数据库,可以点击CroppedYale下载。共有38个人的人脸,人脸是在不同的光照下采集的,每个人脸图像是32x32个像素。实验在每一个的人脸图像中随机取5个作为训练图像,剩下的作为测试图像。当然了,实际过程中这个过程需要重复多次,然后得到多次准确率的均值和方差才有参考意义,但下面的demo就不做这个处理了。计算相似性用的是欧氏距离,但编程实现的时候为了加速,用的是简化版,至于如何简化的,考验你的时候到了。

    % Face recognition using eigenfaces
    
    close all, clear, clc;
    
    %% 20 random splits
    num_trainImg = 5;
    showEigenfaces = true;
    
    %% load data
    disp('loading data...');
    dataDir = './CroppedYale';
    datafile = 'Yale.mat';
    if ~exist(datafile, 'file')
    	readYaleDataset(dataDir, datafile);
    end
    load(datafile);
    
    %% Five images per class are randomly chosen as the training
    %% dataset and remaining images are used as the test dataset
    disp('get training and testing data...');
    num_class = size(unique(labels), 2);
    trainIdx = [];
    testIdx = [];
    for i=1:num_class
    	label = find(labels == i);
    	indice = randperm(numel(label));
    	trainIdx = [trainIdx label(indice(1:num_trainImg))];
    	testIdx = [testIdx label(indice(num_trainImg+1:end))];
    end
    
    %% get train and test data
    train_x = double(data(:, trainIdx));
    train_y = labels(trainIdx);
    test_x = double(data(:, testIdx));
    test_y = labels(testIdx);
    
    %% computing eigenfaces using PCA
    disp('computing eigenfaces...');
    tic;
    [num_dim, num_imgs] = size(train_x);   %% A: #dim x #images
    avg_face = mean(train_x, 2); 			 %% computing the average face
    X = bsxfun(@minus, train_x, avg_face); %% computing the difference images
    
    %% PCA
    if num_dim <= num_imgs 
    	C = X * X';
    	[V, D] = eig(C);
    else
    	C = X' * X; 
    	[U, D] = eig(C);
    	V = X * U;
    end
    eigenfaces = V;
    eigenfaces = eigenfaces ./ (ones(size(eigenfaces,1),1) * sqrt(sum(eigenfaces.*eigenfaces)));
    toc;
    
    %% visualize the average face
    P = sqrt(numel(avg_face));
    Q = numel(avg_face) / P;
    imagesc(reshape(avg_face, P, Q)); title('Mean face');
    colormap('gray');
    
    %% visualize some eigenfaces
    figure;
    num_eigenfaces_show = 9;
    for i = 1:num_eigenfaces_show
    	subplot(3, 3, i)
    	imagesc(reshape(eigenfaces(:, end-i+1), P, Q));
    	title(['Eigenfaces ' num2str(i)]);
    end
    colormap('gray');
    
    %% transform all training images to eigen space (each column for each image)
    disp('transform data to eigen space...');
    X = bsxfun(@minus, train_x, avg_face);
    T = eigenfaces' * X;
    
    %% transform the test image to eigen space
    X_t = bsxfun(@minus, test_x, avg_face);
    T_t = eigenfaces' * X_t;
    
    %% find the best match using Euclidean distance
    disp('find the best match...');
    AB = -2 * T_t' * T;       % N x M
    BB = sum(T .* T);         % 1 x M
    distance = bsxfun(@plus, AB, BB);        % N x M
    [score, index] = min(distance, [], 2);   % N x 1
    
    %% compute accuracy
    matchCount = 0;
    for i=1:numel(index)
    	predict = train_y(index(i));
    	if predict == test_y(i)
    		matchCount = matchCount + 1;
    	end
    end
    
    fprintf('**************************************\n');
    fprintf('accuracy: %0.3f%% \n', 100 * matchCount / numel(index));
    fprintf('**************************************\n');

          下面是将CroppedYale的图像读入matlab的代码。

    function readYaleDataset(dataDir, saveName)
    	dirs = dir(dataDir);
    	data = [];
    	labels = [];
    	for i = 3:numel(dirs)
    		imgDir = dirs(i).name;
    		imgDir = fullfile(dataDir, imgDir);
    		imgList = dir(fullfile(imgDir, '*.pgm'));
    		for j = 1:numel(imgList)
    			imgName = imgList(j).name;
    			if strcmp('Ambient.pgm',  imgName(end-10:end))
    				continue;
    			end
    			im = imread(fullfile(imgDir, imgName));
    			if size(im, 3) ==3
    				im = rgb2gray(im);
    			end
    			im = imresize(im, [32 32]);
    			im = reshape(im, 32*32, 1);
    			data = [data im];
    		end
    		labels = [labels ones(1, numel(imgList)-1) * (i-2)];
    	end
    	save(saveName, 'data', 'labels');
    end

     

    三、实验结果

          首先来个帅帅的平均脸:

          然后来9个帅帅的特征脸:

          在本实验中,实验结果是30.126%左右。如果加上了某些预处理,这个结果就可以跑到62%左右。只是这个预处理我有点解析不通,所以就没放在demo上了。

          本文如果有什么不对的地方,还望大家指正。

     

    展开全文
  • 人脸识别经典算法一:特征脸方法(Eigenface)

    万次阅读 多人点赞 2014-04-06 00:07:53
    这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新。特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的。
  • 人脸识别学习总结

    千次阅读 2019-07-07 17:24:36
    人脸识别算法进行了一定程度的学习,从最开始的特征脸到如今的CNN人脸检测,有了较为全面的了解。重点掌握了基于PCA的特征脸检测,LDA线性判别分析(Fisher线性判别),以及基于级联器的Haar特征,LBP特征的人脸...
  • 爬虫+脸部识别+DCGAN脸部自动生成

    千次阅读 2020-04-03 17:55:24
    写真美女套图:爬虫+美女脸部识别+DCGAN脸部自动生成所有代码请到我的github上下载,请star一下,谢谢大家了。https://github.com/sileixinhua/BeautifulGirls第一部分:爬虫 抓美女套图(Python+BeautifulSoup+...
  • 深入浅出人脸识别原理

    万次阅读 多人点赞 2018-08-02 14:56:34
    前不久Iphone X发布,革命性的取消了TouchID(指纹识别),而添加了更酷的 FaceID(人脸识别) 模块,FaceID 不简单的运用在解锁上,还可以在支付,表情等场景中应用,给开发者带来更酷更丰富的应用,Iphone X 在多个...
  • 人脸识别各算法详解

    万次阅读 多人点赞 2020-10-12 18:22:54
    人脸识别各算法详解 最近,由于工作需要,为了找到一款高效的认识识别算法,对各种人脸识别算法都研究了一番,以下记录的是各算法的理论基础。 一.MTCNN 本文章主要介绍MTCNN算法的流程,MTCNN主要由三个框架组成...
  • 人脸识别技术发展现状及未来趋势

    万次阅读 2019-02-20 10:05:40
    当前,随着人工智能、物联网等前沿技术的...用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。  刚...
  • 分享一个免费的人脸识别API、SDK~~

    万次阅读 2015-05-21 09:52:51
    EYEKEY是北京天诚盛业科技有限公司旗下的新型生物识别云服务平台,旨在...现在EyeKey生物识别云服务平台,已开放人脸识别API、SDK,感兴趣地盆友们,猛戳http://www.eyekey.com/devcenter/api/APIface.html了解详情吧~~
  • 夜深人静的时候居然用labview调用摄像头做这个!!!! 对没错,我实现了利用labview调用深度学习算法实现人脸特征提取和识别!!!!...识别率非常高,只要是同一...全网最强labview人脸识别程序,深度学习 人脸识...
  • 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别...
  • 浅谈人脸识别技术原理分析

    千次阅读 2019-08-08 16:23:14
    人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。需要用摄像机或摄像头采集含有人脸的图像或者视频,并自动在图像中检测和跟踪人脸,从而对检测到的人脸进行脸部的认证一系列相关技术,一般情况下...
  • 我用opencv做了一个人脸识别的应用。主要流程就是,从一幅图中检测出人脸,然后将人脸框定为一张新的图片,再利用这张图片,调用opencv的识别函数进行识别。可问题是,内置的三个算法我都用过了,为什么识别率都非常...
  • 人脸识别,一种基于人的脸部特征信息进行身份认证的生物特征识别技术。近年来,随着欧美发达国家人脸识别技术开始进入实用阶段后,人脸识别迅速成为近年来全球的一个市场热点,它具有如下显著优点:  ·非接触,...
  • 比如opencv、神经网络来做的一个人脸识别程序,如果给出同一个人的两张一老一少的照片,它能识别出那是同一个人吗?(也就是问,年龄是否会影响人脸的识别) 望各位大佬指点指点吗,谢谢了!!!
  • OpenCv 之(图片人脸识别)和 (摄像头读入)

    万次阅读 多人点赞 2019-06-26 11:38:26
    先来张人脸识别效果图: 1、概述 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到...
  • 亲们,问个问题,想要做个人脸识别,不仅仅要把人脸识别出来,要实现事先把相关人员的人脸信息存到数据库,下次给某个人拍照片时可以去数据库比对,然后确认是不是本人。问一下有没有人做过,求提供个思路和方法。...
  • 静态人脸识别和动态人脸识别的区别   人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。作为一种新型而且发展较快的技术,很多人对这门技术并没有清晰的理解和认识。比如说,人脸识别有哪些种类...
1 2 3 4 5 ... 20
收藏数 92,134
精华内容 36,853
关键字:

脸部识别