大数跨境

开源 UniFace, 一个 API 搞定 15 类人脸任务: 连猜你情绪、看你视线都行

开源 UniFace, 一个 API 搞定 15 类人脸任务: 连猜你情绪、看你视线都行 启示AI科技
2026-10-06
7
导读:你有没有想过,"看一眼你的脸"能榨出多少信息?手机相册能把同一个人的照片归到一起。小区门禁一刷脸就开门。

你有没有想过,"看一眼你的脸"能榨出多少信息?

手机相册能把同一个人的照片归到一起。小区门禁一刷脸就开门。直播间里,你的脸被美颜瞬间"修好"。

这些事背后,都是同一类技术:人脸分析。

过去做出这样的功能,得有一支算法团队,还得有一堆昂贵的模型。现在有个叫 UniFace 的开源项目,把这些能力打包成一个 Python 工具库,装好就能用。

官方的定位是把检测、对齐、关键点、识别、解析、视线、属性和防伪,都放在同一套接口下。

一张脸,15 种"读法"

按官方 README 的说法,UniFace 覆盖 15 类任务。我把它们换成大白话,分成六组:

① 找到脸、量出脸

  • 人脸检测
    :先找出照片里哪儿有脸,相当于给每张脸画个框。
  • 面部关键点
    :在脸上标出几十到几百个点,眼角、嘴角、鼻尖都算,可以做美颜、做表情动画。
  • 人脸质量评估
    :给一张脸的"可用度"打分。糊了、歪了、被挡了,分数就低。

② 把脸"抠"出来

  • 人脸解析
    :把脸分成皮肤、眉毛、嘴唇、头发等 19 个区域,做虚拟试妆用得上。
  • 人像抠图
    :把人从背景里干净地分离出来,视频会议里的虚拟背景就是这个原理。

③ 看你朝哪儿

  • 头部姿态
    :判断你是抬头、低头还是侧脸。
  • 视线估计
    :判断你的眼睛正盯着哪个方向。

④ "读"脸

  • 年龄、性别、种族
  • 情绪
    :开心、生气、惊讶等(AffectNet 的 7 类或 8 类标签)
  • 脸部状态
    :睁眼还是闭眼、戴不戴眼镜或墨镜、戴不戴口罩

⑤ 辨真假

  • 活体检测(防伪)
    :分辨镜头前是真人,还是一张照片、一段翻拍视频。刷脸支付要防被冒用,就靠它。

⑥ 认人,或者藏人

  • 人脸识别
    :判断两张照片是不是同一个人。
  • 人脸跟踪
    :在视频里给同一个人一个固定编号。
  • 向量库检索
    :在成千上万张脸里,快速找出最像的那一个。
  • 人脸匿名化
    :一键把脸打码。

争议在哪:一个工具,两种用法

最让我觉得"微妙"的,是它把两头都做了。

一头,是能识别你是谁、猜你多大、判断你的情绪和种族的能力。这些功能放在监控场景里,很容易越界。学界对"靠脸判断情绪"的准确性也一直有争议,毕竟你脸上的表情,不一定等于你心里的感受。

另一头,是同一个项目里专门有一个"隐私"模块,官方文档写得很直白:人脸匿名化通过模糊或遮盖图片和视频里的脸来保护隐私,并且提供五种打码方式。

也就是说,"认出你"和"帮你藏起来",用的是同一套底层技术。

技术本身没有立场,用它的人才有。它把门槛从"需要一个团队"降到了"会复制粘贴代码",这对做正经产品的人是好消息,对想乱来的人,门槛也一起降低了。

所以我的建议是,以后看到"刷脸",不妨多问一句:这张脸被拿去做了什么?存在哪里?谁能查?

顺带提醒一个商用的坑。UniFace 本身是 MIT 协议,但部分预训练权重的协议并不一样,商用前需要先核对许可。README 和授权页里点名过 YOLOv5-Face、YOLOv8-Face 的权重是 GPL-3.0,FairFace 的权重是 CC BY 4.0。代码免费,不等于模型也能随便商用。

 技术爱好者专区

1. 安装

...Python
pip install "uniface[cpu]"   # CPU 和 Apple Silicon
pip install "uniface[gpu]"   # NVIDIA CUDA
按官方说明,它支持 CPU、Apple Silicon 和 CUDA,权重在首次使用时自动下载,并用 SHA-256 校验。

2. "一个 API"到底怎么用

核心是 FaceAnalyzer。官方说明:它一次调用就能完成检测、对齐和识别,属性类模型需要你按需加进去。

...Python
import cv2
from uniface import FaceAnalyzer, FairFace

analyzer = FaceAnalyzer(predictors=[FairFace()])

for face in analyzer.analyze(cv2.imread("photo.jpg")):
    print(face.bbox, face.sex, face.age_group, face.embedding.shape)
设计思路很清楚:
  • bbox(人脸框)、confidence(置信度)、landmarks(关键点)、embedding(特征向量)始终有值。
  • 年龄、性别、种族、情绪、质量等属性,在你没传入对应 predictor 之前保持为 None。

这种"按需加载"的设计,好处是你只为用到的功能付算力。

3. 模型底座:每个任务都能换模型

4. 隐私模块:三行代码给人脸打码

这是最适合新手上手的功能。以下代码来自官方文档:

...Python
from uniface.detection import RetinaFace
from uniface.privacy import BlurFace
import cv2

detector = RetinaFace()
blurrer = BlurFace(method='gaussian', blur_strength=5.0)

image = cv2.imread("photo.jpg")
faces = detector.detect(image)
anonymized = blurrer.anonymize(image, faces)

cv2.imwrite("anonymized.jpg", anonymized)

官方提供五种打码方式:

方法

效果

pixelate

马赛克,新闻里最常见

gaussian

平滑模糊

blackout

纯色遮盖,隐私性最强

elliptical

椭圆形模糊,更贴合脸型

median

保边模糊,带点艺术效果

5. 实时摄像头打码

...Python
import cv2
from uniface.detection import RetinaFace
from uniface.privacy import BlurFace

detector = RetinaFace()
blurrer = BlurFace(method='pixelate')
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    faces = detector.detect(frame)
    frame = blurrer.anonymize(frame, faces, inplace=True)

    cv2.imshow('Anonymized', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

inplace=True 会直接修改原图,更快也更省内存。做直播或监控流处理时值得开。

6. 进阶玩法:只给"别人"打码

文档里还有一个很实用的思路:先用识别模型提取每张脸的特征向量,跟白名单里的人比对相似度,匹配上的不打码,其余的全部打码。适合"视频里只保留自己出镜"这类场景。

核心逻辑就是余弦相似度加阈值,官方示例的默认阈值是 0.6。

7. 值得关注的工程细节

  • 模型可替换
    :同一任务有多个模型可选,可以在速度和精度之间自己取舍。
  • 全平台加速
    :支持 CPU、Apple Silicon、NVIDIA CUDA。
  • 自带向量检索
    :内置基于 FAISS 的向量库,做"以脸搜脸"不用另外搭。
  • 有完整文档
    :含 Notebook、教程、模型库和阈值校准指南。

【声明】内容源于网络
0
0
启示AI科技
1234
内容 95
粉丝 0
启示AI科技 1234
总阅读1.3k
粉丝0
内容95