一文了解人脸识别:从实现方法到应用场景都讲明白了_大数据v的博客-程序员资料

640?wx_fmt=gif

导读:在本文中,我们将会接触到一个既熟悉又陌生的概念——人脸识别。之所以熟悉,是因为人脸识别技术在我们日常生活中应用极其广泛,例如火车站刷脸验票进站、手机人脸解锁等;之所以陌生,是因为我们可能并不了解人脸识别的原理,不了解人脸识别的任务目标、发展历程与趋势。


那么,在本文中,我们将会对人脸识别技术的概念、应用、目标等做简要介绍,以便读者对这项技术有一个立体的认识。


作者:王天庆

如需转载请联系大数据(ID:hzdashuju)


人脸识别技术是如今十分热门的一项技术,掌握人脸识别技术的优势不言而喻。下面,我们将首先介绍人脸识别的基本概况。



01 何为人脸识别


人脸识别技术由来已久,这个概念没有一个严格的定义,一般有狭义与广义之分。


狭义的表述一般是指:以分析与比较人脸视觉特征信息为手段,进行身份验证或查找的一项计算机视觉技术。


从表述上看,狭义的人脸识别技术其实是一种身份验证技术,它与我们所熟知的指纹识别、声纹识别、指静脉识别、虹膜识别等均属于同一领域,即生物信息识别领域。因此,狭义上的人脸识别一般指的是通过人脸图像进行身份确认或查找的场景。


生物信息识别的认证方式与传统的身份认证方式相比,具有很多显著优势。例如传统的密钥认证、识别卡认证等存在易丢失、易被伪造、易被遗忘等特点。而生物信息则是人类与生俱来的一种属性,并不会被丢失和遗忘。


而作为生物信息识别之一的人脸识别又具有对采集设备要求不高(最简单的方式只需要能够拍照的设备即可)、采集方式简单等特点。这是虹膜识别、指纹识别等方式所不具备的优点。


人脸识别的广义表述是:在图片或视频流中识别出人脸,并对该人脸图像进行一系列相关操作的技术。例如,在进行人脸身份认证时,不可避免地会经历诸如图像采集、人脸检测、人脸定位、人脸提取、人脸预处理、人脸特征提取、人脸特征对比等步骤,这些都可以认为是人脸识别的范畴。



02 人脸识别的应用


近些年,随着人脸识别精度的提高,基于该项技术的产品也开始在我们生活中呈现“井喷”之势。


例如,早在2016年2月,北京站就开启了“刷脸”进站模式。如图1-1所示是北京站“刷脸”进站的使用提示。现在,越来越多的火车站开始采用“刷脸”进站方式替代人工检票,有效地加快了检票速度。


640?wx_fmt=jpeg

▲图1-1 北京站“刷脸”进站使用提示


人脸识别的另外一个典型应用是手机解锁。随着iPhone X的诞生,苹果手机家族增添了一项新的身份验证方式,即所谓的Face ID。而苹果公司官方宣称,基于Face ID的识别准确率要远高于基于指纹识别的Touch ID。


实际上,通过人脸识别来解锁手机并不算什么新鲜事。早在Android 4.0时期,这项功能就已经集成在操作系统中了。只不过,由于种种原因,这项功能并未取得比较好的效果,因此无论是谷歌还是手机制造厂商都没有对此进行宣传,自然也不会被大众所了解。


值得一提的是,据说苹果公司在这项技术上的研发时间长达5年之久,直至iPhone X才搭载了完备的人脸识别功能,可见高精度的人脸识别技术并不是一种简单的技术。


上面的两个例子只是人脸识别应用的冰山一角,人脸识别技术的典型应用场景可以总结为如下几个场景。


1. 身份认证场景


这是人脸识别技术最典型的应用场景之一。门禁系统、手机解锁等都可以归纳为该种类别。该方法与传统的钥匙开锁、指纹识别、虹膜识别等均属于身份认证。这需要系统判断当前被检测人脸是否已经存在于系统内置的人脸数据库中。如果系统内没有该人的信息,则认证失败。


2. 证件验证场景


证件验证与身份认证相似,也可称为人脸验证,是判断证件中的人脸图像与被识别人的人脸是否相同的场景。在进行人脸与证件之间的对比时,往往会引入活体检测技术。


或许大家对活体检测技术并不陌生,就是我们在使用互联网产品时经常会出现的“眨眨眼、摇摇头、点点头、张张嘴”的人脸识别过程,这个过程我们称之为基于动作指令的活体检测。活体检测还可以借由红外线、活体虹膜、排汗等方法来实现。


不难理解,引入活体检测可以有效地增加判断的准确性,防止攻击者伪造或窃取他人生物特征用于验证,例如使用照片等平面图片对人脸识别系统进行攻击。


3. 人脸检索场景


人脸检索与身份验证类似,二者的区别在于身份验证是对人脸图片“一对一”地对比,而人脸检索是对人脸图片“一对多”地对比。例如,在获取到某人的人脸图片后,可以通过人脸检索方法,在人脸数据库中检索出该人的其他图片,或者查询该人的姓名等相关信息。


这与我们在数据库中进行查询是一样的,但人脸检索要比在数据库中查询常规数据复杂得多,例如该以何种方式才能建立高效的人脸图片检索索引呢?


人脸检索的应用场景非常多,一个典型的例子是在重要的交通关卡布置人脸检索探头,将行人的人脸图片在犯罪嫌疑人数据库中进行检索,从而比较高效地识别出犯罪嫌疑人。


4. 人脸分类场景


我们这里指的人脸分类主要包括判断人脸图片中的人脸是男人还是女人,所属的年龄区间是怎样的,是什么样的人种,该人的表情是什么等。当然,人脸分类能够实现的功能远不止于此,在很多场景中具有重要的应用价值。


例如,社交类App可以通过用户上传的自拍图片来判断该用户的性别、年龄等特征,从而为用户有针对性地推荐一些可能感兴趣的人。


5. 交互式应用场景


美颜类自拍软件大家或许都很熟悉,该类软件除能够实现常规的磨皮、美白、滤镜等功能外,还具有“大眼”“瘦脸”、添加装饰类贴图等功能。


而“大眼”“瘦脸”等功能都需要使用人脸识别技术来检测出人眼或面部轮廓,然后根据检测出来的区域对图片进行加工,从而得到我们看到的最终结果。


添加装饰类贴图也是在这个基础上实现的,可以认为这是一种AR(增强现实)应用。其实,交互式的应用场景远不止于此,还有许多游戏也属于这种交互式的应用场景。


6. 其他应用


上面所述的内容是人脸识别中应用比较广泛的领域。其实,除这些领域外,人脸识别还有许多其他的应用。


例如,人脸图片的重建技术可以应用到通信工程领域,实现低比特率的图片与视频传输;基于人脸识别技术,可以实现人脸图片的合成,甚至直接将一个视频中的人脸完全替换为另外一个人的脸。其中一个经典的项目是DeepFake,利用该项目可以实现“视频换脸”功能,实现的效果足以以假乱真。


我们可以在日常生活中体会到人脸识别技术为我们的生活带来的便利。随着技术的进一步发展,将会有越来越多的人脸识别相关项目落地。在后面的实战内容中,我们将会围绕这些应用场景,具体介绍其原理与实现方法。



03 人脸识别的目标


我们已经介绍了人脸识别的不同应用场景。在不同的应用场景下,人脸识别的目标可能是不相同的。但是,对于绝大多数的人脸识别应用场景,人脸识别的目标是类似的。


人脸识别的大致流程可以描述为:通过人脸识别模型判断图片中是否存在人脸,如果存在人脸,则定位到该人脸的区位,或者提取该人脸图像的高级特征,作为该人脸图像的特征向量,并用在后续对图片的处理中。


由于人脸识别的应用场景不同,上述步骤的选择和侧重点也不尽相同。例如:


  • 定位人脸在图片中的位置,可以用于诸如AR等贴图操作;

  • 通过定位人脸的关键点,可以对人脸图片进行几何变换,通过几何变换可以实现对图像中人脸的校正,与此同时,得到的人脸关键点还可以用来实现诸如“瘦脸”等操作;

  • 如果想要实现的功能并不是对人脸图片的几何变换,而是对图片中的人脸进行特定判断,如判断图片中人脸的性别、年龄等,那么此时的目标是提取出图片中人脸的高级特征,然后根据提取出来的高级特征,使用分类器进行分类,即可以实现诸如性别识别、年龄判断等功能;

  • 对于人脸对比,一个可行的思路仍然是提取图片中人脸的高级特征,然后对这两个特征进行对比,从而得出一个相似度数值,通过比较该数值与预设阈值的大小,从而判别两张图片中的人脸是否属于同一个人。


640?wx_fmt=png

▲图1-2 一种人脸对比解决方案的流程图


从上面的介绍中我们可以看出,不同人脸识别应用的很多步骤都是重合的,其差异仅在于操作层次的深浅。通过合理选择、组合对人脸图片的操作层次,就可以实现我们预期的目标。


这个实现过程可以说是“万变不离其宗”,最核心的技术便是提取人脸图像的高级特征,我们将会在后续的例子中逐步印证这一点。



04 人脸识别的一般方法


我们首先以人脸对比场景为例,介绍一种人脸对比的可行思路。


我们在前文中提到过,虽然人脸识别的应用很广泛,而且用到的具体技术也不尽相同,但是,有很多步骤其实是类似的。以人脸对比为例,一种可行的解决方案如图1-2所示。


下面我们简要介绍一下其中的一些关键步骤。


1. 图像预处理


在很多计算机视觉项目中,往往需要进行图片的预处理操作。这主要是因为输入的图片常存在不合规范的地方,甚至会干扰系统的后续工作。


如图片带有噪声,或者图片尺寸不符合系统要求等,这些都是预处理这一步需要做的事。而对应的处理方法可以是对图片进行滤波等操作,从而使图片更加符合系统要求。如图1-3所示,分别为带有椒盐噪声的图片和经过中值滤波处理后的图片。


640?wx_fmt=png

▲图1-3 带有椒盐噪声的图片(左图)与经过中值滤波处理后的图片(右图)


2. 人脸检测


顾名思义,人脸检测就是用来判断一张图片中是否存在人脸的操作。如果图片中存在人脸,则定位该人脸在图片中的位置;如果图片中不存在人脸,则返回图片中不存在人脸的提示信息。


对于人脸识别应用,人脸检测可以说是必不可少的一个重要环节。人脸检测效果的好坏,将直接影响整个系统的性能优劣。如图1-4所示,灰色矩形框代表了从图片中检测到的人脸图像位置。


640?wx_fmt=jpeg

▲图1-4 人脸检测示意图


3. 人脸校正


人脸校正又可以称为人脸矫正、人脸扶正、人脸对齐等。我们知道,图片中的人脸图像往往都不是“正脸”,有的是侧脸,有的是带有倾斜角度的人脸。这种在几何形态上似乎不是很规整的面部图像,可能会对后续的人脸相关操作造成不利影响。于是,就有人提出了人脸校正。


我们可以大致认为,人脸校正是对图片中人脸图像的一种几何变换,目的是减少倾斜角度等几何因素给系统带来的影响。因此,人脸校正一般也被认为是对人脸图像的几何归一化操作。人脸校正一般被用在人脸对比等存在后续人脸特征提取的应用场景中。


但是,随着深度学习技术的广泛应用,人脸校正并不是被绝对要求存在于系统中。深度学习模型的预测能力相对于传统的人脸识别方法要强得多,因为它以大数据样本训练取胜。也正因如此,有的人脸识别系统中有人脸校正这一步,而有的模型中则没有。


4. 人脸特征点定位


人脸特征点定位是指在检测到图片中人脸的位置之后,在图片中定位能够代表图片中人脸的关键位置的点。常用的人脸特征点是由左右眼、左右嘴角、鼻子这5个点组成的5点人脸特征点,以及包括人脸及嘴唇等轮廓构成的68点人脸特征点等。


640?wx_fmt=png

▲图1-5 定位到的5个人脸特征点


图1-5所示的就是对人脸图片进行特征点定位后标定的人脸特征点。通过对图片中人脸特征点的定位,可以进行人脸校正,也可以应用到某些贴图类应用中。


5. 人脸特征提取


对于很多人脸识别应用来说,人脸特征提取是十分关键的步骤。例如在性别判断、年龄识别、人脸对比等场景中,将已提取到的人脸特征为主要的判断依据。提取到的人脸特征质量的优劣将直接影响输出结果正确与否。


我们可以认为RGB形式的彩色图片是一个具有红、绿、蓝三通道的矩阵,而二值图像和灰度图像本身在存储上就是一个矩阵,这些图片中的像素点是很多的。而提取到的特征往往是以特征向量的形式表示的,向量的元素一般都不会太多(一般在“千”这个数量级)。


因此,从宏观角度来看,特征提取过程可以看作一个数据抽取与压缩的过程。从数学角度看,其实是一个降维的过程。有关降维的内容,我们将会在后续的部分中详细介绍。


6. 分类器


分类器其实指代的是一种分类算法。例如我们需要判断图片中人脸所属者的性别,在提取到人脸图像的高级特征之后,我们要根据这个提取到的特征来判断其性别。


这个过程其实是一个二分类过程,也就是大家都知道的:在不考虑特殊情况的前提下,人类可以分为两类,不是男人就是女人。判断的依据是前面提到的人脸图像的高级特征,用于判断的算法就是所谓的分类器。


在这里我们介绍了人脸识别中人脸对比场景中涉及的一些具体要素。我们可以看到,人脸对比的一个可行思路是首先进行图片的预处理,然后进行人脸检测判断,最后提取特征并进行对比。人脸对比是人脸识别中比较典型的应用场景,我们可以从这个例子中总结出人脸识别应用的共性。


  1. 图像预处理。目的是减少图片自身因素对系统判断造成的干扰,或者使图片格式更适合系统。常见的处理方式有图片去噪、尺寸转换、灰度化处理等。

  2. 人脸检测。对于人脸识别应用场景,如果图片中根本不存在人脸,那么后续的一切操作都将变得没有意义,甚至会造成错误的结果。而如果识别不到图片中存在的人脸,也会导致整个系统执行的提前终止。因此,人脸检测在人脸识别应用中具有十分重要的作用,甚至可以认为是不可或缺的重要一环。

  3. 特征点定位与特征提取。人脸识别系统如果想要实现一些高级功能,获取特征将是必不可少的部分。对于不同的人脸识别应用场景,其对特征的定义也不尽相同。例如想要在图片中的人脸上自动添加一个眼镜作为装饰物,那么我们需要获取的特征就是双眼在图片中的位置,这样以人眼为特征点的定位将是十分必要的;而对于人脸对比、性别识别等场景,获取能够代表图片中人脸的一个特征向量将是十分必要的。

  4. 对特征的利用。我们已经明确了,获取我们所需的特征是后续操作的重要基础。特征的利用方式前面已经提到几种,诸如使用分类器进行分类、使用比较器进行比较,或者利用定位到的人脸特征点进行图片的贴图。毫无疑问,对特征利用的目的是很明确的,因为这往往就是我们最终想要获取的系统直接输出结果。


上述过程在实现上可能会很复杂,但是对于大多数的人脸识别应用而言,大致的思路是相同的。将上述内容归结为人脸识别系统构建的一般方法,我们将在后续的内容中以这样的思路进行人脸识别系统的设计与实现。


关于作者:王天庆,长期从事分布式系统、数据科学与工程、人工智能等方面的研究与开发,在人脸识别方面有丰富的实践经验。现就职某世界100强企业的数据实验室,从事数据科学相关技术领域的预研工作。

本文摘编自《Python人脸识别:从入门到工程实践》,经出版方授权发布。


延伸阅读《Python人脸识别

点击上图了解及购买

转载请联系微信:DoctorData


推荐语:世界100强企业资深AI工程师撰写,全面讲解人脸识别各项基础技术、原理和算法,从零实现工程级人脸识别引擎。


640?


据统计,99%的大咖都完成了这个神操作


640?wx_fmt=png


更多精彩


在公众号后台对话框输入以下关键词

查看更多优质内容!


PPT | 报告 | 读书 | 书单 | 干货 

大数据 | 揭秘 | Python | 可视化

人工智能 | 机器学习 | 深度学习 | 神经网络

AI | 1024 | 段子 | 区块链 | 数学


猜你想看




Q: 你看好人脸识别技术的哪些应用?

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:[email protected]

更多精彩,请在后台点击“历史文章”查看

640?wx_fmt=jpeg

640?wx_fmt=gif点击阅读原文,了解更多

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zw0Pi8G5C1x/article/details/89913059

智能推荐

数据结构和算法(C语言)_sleep22的博客-程序员资料_c语言数据结构与算法

动态数组、单向链表、栈的基本操作(含源码)

javamail发送邮件的简单实例_weixin_30376509的博客-程序员资料

今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。第一个类:MailSenderInfo.javapackage com.util.mail;/** * 发送邮件需要使用的基本信息 *auth...

Pycharm设置HTML文件自动补全代码或标签_chen072086的博客-程序员资料_pycharm中html文件{{}}

在使用Pycharm编写Django模板时,要用到一些特殊的格式,比如{{ … }},{% if %}等等,如果不设置Pycharm,只能一个符号一个符号的输入。现在教大家如何设置自动补全这些东西。首先,打开Pycharm的Files–>Settings–>Editor–>Live Templates 点击最右边的添加按钮,选择Live Template 添加标签...

warning: LF will be replaced by CRLF in tyrone-springboot-quickstart-withoutparent/pom.xml. The file_小曦阳哟的博客-程序员资料

warning: LF will be replaced by CRLF in tyrone-springboot-quickstart-withoutparent/pom.xml.The file will have its original line endings in your working directory.

php实现百钱买白鸡_一亩地的博客-程序员资料_php鸡

//百钱买白鸡:// 公鸡5文钱1只,母鸡3文钱一只,小鸡一文钱3只,// 现在用100文钱共买了100只鸡,问这100只鸡中,公鸡、// 母鸡和小鸡各是多少只(设每种至少一只)/*for($g = 1;$gfor($m=1;$mfor($x=1;$xif(($g + $m + $x == 100) && ($g*5 + $m*3 + $x/3 ) == 100){

施密特触发器的作用-摘录+自解_xiewk2015的博客-程序员资料_施密特触发器的作用

波形变换可将三角波、正弦波、周期性波等变成矩形波。脉冲波的整形数字系统中,矩形脉冲在传输中经常发生波形畸变,出现上升沿和下降沿不理想的情况,可用施密特触发器整形后,获得较理想的矩形脉冲。脉冲鉴幅幅度不同、不规则的脉冲信号施加到施密特触发器的输入端时,能选择幅度大于预设值的脉冲信号进行输出。构成多谐振荡器幅值不同的信号在通过加上一个合适电容的施密特触发器后会产生矩形脉冲,矩形波脉冲信..._1671465600

随便推点

2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)_ZhangQiang-的博客-程序员资料

2015-2016最火的Android开源项目本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提升的小伙伴们可以前来一关哦~ 本文只提供了简单介绍与项目网址,具体请点进去自行参谋哦,费心整理,希望对大家有用github开源项目地址:https://github.com/Trinea/android-open-project网

FOJ1174 Dice Stacking_chriswho77的博客-程序员资料

Problem 1174 Dice Stacking Accept: 69 Submit: 129Time Limit: 1000 mSec Memory Limit : 32768 KB Problem DescriptionChun-Soo is playing a dice stacking game. Six faces of a die are squar

主机访问虚拟机Web服务器_我本浪人--游吟世间的博客-程序员资料_主机访问虚拟机的web服务器

①主机访问虚拟机Web服务器基本步骤(虚拟机上启动httpd):1、安装httpd:yum install httpd2、启动httpd:systemctl start httpd.service3、关闭firewall:systemctl stop firewalld.service设置虚拟机为NAT连接:1、点击虚拟机——设置(选择NAT模式(N):用于共享主机的IP地址)2、 点击编辑——虚拟网络编辑器3、点击NAT设置②内容补充:一、VMware.

ArrayList 的源码分析(扩容机制-JDK-10)_weixin_33858249的博客-程序员资料

Arraylist的源码分析(扩容机制-JDK 10)初始化值private static final long serialVersionUID = 8683452581122892189L;默认数组的初始化容量private static final int DEFAULT_CAPACITY = 10;空数组元素pri...

单片机C语言DA转换,51单片机PCF8591的DA转换程序详解[含HL-1与HJ-c52 DA代码AD/DA原理图](可直接复......_桂能的博客-程序员资料

以下是补充(能想到的范围有限有没想到的还请谅解)DA工作原理基于PCF8591芯片DA是什么?n DA指数模转换(Digital to Analog),顾名思义,就是把数字信号转换成模拟信号。与DA相对应,AD是把模拟信号转换为数字信号,便于计算机等数字控制器处理。DA有什么作用?n 1、将数字量转换成模拟量,以便操纵控制对象。n 2、用数字化来控制各种对象。n 3、可以在单片机中输入数字,来控制...

Java JSR-269 插入式注解处理器_jsr269_spring呀的博客-程序员资料

在Javac源码中,插入式注解处理器的初始化过程是在方法中完成的,而它的执行过程则是在方法中完成的,这个方法判断是否还有新的注解处理器需要执行,如果有的话,通过类的 **doProcessing()**方法生成一个新的JavaCompiler对象对编译的后续步骤进行处理。在JDK1.5之后,Java语言提供了对注解(Annotation)的支持,这些注解与普通的Java代码一样,是在运行期间发挥作用的。.........

推荐文章

热门文章

相关标签