数据分析之人脸识别
Start:关注本公众号后,可直接联系后台获取排版美化的详细文档!
Hints:本篇文章所编纂的资料均来自网络,特此感谢参与奉献的有关人
人脸识别
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。需要用摄像机或摄像头采集含有人脸的图像或者视频,并自动在图像中检测和跟踪人脸,从而对检测到的人脸进行脸部的认证一系列相关技术,一般情况下也会叫做人像识别、面部识别。
关键技术:
人脸检测(Face Detection):
是检测出图像中人脸所在位置的一项技术。人脸检测算法的输入是一张图片,输出是人脸框坐标序列(0个人脸框或1个人脸框或多个人脸框)。一般情况下,输出的人脸坐标框为一个正朝上的正方形,但也有一些人脸检测技术输出的是正朝上的矩形,或者是带旋转方向的矩形。
常见的人脸检测算法基本是一个“扫描”加“判别”的过程,即算法在图像范围内扫描,再逐个判定候选区域是否是人脸的过程。因此人脸检测算法的计算速度会跟图像尺寸、图像内容相关。开发过程中,我们可以通过设置“输入图像尺寸”、或“最小脸尺寸限制”、或“人脸数量上限”的方式来加速算法。
面貌检测是指在动态的场景与复杂的背景中判断是否存在面像,并分离出这种面像。一般有下列几种方法:
参考模板法
首先设计一个或数个标准人脸的模板,然后计算测试采集的样品与标准模板之间的匹配程度,并通过阈值来判断是否存在人脸;
人脸规则法
由于人脸具有一定的结构分布特征,所谓人脸规则的方法即提取这些特征生成相应的规则以判断测试样品是否包含人脸;
样品学习法
这种方法即采用模式识别中人工神经网络的方法,即通过对面像样品集和非面像样品集的学习产生分类器;
肤色模型法
这种方法是依据面貌肤色在色彩空间中分布相对集中的规律来进行检测。
特征子脸法
这种方法是将所有面像集合视为一个面像子空间,并基于检测样品与其在子空间的投影之间的距离判断是否存在面像。
人脸配准(Face Alignment):
是定位出人脸上五官关键点坐标的一项技术。人脸配准算法的输入是“一张人脸图片”加“人脸坐标框”,输出五官关键点的坐标序列。五官关键点的数量是预先设定好的一个固定数值,可以根据不同的语义来定义(常见的有5点、68点、90点等等)。
当前效果的较好的一些人脸配准技术,基本通过深度学习框架实现,这些方法都是基于人脸检测的坐标框,按某种事先设定规则将人脸区域扣取出来,缩放的固定尺寸,然后进行关键点位置的计算。因此,若不计入图像缩放过程的耗时,人脸配准算法是可以计算量固定的过程。另外,相对于人脸检测,或者是后面将提到的人脸提特征过程,人脸配准算法的计算耗时都要少很多。
人脸属性(Face Attribute):
是识别出人脸的性别、年龄、姿态、表情等属性值的一项技术。一般的人脸属性识别算法的输入是“一张人脸图”和“人脸五官关键点坐标”,输出是人脸相应的属性值。人脸属性识别算法一般会根据人脸五官关键点坐标将人脸对齐(旋转、缩放、扣取等操作后,将人脸调整到预定的大小和形态),然后进行属性分析。
常规的人脸属性识别算法识别每一个人脸属性时都是一个独立的过程,即人脸属性识别只是对一类算法的统称,性别识别、年龄估计、姿态估计、表情识别都是相互独立的算法。但最新的一些基于深度学习的人脸属性识别也具有一个算法同时输入性别、年龄、姿态等属性值的能力。
人脸特征(Face Feature Extraction):
是将一张人脸图像转化为一串固定长度的数值的过程。这个数值串被称为“人脸特征(FaceFeature)”,具有表征这个人脸特点的能力。
人脸提特征过程的输入也是“一张人脸图”和“人脸五官关键点坐标”,输出是人脸相应的一个数值串(特征)。人脸提特征算法都会根据人脸五官关键点坐标将人脸对齐预定模式,然后计算特征。
近几年来,深度学习方法基本统治了人脸提特征算法,这些算法都是固定时长的算法。早前的人脸提特征模型都较大,速度慢,仅使用于后台服务。但最新的一些研究,可以在基本保证算法效果的前提下,将模型大小和运算速度优化到移动端可用的状态。
人脸比对(Face Compare):
是衡量两个人脸之间相似度的算法。人脸比对算法的输入是两个人脸特征(注:人脸特征由前面的人脸提特征算法获得),输出是两个特征之间的相似度。人脸验证、人脸识别、人脸检索都是在人脸比对的基础上加一些策略来实现。相对人脸提特征过程,单次的人脸比对耗时极短,几乎可以忽略。
基于人脸比对可衍生出人脸验证(FaceVerification)、人脸识别(FaceRecognition)、人脸检索(FaceRetrieval)、人脸聚类(FaceCluster)等算法。
面貌比对是对被检测到的面貌像进行身份确认或在面像库中进行目标搜索。这实际上就是说,将采样到的面像与库存的面像依次进行比对,并找出最佳的匹配对象。所以,面像的描述决定了面像识别的具体方法与性能。主要采用特征向量与面纹模板两种描述方法:
特征向量法
该方法是先确定眼虹膜、鼻翼、嘴角等面像五官轮廓的大小、位置、距离等属性,然后再计算出它们的几何特征量,而这些特征量形成一描述该面像的特征向量。
面纹模板法
该方法是在库中存贮若干标准面像模板或面像器官模板,在进行比对时,将采样面像所有象素与库中所有模板采用归一化相关量度量进行匹配。此外,还有采用模式识别的自相关网络或特征与模板相结合的方法。
人脸验证(Face Verification):
是判定两个人脸图是否为同一人的算法。它的输入是两个人脸特征,通过人脸比对获得两个人脸特征的相似度,通过与预设的阈值比较来验证这两个人脸特征是否属于同一人(即相似度大于阈值,为同一人;小于阈值为不同)。
人脸识别(Face Recognition):
是识别出输入人脸图对应身份的算法。它的输入一个人脸特征,通过和注册在库中N个身份对应的特征进行逐个比对,找出“一个”与输入特征相似度最高的特征。将这个最高相似度值和预设的阈值相比较,如果大于阈值,则返回该特征对应的身份,否则返回“不在库中”。
人脸检索(Face Retrieval):
是查找和输入人脸相似的人脸序列的算法。人脸检索通过将输入的人脸和一个集合中的说有人脸进行比对,根据比对后的相似度对集合中的人脸进行排序。根据相似度从高到低排序的人脸序列即使人脸检索的结果。
人脸聚类(Face Cluster):
是将一个集合内的人脸根据身份进行分组的算法。人脸聚类也通过将集合内所有的人脸两两之间做人脸比对,再根据这些相似度值进行分析,将属于同一个身份的人划分到一个组里。
在没有进行人工身份标注前,只知道分到一个组的人脸是属于同一个身份,但不知道确切身份。另外假设集合中有N个人脸,那么人脸聚类的算法复杂度为O(N2)
人脸活体(Face Liveness):
是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。和前面所提到的人脸技术相比,人脸活体不是一个单纯算法,而是一个问题的解法。这个解法将用户交互和算法紧密结合,不同的交互方式对应于完全不同的算法。鉴于方法的种类过于繁多,这里只介绍“人脸活体”的概念,不再展开。
人脸跟踪(Face Track)
面貌跟踪是指对被检测到的面貌进行动态目标跟踪。具体采用基于模型的方法或基于运动与模型相结合的方法。此外,利用肤色模型跟踪也不失为一种简单而有效的手段。
开发方法
开源框架
https://github.com/vipstone/faceai
https://blog.csdn.net/F_hawk189/article/details/88815829
https://github.com/ageitgey/face_recognition
http://www.dataguru.cn/article-12372-1.html
https://github.com/seetaface
第三方接口
百度API:https://ai.baidu.com/tech/face
百度API
百度的人脸技术
人脸检测:
人脸检测定位:
检测图片中的人脸并标记出人脸坐标,支持同时识别多张人脸
人脸属性分析:
准确识别多种人脸属性信息,包括年龄、性别、颜值、表情、情绪、脸型、头部姿态、是否闭眼、是否配戴眼镜、人脸质量信息及类型等
情绪识别:
分析检测到的人脸的情绪,并返回置信度分数,目前可识别愤怒、厌恶、恐惧、高兴、伤心、惊讶、嘟嘴、鬼脸、无情绪等9种情绪
150关键点定位:
精准定位包括脸颊、眉、眼、口、鼻等人脸五官及轮廓的150个关键点
人脸对比
人脸相似度比对:
比对图片中两张人脸的相似度,并返回相似度分值
在线图片活体检测:
分析单张图片中人像的破绽(摩尔纹、成像畸形等),判断图片中目标对象否为真人,确保比对效果真实可靠
人脸搜索:
1:N 搜索:
将一张人脸图片在人脸库的中进行搜索,返回最相似的一张或多张人脸及对应相似度
M:N 搜索:
如果一张图片中存在 M 张人脸,支持一次性在人脸库中搜索全部人脸,并返回每个人脸对应的用户和相似度
1:N 对比:
支持用一张人脸图片,与某一指定用户在人脸库中的多张照片进行对比,返回与该用户的相似度分值
人脸库管理:
提供人脸注册、更新、删除、用户信息查询等11个接口能力,支持百万级人脸库管理,并提供人脸库可视化全层级管理界面
图片质量检测:
实时校验人脸的姿态角度、遮挡度、清晰度、光照条件,确保输出的图片符合质量标准
活体检测:
在线图片活体检测:
基于图片中人像的破绽(摩尔纹、成像畸形等),判断目标是否为活体,有效防止屏幕二次翻拍等作弊攻击,支持单张或多张判断逻辑
在线H5视频活体检测:
现场录制视频,读出随机分配的数字,确保视频的即时性,而非事先录制,上传视频到云端进行活体分析,提升抵御攻击的能力
动作配合式活体检测:
配合SDK 完成眨眼、张嘴、摇头、左右转头、上下点头等7种预设动作,随机抓取多图进行活体判断,可自定义生效动作及校验顺序
离线RGB活体检测:
在线图片活体检测的离线版本,采集人像的破绽(摩尔纹、成像畸形等)来判断目标对象是否为活体,可在无网环境下离线使用
离线近红外活体检测:
利用近红外成像原理,实现夜间或无自然光条件下的活体判断,在屏幕无法成像、材质反射率不同等情况下维持高鲁棒性
离线3D结构光活体检测:
基于3D结构光成像原理,通过人脸表面反射光线构建深度图像,判断目标是否为活体,可强效防御图片、视频、屏幕、模具等攻击
接口调用举例
接口调用方法
· 方法1:Python SDK
· https://ai.baidu.com/ai-doc/FACE/ek37c1qiz
· 方法2:Http 请求
· https://ai.baidu.com/ai-doc/FACE/8k3gwxdg8
HTTP请求过程
百度AI开发平台注册
https://ai.baidu.com/
百度人脸检索应用创建
https://console.bce.baidu.com/ai/?_=1581223430156#/ai/face/app/list
百度应用人脸库创建
https://console.bce.baidu.com/ai/?_=1581223430156#/ai/face/facelib/groupList~appId=1458166
人脸检索API版本确认
百度AI接口调用教程
https://cloud.baidu.com/doc/APIGUIDE/s/3k1mz24k5
https://cloud.baidu.com/doc/APIGUIDE/s/1k1mysgan
人脸库上传人脸照片
https://ai.baidu.com/ai-doc/FACE/7k37c1twu
应用的API Key 和 Secret
获取 Access Token
人脸注册
人脸检索,获取身份信息
https://ai.baidu.com/ai-doc/FACE/Gk37c1uzc
人脸检索的入门指南
https://ai.baidu.com/ai-doc/FACE/8k3gwxdg8
参考资料:
https://github.com/vipstone/faceai
https://blog.csdn.net/F_hawk189/article/details/88815829
https://github.com/ageitgey/face_recognition
http://www.dataguru.cn/article-12372-1.html
https://github.com/seetaface
http://www.qianjia.com/zhike/html/2019-08/14_9828.html
http://m.elecfans.com/article/878517.html
http://m.elecfans.com/article/878517.html
https://blog.csdn.net/leon1741/article/details/81358466
https://ai.baidu.com/ai-doc/FACE/Gk37c1uzc
https://ai.baidu.com/ai-doc/FACE/8k3gwxdg8
公众号二维码
End:如果有兴趣了解金融量化交易和其他数据分析的实用技术,欢迎关注本公众号。