☰
UniFace活体检测实战:MiniFASNet如何识破照片、屏幕与面具攻击
2026/10/9 7:41:06 网站建设 项目流程

UniFace活体检测实战:MiniFASNet如何识破照片、屏幕与面具攻击

【免费下载链接】unifaceUniFace: A Unified Face Analysis Library for Python | Detection, alignment, landmarks, face-mesh, recognition, parsing, gaze, attributes and anti-spoofing under one API.项目地址: https://gitcode.com/gh_mirrors/un/uniface

UniFace是一款 Python 统一人脸分析库,其中的MiniFASNet 活体检测(人脸反欺骗攻击)模块可以用 1.2MB 的轻量模型,快速判断摄像头前的是真人,还是打印照片、屏幕重放或面具伪装。本文将从零讲透:如何安装、三步跑通第一次活体检测、如何设置置信度阈值,以及它能防御哪些攻击。

上图是 UniFace 反欺骗模块的实测效果:同一套现场,真人被标记为 Real(置信度 1.00),而打印照片和平板屏幕重放分别被识破为 Fake(0.66 / 0.99)。

什么是人脸活体检测?

活体检测(Liveness Detection / Face Anti-Spoofing)回答的问题只有一个:摄像头拍到的是"一张脸",还是"一张脸的照片"?

常见的攻击手段包括:

攻击方式说明
📷 打印照片把真人照片打印出来举到摄像头前
📱 屏幕重放用平板/手机播放人脸照片或视频
🎬 视频回放播放录制的活体视频
🎭 纸面具 / 3D面具用纸质或高精度 3D 面具伪装

UniFace 的 MiniFASNet 实现 基于 ONNX Runtime 推理,模型判断的是呈现方式(presentation)而非身份——它不关心脸是谁,只关心这张脸是"活的"还是被"再现"的。

快速安装与第一次活体检测

安装只需一条命令(首次运行时会自动下载 MiniFASNet 权重并校验 SHA256):

pip install "uniface[cpu]" # NVIDIA 显卡可改装 uniface[gpu]

跑通第一次活体检测只需三步:人脸检测 → 活体判断 → 读取结果 👇

import cv2 from uniface.detection import RetinaFace from uniface.spoofing import MiniFASNet detector = RetinaFace() # 第1步:检测人脸位置 spoofer = MiniFASNet() # 第2步:初始化活体检测模型(默认 V2) image = cv2.imread("photo.jpg") faces = detector.detect(image) for face in faces: # 第3步:逐个判断真人还是伪造 result = spoofer.predict(image, face.bbox) label = "Real" if result.is_real else "Fake" print(f"{label}: {result.confidence:.1%}")

返回值是 SpoofingResult 数据类,只有两个字段:

  • result.is_real:True表示真人,False表示伪造
  • result.confidence:0.0 ~ 1.0 的置信度

💡 注意:MiniFASNet 需要人脸检测框作为输入(face.bbox),所以实践中总是和检测器组合使用,这也正是 UniFace "统一 API" 的价值所在——检测、对齐、活体、识别全部一个库搞定。

MiniFASNet 如何识破屏幕与照片攻击?

模型的核心逻辑藏在 preprocess 阶段:它不是直接用检测框裁脸,而是以人脸为中心向外扩展裁剪(V2 版本 scale=2.7,V1SE 版本 scale=4.0),把脸部周围的皮肤纹理、纸张边缘、屏幕反光等上下文信息一起送进网络——这些正是照片和屏幕重放"露馅"的地方。

模型提供两个变体(均约 1.2 MB,权重信息见 constants.py):

变体裁剪缩放说明
V1SE4.0带挤压-激励模块的早期版本
V2(默认推荐)2.7改进版,开箱即用
from uniface.spoofing import MiniFASNet from uniface.constants import MiniFASNetWeights spoofer = MiniFASNet(model_name=MiniFASNetWeights.V1SE) # 切换变体

上面三张分别对应真人、打印照片和屏幕重放场景,正是 demo 对比图 中三个画面的原始素材。

实战技巧:如何设置置信度阈值?

默认情况下is_real由模型 argmax 决定。安全要求更高时,建议叠加置信度阈值,把"拿不准"的情况单独拦下来:

HIGH_THRESHOLD = 0.7 if result.is_real and result.confidence > HIGH_THRESHOLD: print("Real (high confidence)") else: print("Suspicious") # 可疑人脸,建议拒绝或二次验证

更进一步,多帧验证能显著提升安全性:连续采集 5 帧,其中至少 3 帧判定为真人,才放行(完整示例见 docs/modules/spoofing.md)。

它能防御哪些攻击?

攻击类型防御效果
打印照片✅ 可检测
屏幕重放✅ 可检测
视频回放✅ 可检测
纸面具✅ 可检测
高精度 3D 面具⚠️ 效果有限

⚠️使用限制:高性能 3D 面具可能无法被检出;光照和图像质量会影响准确率;高安全场景(银行、门禁)请务必结合多帧验证或其他活体手段。

CLI 一行命令:图片、视频、摄像头全支持

不想写代码?仓库自带的命令行工具 tools/spoofing.py 支持三种输入源,结果直接画框输出:

python tools/spoofing.py --source photo.jpg # 单张图片 python tools/spoofing.py --source video.mp4 # 视频文件 python tools/spoofing.py --source 0 # 实时摄像头

绿色框 = Real,红色框 = Fake,旁边附带置信度,输出自动保存到outputs/目录。

小结

UniFace 的活体检测把"人脸真伪"这件高安全级问题压缩成了极简体验:

  1. 轻量:1.2 MB 的 ONNX 模型,CPU 即可实时运行
  2. 统一:与 RetinaFace 等检测器共用同一 API,几行代码打通"检测 + 活体"流水线
  3. 实战:照片、屏幕、视频回放、纸面具均能识别,配合阈值与多帧验证可支撑门禁级应用

源码与接口细节可进一步阅读 uniface/spoofing/ 与官方文档 docs/modules/spoofing.md,更多模块(识别、属性、质量评估)都能在同一库中组合使用。

【免费下载链接】unifaceUniFace: A Unified Face Analysis Library for Python | Detection, alignment, landmarks, face-mesh, recognition, parsing, gaze, attributes and anti-spoofing under one API.项目地址: https://gitcode.com/gh_mirrors/un/uniface

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询