本地部署 InsightFace:3行代码跑通人脸检测与识别
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
想让两张照片做身份比对、又想让一批图片自动框出人脸,同时数据不出本机?InsightFace 可以做到:装好 Python 库后,本地人脸检测、人脸识别、关键点对齐和属性分析全部在 CPU 上跑通,预训练模型包自动下载,无需训练、无需准备数据。
能力全景:一次调用串起检测、识别、对齐、属性
InsightFace 的完整链路可以拆成四级:检测(SCRFD 单阶段检测器)先找出图中所有人脸的边界框与置信度;识别(ArcFace 系列)把每张对齐后的人脸裁剪图变成 512 维 embedding(可理解为这张脸的“数字指纹”);对齐模块输出 5 点、106 点与 3D 68 点关键点,供裁剪、3D 重建使用;属性模块给出性别与年龄。这四个模型不用你手动串联,一个FaceAnalysis对象一次调用全部完成,一张图进去,出来的就是结构化的人脸对象列表,直接供下游做比对、聚类、打码或重建。
下图是仓库自带的示例图,6 个人,正好可以验证多人脸批量检测:
CPU 环境 3 步安装并跑通首次人脸分析
环境要求只有 Python 3.x。0.2 版本起的 Python 库改用 onnxruntime 作推理后端:只用 CPU 就装onnxruntime;要 GPU 需自行安装onnxruntime-gpu。仓库里的训练模块基于 PyTorch 1.6+ / MXNet 1.6~1.8,纯推理时完全不涉及。
git clone https://gitcode.com/GitHub_Trending/in/insightface # 可选:浏览示例与训练代码 pip install onnxruntime # CPU 后端;GPU 请改装 onnxruntime-gpu pip install -U insightface接着跑最小脚本,示例图用仓库自带的那张六人群像:
import cv2 from insightface.app import FaceAnalysis app = FaceAnalysis(name='buffalo_l'); app.prepare(ctx_id=-1) # -1 用 CPU faces = app.get(cv2.imread('python-package/insightface/data/images/t1.jpg'))首次运行的预期:初始化时会自动把约 326MB 的 buffalo_l 模型包下载到~/.insightface/models/,网络慢的话首次会多等一阵。返回的faces是 Face 对象列表,每个对象含边界框、关键点、性别年龄和用于比对的 512 维embedding。CPU/GPU 切换只改一处:ctx_id=-1走 CPU,ctx_id=0走 GPU(并传providers=['CUDAExecutionProvider'])。
核心机制拆解:一张图如何变成结构化人脸数据
人脸检测:边界框与 5 点关键点从哪来
输入是一张 BGR 图像,输出是若干边界框加置信度,以及每张脸 5 点关键点(用于眼睛、嘴部定位)。默认检测器是 SCRFD——ICLR 2022 的单阶段检测器,靠“样本与计算再分配”的思路在精度与 FLOPs 之间做权衡,提供 0.5GF 到 34GF 共五档规格。可调的关键参数是检测输入尺寸:v1.0 起prepare()默认走 Auto 模式,用 128×128 与 640×640 两档各跑一遍再统一 NMS 合并,专门防小脸漏检 💡 只追求速度时再固定 input_size,省一次推理。
人脸识别:512 维 embedding 是什么、怎么比
输入是一张单人的人脸裁剪图(库内会依据关键点自动对齐),输出 512 维向量:同一人跨照片距离近,不同人距离远,两个向量的余弦相似度就是身份相似度。1:1 比对只需点积归一化后与阈值比较,仓库示例 examples/face_recognition/insightface_app.py 用的默认值是 0.65:
import numpy as np sim = np.dot(emb1, emb2) / (np.linalg.norm(emb1) * np.linalg.norm(emb2))下图是一张典型 1:1 比对输入:单人、正脸、像素充足,检出后直接取face.embedding即可参与计算。
关键点对齐与属性:106 点、3D 68 点、性别年龄
对齐模型走坐标回归路线:输入宽松裁剪的人脸,直接输出 106 个 2D 点与 68 个 3D 点,可喂给裁剪、3D 重建或表情分析管线。属性模型(MobileNet-0.25,仅 0.3M 参数)输出性别与年龄,包含在每个 buffalo 模型包里。如果你只要检测和识别,可以用allowed_modules关掉对齐与属性,或直接换 16MB 的 buffalo_sc 跳过这两类模型。
模型包怎么选:精度与速度分档看数据
检测侧是官方 WIDERFace 基准(VGA 分辨率、单尺度测试),出处见 detection/scrfd/README.md 与 model_zoo/README.md:
| SCRFD 规格 | Easy (mAP) | Medium (mAP) | Hard (mAP) | 参数量 (M) | 推理 (ms) |
|---|---|---|---|---|---|
| 0.5GF | 90.57 | 88.12 | 68.51 | 0.57 | 3.6 |
| 1GF | 92.38 | 90.57 | 74.80 | 0.64 | 4.1 |
| 2.5GF | 93.78 | 92.16 | 77.87 | 0.67 | 4.2 |
| 10GF | 95.16 | 93.87 | 83.05 | 3.86 | 4.9 |
| 34GF | 96.06 | 94.92 | 85.29 | 9.80 | 11.7 |
CPU 上更有参考意义的是官方给出的单线程数据:SCRFD-0.5GF 在 x86 单核跑 640×480 输入约 28.3ms,降到 320×240 只要 11.4ms,端侧设备实时跑是可行的。
识别侧按模型包分档,出处见 python-package/README.md:
| 模型包 | 体积 | MR-ALL | LFW | IJB-C(E4) |
|---|---|---|---|---|
| buffalo_l(默认) | 326MB | 91.25 | 99.83 | 97.25 |
| buffalo_s | 159MB | 71.87 | 99.70 | 95.02 |
| buffalo_sc | 16MB | 71.87 | 99.70 | 95.02 |
buffalo_sc 的识别精度与 buffalo_s 相同,只是不带对齐和属性模型;buffalo_m 体积居中、精度与 buffalo_l 持平。
决策可以分三档:做 Demo 或内部工具直接用默认buffalo_l,精度和下载体积平衡最好;端侧或低配设备选buffalo_s,不要对齐和属性就buffalo_sc;追求更高识别上限,可把包内 ONNX 换成 SCRFD-2.5GF/34GF 检测或 ResNet100 识别模型,清单在 model_zoo/README.md。
上线前必须确认的 5 个点
- 后端别装错。
onnxruntime只含 CPU 推理,想用 CUDA 必须安装onnxruntime-gpu,并在FaceAnalysis里传providers=['CUDAExecutionProvider'],否则白有显卡。 - 别把 0.65 当绝对阈值。它只是示例默认值:调低会增加误认,调高会增加漏认,请用业务里的真实坏例来回调。
- 多人脸图要显式选人。一图多人时必须自己决定比对哪张脸,示例默认取第一张检出结果,实际业务里很容易拿错对象。
- 小脸漏检看检测尺寸配置。默认 Auto 双尺度检测最稳;若改了固定 input_size 换速度,先单独评估小脸召回。
- 注意 License 边界。代码是 MIT 协议、商用不受限,但预训练模型(buffalo 系列等)仅限非商业研究,商用需另行获取授权,详见 README.md。
仓库里值得深入的目录
- detection/scrfd/:SCRFD 完整训练管线、NAS 架构搜索与 WIDERFace 评测脚本
- recognition/:ArcFace 的 PyTorch/MXNet/PaddlePaddle/OneFlow 多实现,以及 Partial FC
- examples/in_swapper/:单行人脸交换示例,基于同一套检测与对齐管线
- server/README.md:容器化 Web UI + REST API 的自建人脸搜索服务
- reconstruction/:单目 3D 人脸重建、视线估计等进阶方向
- python-package/README.md:调用自定义 ONNX 模型、手动下载模型包的完整说明
下一步可以做什么
本地比对 Demo 跑通后,自然的延伸是把脚本扩成服务:仓库内置的 InsightFace Server 提供容器化 Web UI 与 snake_case REST API,单机 CPU 或 GPU 即可运行检测、1:1/1:N 比对与人员检索,可以顺着 server/ 目录继续看。
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考