标签:顺序 图像金字塔 opencv c++编写 10个 skin 基础 com [1]
1. 概述 人脸核身指通过×××OCR等技术来构建包含用户真实身份信息的底库,通过指定方式获取用户真实照片,利用人脸比对技术秒级确认用户身份的技术。
人脸核身技术可用于远程身份认证、刷脸门禁考勤、安防监控等场景。图 1的思维导图简单描述了人脸核身面临的问题和包含的技术。
采集真实用户身份信息与图片构成人脸比对的底库。使用用户×××OCR技术实现用户身份信息的自动采集是目前较常用的方式。
对于特定领域范围内的应用(如企业内部的人脸门禁),可由可信机构使用人脸采集设备进行离线采集。
对于使用云服务的第三方应用,可由第三方应用使用云服务建立用户信息库,由应用采集用户信息存入云服务中。
人脸活体检测技术在人脸识别过程中判断操作用户是否为真人,有效抵御照片、视频、模具等作弊***,保障业务安全。
百度云网站上[1]描述了下面几种活体检测方法:
人脸识别是人脸检测,人脸对齐,人脸特征提取,人脸分析,人脸比对技术的综合应用。
使用机器学习(实际应用中使用的算法可以不同)进行人脸识别的原理[2,3]简单描述如下:
本文将人脸核身系统的架构分为三种:在线架构、离线架构、混合架构。
在线架构适合网络条件良好、人脸库庞大(万级别以上)、需要跨地域人脸库同步等场景。常用于大规模级别的人脸识别业务。系统架构如图 6所示。
在线架构的人脸核身流程通常为:前端设备根据支持的活体检测手段向后端提交视频(如唇语验证码手段)或图像(静态检测),活体检测通过后,后端将从提交的视频或图像中检测出的人脸图像与后端的身份信息库(底库)中用户人脸特征进行1:1比对,比对结果超过设定阈值则认为核身通过。
在线架构的一种变形模式是前端设备向后端传递的不是原始的图像数据,而是使用人脸特征提取模型计算得到人脸特征数据,这种方式能降低通讯开销和后端的运算负载,但要求前后端使用的计算模型相同,且需要保持模型的同步更新。
离线架构适合于网络条件不稳定、无网、数据安全性要求高、人脸库较小(通常为1万人以下)单台设备的人脸识别场景。常见于人证核验机、人脸门禁/闸机、企业考勤机、自助柜机等。
离线架构中根据是否存贮底库数据分为无底库模式与有底库模式。
无底库模式适用于实时采集底库人脸图像与目标人脸图像进行比对的场景,一个典型的用例是人证核验一体机:该终端包含×××读卡器,可实时读取×××中的身份信息与人脸图片,并包含摄像头实时采集目标人脸图像,与读卡器得到的×××人脸图片进行比对完成认证合一验证的功能。图 7展示了一个人证核验一体机。
办公楼宇/生活小区的人脸门禁/闸机可使用有底库模式的离线架构。在人脸门禁中保存一个允许通过的白名单底库,底库中存储着白名单人员的身份信息与人脸图片(特征)。当目标经过人脸门禁时,人脸门禁在本地的白名单底库中实现1:N的人脸搜索比对。通过离线人脸搜索,完成通行者身份核验,避免网络因素等干扰,确保业务稳定高效运行。
混合结构适合于网络条件较好,人脸库较小(1万以下)但变更频繁的场景,如授权人员变更频繁的商业楼宇人脸门禁,这时人脸门禁可由后端的人员库更新通知,及时更新本地人脸门禁中存储的白名单底库。
这里把混合架构分为几种模式。
这种模式的架构如图 8所示。
这种模式下,前端维护一个白名单底库和系列人脸算法模型,目标人脸的1:N比对在前端完成。后端主要提供算法模型与身份信息库对前端的更新,当后端的算法模型优化演进后,可由后端通知到前端,有前端进行更新;当后端的身份信息库发生更新时,也可以实时通知到前端进行更新,实现实时的人脸核证更新。
这种模式的架构如图 9所示。
这种模式下,前端不再维护白名单底库,在需要进行比对时,实时从后端获取目标图像对应用户的身份信息(人脸图片、特征)实现1:1比对。这种模式需要前端在向后端请求用户身份信息时携带用户标识。
OpenCV(开源计算机视觉库)是在BSD许可下发布的,因此对学术和商业使用都是免费的。它有c++、Python和Java接口,支持Windows、Linux、Mac OS、iOS和Android。OpenCV是为计算效率而设计的,并且非常注重实时应用。用优化的C/ c++编写的库可以利用多核处理。使用OpenCL,它可以利用底层异构计算平台的硬件加速。
从OpenCV2.4开始,加入了新的类FaceRecognizer,可以使用它便捷地进行人脸识别。
其github地址为:https://github.com/opencv
OpenCV目前最新的版本为4.0版本,图 10显示了OpenCV中与人脸有关的类:
为支持web应用,OpenCV.js利用Emscripten将OpenCV函数编译成asm.js或WebAssembly目标,并提供可访问的JS API。OpenCV.js是针对web平台对OpenCV函数选定子集的JavaScript绑定。它使得web前端应用得益于OpenCV强大的多媒体处理功能。
可以看看OpenCV.js能够提供什么功能[6]:
Dlib是一个包含机器学习算法和工具的现代c++工具包,用于在c++中创建复杂的软件来解决现实世界中的问题。。
其github地址为:https://github.com/davisking/dlib
其文档地址为:http://dlib.net
dlib可提供C++和python的调用,其提供的算法库中包括高质量的人脸识别[7]算法。
OpenFace是一个使用python语言和Torch框架开发的基于深度神经网络的开源人脸识别系统。该系统的理论基础基于谷歌的文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》[8]。
其github地址为:https://github.com/cmusatyalab/openface
其文档地址为:http://cmusatyalab.github.io/openface/
其工作流程如下:
类名 | 功能 |
---|---|
openface.AlignDlib | 使用dlib的特征点估计来对齐人脸,面向神经网络输入进行预处理。人脸被调整到相同的大小(如96x96),并进行转换,使特征点(如眼睛和鼻子)出现在每张图像的相同位置。 |
openface.TorchNeuralNet | 使用Torch子流程进行特征提取。 |
openface.data module | 对象包含图像元数据的对象。 |
openface.helper module | 帮助模块。 |
SeetaFace Engine是一个开源的人脸识别引擎,由中科院计算所山世光研究员带领的人脸识别研究组研发,使用C++实现,包含了人脸相关的一整套过程,包括:人脸检测、人脸对齐、人脸识别。
其github地址为:https://github.com/seetaface/SeetaFaceEngine
其开源代码可被编译为3个动态库(FaceDetection.dll,FaceAlignment.dll,Identification.dll)进行调用。
旷世科技提供人脸识别的云服务[9]接口,其API定义如图 12所示:
可以看到提供的服务接口能够实现人脸检测、人脸比对、识别功能,也提供云端人脸库的构建功能。
腾讯云提供人脸识别的云服务[10]接口,其API定义如图 13所示:
可以看到提供的服务接口能够实现人脸检测、人脸对比、验证功能,也提供云端个体信息管理(底库管理)功能。
阿里云提供人脸识别的云服务[11]接口,其API定义如图 13所示:
可以看到阿里云提供的服务接口能够实现人脸检测、人脸比对功能。
百度云提供丰富的人脸识别服务接口[12],如图 15所示。
标签:顺序 图像金字塔 opencv c++编写 10个 skin 基础 com [1]
原文地址:http://blog.51cto.com/solarboy/2328401