人脸识别开发概述
简介
我们提供了多款支持人脸识别的设备,人脸识别开发相对有一定复杂度,所以专门新建一个主题来仔细阐述人脸识别相关概念和流程,并提供多个示例从简单到复杂来指导用户开发人脸识别相关应用。
基本概念
- RGB 及摄像头: 指的是标准的彩色摄像头,能捕捉可见光谱(红、绿、蓝)范围内的图像。它用于获取人脸的彩色照片,是我们日常生活中最常见的摄像头类型。用户可以在屏幕上看到自己的动态人脸,就像镜子一样。
- NIR 及摄像头: NIR (Near-Infrared) 指的是近红外摄像头。它能捕捉人眼看不到的近红外光图像。NIR 摄像头在暗光或无光环境下表现优异,并且能够抵抗照片、视频等欺骗手段,是活体检测的关键技术之一。
- IR 补光灯: 指的是红外补光灯 (Infrared Fill Light)。它会发出人眼不可见的红外光,用于在黑暗环境中照亮人脸,以便 NIR 摄像头能够清晰地捕捉到人脸图像。
- 特征值: 也称为面部特征向量 (Facial Feature Vector)。这是一个由一串数字组成的向量,它从人脸图像中提取出能够唯一标识该个体的关键信息(如眼睛间距、鼻梁宽度等)。特征值是人脸比对的核心依据。我们的设备可以不保存照片,只保存照片对应 的特征值就可以实现人脸识别,这个值通常比图片小很多,而且是固定长度,我们大部分人脸特征值长度是 1024 字节。
- 人脸特征库: 一个专门用于存储已注册用户人脸特征值的数据库。当进行人脸识别时,系统会将实时捕捉到的人脸特征值与库中的数据进行比对。
- 活体检测: 用于判断摄像头前的人脸是否为真实、有生命的个体,而不是一张照片、一段视频或者一个面具。这是防止恶意攻击、确保系统安全性的重要环节。通常需要结合 RGB 和 NIR 摄像头来实现高精度的活体检测。
- 人脸检测: 在一张图像或视频流中定位并框选出所有人脸的位置和大小。这是进行后续人脸识别的第一步。
- 人脸检测阈值: 这是一个置信度分数。系统在检测到疑似人脸的区域后,会给出一个分数。只有当分数高于设定的阈值时,系统才会确认这是一个有效的人脸。适当调整此阈值可以平衡检测的准确率和召回率。这个值通常我们一般不暴露给开发者,我们会写死一个优化好的值。
- 人脸比对: 将两个不同的人脸特征值进行比较,计算它们之间的相似度分数。这分为两种:
- 1:1 比对: 判断两张脸是否为同一个人,常用于身份验证(如人脸登录)。
- 1:N 比对: 将一张脸与人脸特征库中的 N 个特征值进行比对,找出最匹配的一个,常用于身份识别(如门禁系统)。
- 人脸比对阈值: 这是一个相似度分数。在 1:1 或 1:N 比对后,只有当相似度分数高于设定的阈值时,系统才会判定为匹配成功。这是决定识别精度的关键参数。
- 人脸识别: 这是一个完整的流程,包括从视频流中实时进行人脸检测、活体检测、提取特征值,并与人脸特征库进行比对,最终识别出人员身份的过程。
- 人脸注册: 也叫人脸录入。指首次将用户的人脸信息采集并存入人脸特征库的过程。通常需要用户在摄像头前配合做一些动作,以确保采集到高质量的人脸图像,并提取出稳定可靠的特征值。也可以通过人脸照片来注册。
基本流程
一个完整的人脸识别应用通常包含三个核心流程:人脸检测、人脸注册与人脸识别。
1. 人脸检测流程
- 采集图像: 摄像头(RGB/NIR)开始采集视频流。
- 人脸检测: 从视频流中检测到稳定、清晰的人脸,返回人脸在屏幕上的坐标值。
- 人脸显示: 开发者根据坐标值在屏幕上绘制人脸框,当人脸移动时,人脸框也随之移动。
2. 人脸注册流程
- 触发注册: 应用启动用户注册流程。
- 采集图像: 摄像头(RGB/NIR)开始采集视频流。
- 人脸检测: 从视频流中检测到稳定、清晰的人脸。
- 质量判断: 评估人脸图像的质量(如光照、姿态、清晰度)。
- 提取特征: 从高质量的人脸图像中提取特征值。
- 保存入库: 将用户的身份信息(一般是用户的 ID)与提取的特征值一起存入人脸特征库。
照片注册
照片注册流程更简单,只需要第 5 步和第 6 步。开发者通过网络等方式将照片下发到设备,设备直接从照片中提取特征值并保存入库,之后原始照片即可删除。
3. 人脸识别流程
- 启动识别: 应用开始进行人脸识别。
- 采集图像: 摄像头(RGB/NIR)实时捕捉视频流。
- 人脸检测: 从视频流中检测到人脸。
- 活体检测: 判断检测到的人脸是否为真人,防止照片、视频等攻击。
- 提取特征: 如果活体检测通过,则提取该人脸的实时特征值。
- 特征比对: 将实时特征值与人脸特征库中的数据进行 1:N 比对。
- 输出结果: 如果比对的相似度分数超过预设阈值,则识别成功,返回对应的人员信息(一般是人员的 ID);否则,识别失败。
基本组件
DejaOS 人脸识别组件是 dxFacial,它替代了早期的 dxFace 和 dxCapture 组件。dxFacial 封装了复杂的底层逻辑,提供了简化的 API 方便开发者使用。其核心功能如下: