InsightFace:三行代码跑通本地人脸检测与比对,新手完整指南
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
InsightFace 是开源的 2D/3D 人脸分析工具箱,把人脸检测、人脸识别、关键点对齐和属性分析整合在一个 Python 包里。本文从零装环境,跑通本地人脸比对 Demo,预训练模型自动下载、数据不离开本机。读完你能独立完成检测绘制、1:1 身份比对和模型选型。
先跑起来:装完就出第一次人脸分析 🚀
环境要求很简单:Python 3.x 即可。从 0.2 版本起,Python 库改用 onnxruntime 做推理后端,只跑 CPU 装onnxruntime就行,需要 GPU 再自行安装onnxruntime-gpu。
pip install -U insightface然后是最小脚本,一张图(可用仓库示例图python-package/insightface/data/images/t1.jpg):
import cv2 from insightface.app import FaceAnalysis app = FaceAnalysis(name='buffalo_l') app.prepare(ctx_id=-1) # -1 表示用 CPU faces = app.get(cv2.imread('t1.jpg'))首次运行会把 buffalo_l 模型包(约 326MB)自动拉到~/.insightface/models/。返回值是 Face 对象列表,每份里除了边界框、关键点、性别年龄,还带一个 512 维 embedding 向量——可以理解成这张脸唯一的"身份条码",后面比对全靠它。
它解决哪两类人脸问题
判断两张照片是否同一人:相册整理、身份核验、照片查重,这类需求的核心是"比对"。把两张图各自检出的人脸取出 embedding 算余弦相似度,超过阈值就视为同一人。全程本机推理,图片不出设备,隐私敏感场景也能放心用。
批量框出图里所有人脸:一张图几十上百张脸时,app.get会一次返回全部检测结果,每张脸附边界框和关键点坐标。拿到这些坐标后,裁剪、打码、做 3D 重建等下游动作直接对接,不用再写定位逻辑。
检测与比对实战 🎯
检测 + 绘制:app.get(img)拿到人脸列表后,把它和原图一起传给app.draw_on(img, faces),检测框、关键点和属性文字就画好了,再用cv2.imwrite存盘即可。
1:1 比对:分别取两张照片的face.embedding,算余弦相似度再和阈值比较,就能回答"是不是同一个人"。仓库示例 examples/face_recognition/insightface_app.py 默认阈值取 0.65,多图时自己选定要比的那张脸(示例取第一张检出的人脸)。这个 0.65 只是起步值,实际业务请用自己的真实样本来回调。
模型包怎么选:精度与速度的取舍
一句话结论:默认用buffalo_l;端侧或低配设备选buffalo_s;只要检测识别、不关心对齐和属性的话,16MB 的buffalo_sc最省。
检测侧是 SCRFD 系列(高精度轻量级检测器),mAP 在 VGA(640×480)单尺度测得,数据出自 detection/scrfd/README.md:
| 模型 | Easy (mAP) | Medium (mAP) | Hard (mAP) | 参数量 (M) | 推理耗时 (ms) |
|---|---|---|---|---|---|
| SCRFD-0.5GF | 90.57 | 88.12 | 68.51 | 0.57 | 3.6 |
| SCRFD-2.5GF | 93.78 | 92.16 | 77.87 | 0.67 | 4.2 |
| SCRFD-10GF | 95.16 | 93.87 | 83.05 | 3.86 | 4.9 |
| SCRFD-34GF | 96.06 | 94.92 | 85.29 | 9.80 | 11.7 |
趋势很清楚:参数从 0.57M 涨到 9.80M,Hard mAP 只从 68.51 提到 85.29,而耗时接近 3 倍——精度收益在 2.5GF→34GF 这段明显放缓,多数场景 2.5GF/10GF 已经够用。识别侧对应看整体包:buffalo_l(SCRFD-10GF + ResNet50@WebFace600K)在 MR-ALL 得 91.25,LFW 99.83、IJB-C(E4) 97.25;buffalo_s(SCRFD-500MF + MobileFaceNet)MR-ALL 71.87,适合算力受限的场合。更多规格见 model_zoo/README.md。
5 个高频问题答疑
模型包到底选哪个?追求精度就用默认的buffalo_l;跑在手机、嵌入式等端侧设备上选buffalo_s;只检测识别、不要对齐和属性,16MB 的buffalo_sc体积最小,详见 model_zoo/README.md。
小脸经常漏检怎么办?v1.0 起prepare()默认用 128×128 和 640×640 两档尺寸分别检测、再统一 NMS 合并,小脸召回明显更好;只有极致追求速度时才固定 input_size。
GPU 后端为什么跑不起来?onnxruntime只含 CPU 推理,要跑 CUDA 必须单独装onnxruntime-gpu,并在FaceAnalysis里显式指定providers=['CUDAExecutionProvider'],两者缺一不可。
比对阈值设多少合适?0.65 只是示例默认值:调低会增加误认,调高会增加漏认,没有通用最优解,建议收集业务里的真实坏例来回调。
商用会不会踩 License 红线?代码本身是 MIT 协议,但附带的预训练模型(buffalo 系列等)仅限非商业研究用途,商用需另行获取授权,README.md 中写得很明确,选型前先看这条。
继续深入 📚
- 项目总览与模块索引:README.md
- Python 库安装、模型包列表、调用自定义 ONNX:python-package/README.md
- SCRFD 检测训练与 WIDERFace 评测代码:detection/scrfd/
- ArcFace 识别训练,PyTorch/MXNet/Paddle 多实现与 Partial FC:recognition/
- 人脸交换示例 inswapper:examples/in_swapper/
- 3D 人脸重建、视线估计等进阶方向:reconstruction/
- 自建人脸搜索服务,容器化 Web UI + REST API:server/README.md
从 buffalo_l 跑通 Demo 之后,下一步可以顺着 SCRFD 的训练代码往检测模型内部走,或者把 server/ 的容器化服务搭起来做人脸搜索。InsightFace 这条"检测—识别—重建"的链路,够你跟项目一起长很久 ✨
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考