Android 平台的人脸识别技术已经发展得非常成熟,主要分为两大类:

- 系统级的人脸解锁:这是最广为人知的应用,用于解锁手机、授权支付和应用。
- 开发者 API:允许开发者在自己的 App 中集成人脸识别功能,用于身份验证、美颜、滤镜、活体检测等。
下面我将从这两个方面,结合技术原理、实现方式和最佳实践,为你进行详细的介绍。
系统级的人脸识别 (人脸解锁)
这是 Android 系统提供的一个核心安全功能,用户在设置中开启后,即可通过前置摄像头快速、安全地解锁手机。
技术演进与安全性
Android 的人脸解锁技术经历了几个重要的安全等级提升:
-
早期版本 (Android 10 及之前):
(图片来源网络,侵删)- 技术:主要依赖 2D 图像比对,即捕捉你的人脸照片,并与存储的模板进行简单的相似度匹配。
- 安全性:非常低,使用一张清晰的照片、视频甚至屏幕截图都能轻易骗过系统,这只能算作“人脸检测”,而非“人脸识别”。
-
安全级别 1 (Safety Level 1) - Android 10/11:
- 技术:引入了“红外人脸解锁”,通过红外摄像头投射一个不可见的红外点阵图案,再由红外传感器接收这个图案的反射。
- 安全性:中等,由于使用红外光,它可以在黑暗中工作,活体检测能力有所增强,能区分真实人脸和照片/面具,但仍然存在被高精度 3D 打印面具等高级手段破解的风险,三星的“Secure Face”就是这个级别。
-
安全级别 2 (Safety Level 2) - Android 12 及以上:
- 技术:结构光 或 飞行时间 技术,这是目前安卓阵营的最高安全级别。
- 结构光:通过投射一个已知的、编码的近红外光栅到脸上,通过分析形变来构建一个精确的 3D 人脸模型。
- ToF (Time-of-Flight):通过测量红外光从发射到返回的时间来计算深度,从而生成一个精确的 3D 深度图。
- 安全性:极高,系统验证的是你独一无二、立体的 3D 人脸模型,而不是一个 2D 平面图像,即使是照片、视频或高质量的 3D 打印面具,因为缺少真实的深度信息,也无法通过验证,苹果的 FaceID 就是结构光的典范,而谷歌 Pixel 的 Face Unlock 和部分高端安卓手机(如小米、OPPO)则采用 ToF 技术。
- 技术:结构光 或 飞行时间 技术,这是目前安卓阵营的最高安全级别。
如何在设备上使用
- 进入设置:
设置>安全与隐私>屏幕解锁方式。 - 选择人脸解锁:根据你的设备,可能名为“人脸解锁”、“Face Unlock”等。
- 设置流程:系统会引导你多次转动头部,以从不同角度捕捉人脸数据,构建一个 3D 模板。
- 完成设置:设置成功后,点亮屏幕时,手机会自动扫描你的人脸并解锁。
关键点
- 安全级别:在设置时,系统会明确告知你当前人脸解锁的安全级别(如“使用屏幕解锁PIN/密码/图案”或“使用生物识别安全设置”)。安全级别 2 的强度等同于指纹和虹膜,可以用于授权支付、应用登录等高安全场景。
- 依赖硬件:高安全级别的人脸识别必须依赖特定的硬件(红外摄像头、点阵投影仪、深度传感器等),普通的前置摄像头只能实现安全级别较低或无安全级别的人脸解锁。
开发者 API (人脸识别集成)
如果你想在 App 中实现人脸识别功能,Android 提供了强大的 API 供你调用,核心 API 是 BiometricPrompt。
核心组件:BiometricPrompt
BiometricPrompt 是 Android 10 (API 29) 引入的统一 API,用于处理所有生物识别认证,包括指纹、人脸识别和虹膜,它为开发者提供了一个标准化的、一致的界面,无需关心底层是哪种生物识别技术。

主要优点:
- 统一性:一套代码,自动适配设备上可用的生物识别方式(优先显示用户设置的)。
- 安全性:系统处理了所有的加密和密钥管理,开发者只需处理认证结果。
- 用户体验:提供了标准的、系统级的 UI(提示框、动画、错误提示),与应用的 Material Design 风格完美融合。
- 灵活性:可以自定义提示文本、标题和图标。
实现步骤 (代码示例)
要在你的 App 中集成 BiometricPrompt,基本步骤如下:
第一步:添加权限
在 AndroidManifest.xml 中添加使用生物识别的权限:
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
第二步:创建 BiometricPrompt 的三个回调对象
Executor:用于执行回调的线程池。BiometricPrompt.AuthenticationCallback:处理认证成功、失败和错误等事件。BiometricPrompt.CryptoObject:(可选,但强烈推荐)用于在认证成功后自动解密数据或签名,这是实现“生物识别 + 密钥”安全模式的关键。
第三步:构建并显示 BiometricPrompt
// 1. 创建 Executor
Executor executor = ContextCompat.getMainExecutor(this);
// 2. 创建 AuthenticationCallback
BiometricPrompt.AuthenticationCallback callback = new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
// 认证成功!
// 如果使用了 CryptoObject,可以在这里获取解密后的数据或签名
Log.d("Biometric", "认证成功!");
// 更新 UI 或执行后续操作
}
@Override
public void onAuthenticationFailed() {
// 认证失败,但用户可以重试
Log.d("Biometric", "认证失败");
}
@Override
public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
// 发生错误,如传感器不可用、用户点击取消等
// errorCode 和 errString 提供了详细信息
Log.d("Biometric", "认证错误: " + errString);
}
};
// 3. (可选)创建 CryptoObject 以实现更高级的安全
// Cipher cipher = ... // 初始化一个 Cipher
// BiometricPrompt.CryptoObject cryptoObject = new BiometricPrompt.CryptoObject(cipher);
// 4. 构建 BiometricPrompt 实例
BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
.setTitle("人脸识别验证")
.setSubtitle("请看向摄像头以验证您的身份")
.setDescription("此操作将修改您的个人资料")
.setNegativeButtonText("使用密码")
.build();
// 5. 显示认证对话框
// biometricPrompt.authenticate(cryptoObject, executor, callback);
// 如果不使用 CryptoObject:
biometricPrompt.authenticate(executor, callback);
关键考量因素
- 向后兼容:
BiometricPrompt仅支持 Android 10+,如果你的应用需要兼容更低版本,需要使用旧的FingerprintManagerAPI,并进行版本判断。 - CryptoObject (加密对象):这是专业级安全应用的核心,认证过程会将用户的人脸数据与一个硬件安全模块 中的密钥进行绑定,认证成功后,系统会自动返回这个密钥,你可以用它来解密存储在本地数据库中的敏感信息(如密码、支付令牌等),这样,即使用户手机被 Root,攻击者也无法直接窃取你的加密数据,因为他们没有通过生物识别认证。
- 活体检测:
BiometricPrompt的底层由系统实现,其活体检测能力完全依赖于设备硬件,开发者无法直接控制活体检测的算法,但可以信任系统提供的结果,高安全级别的设备(安全级别 2)提供更强的活体检测。 - 用户引导:首次使用时,系统会弹出一个引导页面,告知用户生物识别数据将被安全存储,开发者无需自己实现这个逻辑。
前沿技术与第三方 SDK
除了系统级的 API,还有一些更高级的和人脸相关的技术,通常由第三方 SDK 提供:
- 人脸检测:比识别更基础,只判断画面中是否有人脸,并定位其位置(人脸框),Google 的 ML Kit 提供了非常强大且易于使用的人脸检测 API。
- 人脸关键点检测:在检测到人脸的基础上,进一步定位眼睛、鼻子、嘴巴、眉毛等关键点的位置,常用于美颜、AR 滤镜。
- 人脸追踪:在视频流中持续跟踪同一个人脸的位置和姿态。
- 活体检测:更高级的活体检测,如要求用户做眨眼、张嘴、左右转头等动作,这对于金融、支付等高安全场景至关重要,许多第三方公司(如旷视、商汤、ArcSoft)提供专业的活体检测 SDK。
- 人脸属性分析:分析人脸的性别、年龄、表情等。
| 特性 | 系统级人脸解锁 | 开发者 API (BiometricPrompt) | 第三方 SDK (如 ML Kit) |
|---|---|---|---|
| 主要用途 | 解锁手机、授权支付/应用 | App 内身份验证、授权登录 | 人脸检测、美颜、AR、属性分析 |
| 技术核心 | 2D/3D 图像比对、结构光/ToF | 系统生物识别框架 | 计算机视觉算法 |
| 安全性 | 依赖设备硬件级别 (安全级别 1/2) | 高 (与系统指纹同级,可结合 CryptoObject) | 中等 (主要用于功能实现,安全需自行设计) |
| 实现方式 | 系统设置中开启 | 调用 BiometricPrompt API |
集成第三方库 |
| 适用场景 | 所有安卓用户 | 需要生物识别验证的 App | 需要人脸分析功能的 App |
对于大多数开发者来说,如果你想在 App 中实现安全的身份验证,BiometricPrompt 是首选,它简单、安全且用户体验好,如果你需要实现更复杂的人脸分析功能(如美颜、滤镜),则可以集成 Google ML Kit 或其他专业的第三方 SDK。
