InsightFace Server 用户指南:从空目录到首次人脸搜索的完整部署与实战手册
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
本指南基于 server/docs/user-guide.pt.md(InsightFace Server 葡萄牙语版用户指南),面向首次使用者,完整覆盖从空文件夹出发完成服务器部署、模型安装、Collection 创建、Person 注册到首次成功搜索的端到端流程;同时结合仓库中的 server/config/server.toml、server/deploy/compose.cpu.yml、server/deploy/compose.cuda12.yml、server/backend/insightface_server/config.py 与 server/docs/api.pt.md 等源码与配置文件,深入讲解其底层原理与可验证依据。读完本文,你将掌握:CPU/CUDA 两种部署路径、Web UI 与
/v1API 及 Python SDK 三种操作入口、检测/注册/搜索/RTSP 监控的完整用法,以及启动期配置、精确搜索 Profile、数据备份与安全加固的实战要点。
InsightFace Server 是 insightface 项目中的自托管人脸识别服务端,所有操作(创建 Collection、注册 Person、搜索、监控 RTSP 摄像头)均可通过 Web UI、/v1REST API 与 Python SDK 三种等效方式完成。每个 HTTP 字段与响应细节参见 server/docs/api.pt.md。
从零到第一次搜索
环境要求
CPU 部署需要 Linux x86_64 主机,并安装 Docker Engine 与 Docker Compose。CUDA 部署在此基础上还需兼容的 NVIDIA 驱动与 NVIDIA Container Toolkit。官方明确要求:不要在宿主机安装 CUDA、cuDNN、ONNX Runtime、Python 或 OpenCV——这些运行时全部封装在容器镜像内,宿主机只负责提供 Docker 与 GPU 驱动。
CPU 快速启动
mkdir -p server/.models docker compose -f server/deploy/compose.cpu.yml pull docker compose -f server/deploy/compose.cpu.yml run --rm models install buffalo_l docker compose -f server/deploy/compose.cpu.yml up -d curl -fsS http://127.0.0.1:18097/v1/health执行curl健康检查可看到 200 响应与status、auth_enabled、request_id字段(503 not_ready表示服务尚未就绪)。GPU 部署将compose.cpu.yml替换为compose.cuda12.yml,端口改为18098。模型安装器在下载前会展示模型许可证;InsightFace 公开预训练模型在未取得单独商业许可前仅限非商业研究使用。
启用认证后再对外暴露
仓库附带的 Compose 文件默认auth_enabled=false,仅用于隔离环境评估;该模式下 Web UI 会隐藏密钥输入控件。将服务暴露给其他用户或网络前,务必先启用认证:
export INSIGHTFACE_AUTH_ENABLED=true export INSIGHTFACE_API_KEY='replace-with-a-long-random-secret' docker compose -f server/deploy/compose.cpu.yml up -d这一点在 server/deploy/compose.cpu.yml 中亦有印证:INSIGHTFACE_AUTH_ENABLED通过环境变量${INSIGHTFACE_AUTH_ENABLED:-false}注入,INSIGHTFACE_API_KEY默认空字符串,并支持INSIGHTFACE_CORS_ORIGINS、INSIGHTFACE_LOG_LEVEL等配套变量。
首次工作流验证
按以下顺序完成第一次验证:检查Dashboard(仪表盘)→ 创建 Collection → 用至少一张清晰图片注册一个 Person → 用该 Person 的另一张图片执行Search(搜索)。需要特别说明:"无匹配"是成功结果(返回空列表),不是服务器故障。停止服务用docker compose ... down,切勿加-v——加-v会永久删除命名数据卷。
1. 登录与就绪检查
打开http://SERVIDOR:18097/(CPU)或http://SERVIDOR:18098/(CUDA 12)。若已启用认证,选择Configurar chave API(配置 API 密钥),粘贴操作员提供的密钥并选择Usar neste separador(在此标签页使用);浏览器仅将其保存在内存中,刷新或关闭标签页即清除。
在Painel(仪表盘)或Sistema(系统)页面确认 service、database(数据库)、models(模型)与 Provider 均已就绪。CUDA 部署必须显示CUDAExecutionProvider,服务器绝不会静默回退到 CPU——这一点在 server/deploy/compose.cuda12.yml 中通过INSIGHTFACE_EXECUTION_PROVIDER: CUDAExecutionProvider与INSIGHTFACE_STRICT_CUDA: "1"两项配置强制保证。
2. 创建 Collection(人脸集合)
在Coleções(集合)页面选择Nova coleção(新建集合),需要设置:
- 稳定 ID(如
employees)、显示名称与可选 metadata; - 默认 cosine 阈值(初始建议
0.4); - 当前主机支持的搜索 Profile(见第 8 节);
- 容量(capacity)与每人的最大 FaceSamples 数;
- 检测器输入尺寸、检测/NMS 阈值与单脸选择策略;
- 可选的 112×112
bounding-box cropJPEG 存储——注意这不是对齐后的识别输入,默认关闭。
Collection 与模型的 identity、digest(摘要)、embedding 维度与预处理版本绑定。检测 Profile 在创建 Collection 时从系统 Profile 拷贝一份,之后可独立修改;每次更新只影响下一次请求并递增detection_revision,不会重新处理已有的 FaceSamples。
单脸选择策略中:largest优先选择面积最大的脸;center_largest则最大化area - 2.0 × 人脸框中心到图像中心的像素距离平方。检测置信度不参与该评分。这两个取值在 server/backend/insightface_server/config.py 中定义为Literal["largest", "center_largest"],并由normalize_single_face_selection在启动时校验,非法值会直接拒绝启动。
3. 注册 Person
在Pessoas(人员)页面选择 Collection 后点击Registar pessoa(注册人员)。可提供可选的稳定 Person ID、名称、external ID 与 JSON metadata,并上传一张或多张 JPEG、PNG 或 WebP 图片。
注册审核(review)模式有三种:
off:使用 Collection 的单脸策略,允许多张脸;standard:要求恰好一张可用人脸,并执行尺寸、检测、清晰度、亮度与姿态检查;strict:在 standard 检查基础上,还要求该样本的最佳类内相似度高于最佳类外相似度。
批量注册支持部分成功:服务会返回rejected_images列出每张被拒图片及原因。原始上传图不会被保存;启用 crop 存储时,仅保存缩放至 112×112 的bounding-box crop。
受信任系统可通过external_trusted模式提交预计算的 L2 归一化 embedding:图片仍必须上传用于检测与质量审核,但服务器不再重新提取embedding 向量。该 embedding 的契约必须与 Collection 完全一致(模型、维度、预处理版本),否则返回409冲突错误。
4. 检测(Detect)、比较(Compare)与搜索(Search)
Detect
上传一张图片,返回人脸框(boxes)、五个关键点(landmarks)、置信度分数与启发式质量评分。没有检测到人脸时返回空列表,同样是成功结果。API 形式为POST /v1/detect,multipart 字段image必填、max_faces取值 1–100,可选collection_id。
Compare
上传 source 与 target 两张图片,选择系统或某个 Collection 的检测 Profile,其单脸策略在每张图中各选一张可用人脸。结果包含原始 cosinesimilarity、生效的threshold与matched布尔值。Similarity 不是概率,而是范围[-1,1]的原始余弦相似度,匹配条件为similarity >= threshold。任一张图没有可用人脸时,API 返回422 face_not_found。
Search
选择 Collection、上传查询图片、设置结果数量上限并可选覆盖阈值。Collection 的检测 Profile 负责选取查询人脸。结果按相似度降序排列;一个人的得分是其所有 FaceSamples 的最高分。无匹配时返回空列表。
搜索的持久化流程值得关注:新接受的 FaceSamples 先提交到 SQLite,然后加入内存索引,最后才返回成功响应;删除操作会同步更新两处存储;服务器重启时从 SQLite(权威数据源)重建索引。因此 SQLite 始终是数据一致性的最终保证。
5. RTSP 摄像头监控
在Monitorização de câmaras(摄像头监控)页面创建持久化 Monitor(监控任务):设置任务 ID 与名称、rtsp://或rtsps://源地址、目标 Collection、推理频率(inference_fps,默认 2)与可选匹配阈值。事件策略控制:连续多少次观测确认一张人脸、缺席多久产生离开事件、重复事件冷却时间、以及内存中保留多少条近期事件。
Web 视频预览默认关闭——仅在操作员需要视觉确认时开启;识别与事件推送不依赖预览。启用后,服务器发送原始 JPEG 帧,Web UI 依据/state结果在帧上绘制绿色框(已注册人员)与橙色框(检测到但未注册的人脸)。
Monitor 的运行独立于浏览器:关闭页面不会停止任务,服务器重启后已启用的 Monitor 会自动恢复。可通过Start/Stop切换enabled、Edit轮换 RTSP 源或调优参数、Delete删除任务。解码器只保留最新一帧;若处理耗时超过请求间隔,会跳过过期帧而非排队积压。
数据安全方面:Monitor 配置存储在 SQLite;RTSP 凭据在/data中加密保存且 API 永不返回;视频帧不落盘;近期 enter/exit/error/recovery 事件仅存在于有界内存环形缓冲中,重启即丢失。跨不可信网络使用 UI/API 时应启用 HTTPS,并将 Monitor 管理权限制在可信操作员范围。
6. 数据、备份与安全
- 持久化挂载
/data;/models只读挂载(见 server/deploy/compose.cpu.yml,bind 挂载指定read_only: true,数据卷data指向/data); - 批量或破坏性维护前,将 SQLite 数据库与配置的 crop 存储一起备份,且应在停止写入或使用 SQLite 安全快照方式下进行;
- API 密钥以hash形式存储;后续启动时提供不同的
INSIGHTFACE_API_KEY会有意轮换该数据卷的激活密钥; - 不得记录(log)图片、embedding 或密钥;除非必要,保持 CORS 为关闭状态(Compose 默认
INSIGHTFACE_CORS_ORIGINS为空)。
开发者的 OpenAPI 模式浏览入口在/docs,实例的精确 schema 位于/openapi.json。每个 API 响应都携带x-request-id(JSON 中重复为request_id),报告问题时务必带上它。
常见错误速查:
| HTTP 状态 | 含义 |
|---|---|
401 unauthorized | 标签页无有效密钥,或密钥已被轮换 |
409 collection_model_mismatch | Collection 基于不同模型契约创建 |
422 face_not_found | 未选出可用人脸 |
503 | 模型/索引未就绪或超时 |
7. 模型与许可证
镜像不包含模型。常规启动保持离线;一次性models服务负责把模型包装入server/.models:
docker compose -f server/deploy/compose.cpu.yml \ run --rm models install buffalo_l --accept-license docker compose -f server/deploy/compose.cpu.yml \ run --rm models verify buffalo_l受支持的公开模型包:
| 包名 | 检测模型 | 识别模型 |
|---|---|---|
buffalo_l | det_10g.onnx | w600k_r50.onnx |
buffalo_m | det_2.5g.onnx | w600k_r50.onnx |
buffalo_sc | det_500m.onnx | w600k_mbf.onnx |
antelopev2 | scrfd_10g_bnkps.onnx | glintr100.onnx |
安装过程生成manifest.json与签名的MODEL.LICENSE。不带--accept-license时,工具仅打印条款并退出、不下载任何文件;非交互环境下会直接报错提示补充--accept-license(参见 server/backend/insightface_server/models_cli.py)。models verify验证包身份、签名许可证、有效期与当前授权状态,输出LICENSE VERIFIED及 Issuer、License ID、Model ID、Grant、有效期、Commercial use: PERMITTED/NOT PERMITTED等摘要。
许可证标识model_id,它是合规凭证,不是 DRM 也不是模型文件校验和。私有模型可使用同样的 manifest 与离线签名许可证格式。公开预训练模型(含buffalo_l)仅限非商业研究使用,商业用途需单独许可。
8. 启动期配置(server.toml)
启动配置统一放在 server/config/server.toml,Compose 以只读方式挂载到容器内/etc/insightface/server.toml。配置文件只在进程启动时读取一次,修改后必须重启容器;系统没有运行时配置 API。
[inference] max_concurrency = "auto" # CPU 4, CUDA 8 [detection] input_sizes = [[96, 96], [512, 512]] threshold = 0.50 nms_threshold = 0.40 single_face_selection = "largest" max_detected_faces = 100 [web] disabled = false参数语义与底层校验(对应 server/backend/insightface_server/config.py 与 server/backend/insightface_server/config.py):
max_concurrency:"auto"在 CPU 上解析为 4、CUDA 上为 8 个并发模型流水线;正整数可覆盖;API 调用、注册与 RTSP 帧共享这一个进程级预算,上限 256;input_sizes:每个条目为[width, height],动态 SCRFD 模型在每个配置分辨率上运行,把所有候选框映射回原图坐标后执行一次全局 NMS。校验规则:最多 4 个尺寸、每条边 32–2048 且必须为 32 的倍数(SCRFD 最大特征图 stride 为 32)、组合像素数不超过 4M、不允许重复尺寸;threshold:检测器最低置信度,在生成 SCRFD 候选框时(合并 NMS 之前)应用,取值 0.0–1.0;nms_threshold:全局单次 NMS 的 IoU 阈值;single_face_selection:"largest"或"center_largest";max_detected_faces:部署级安全上限,1–100,请求只能要求更少、不能更多;[web].disabled=true:纯 API 模式,保留/v1与/openapi.json,不再注册/、/docs、帮助页面与前端静态资源。
Profile 归属规则:无状态 Detect 与 Embeddings 使用系统Profile;Compare 可用系统 Profile 或指定 Collection;注册与搜索使用其Collection的 Profile。
9. 精确搜索 Profile 与容量规划
/v1/system响应只公告当前 CPU/GPU 上可用的 Profile。Collection 在创建时固定一个 Profile,搜索请求不能更改它:
| Profile | 存储表示 | 典型可用性 |
|---|---|---|
fp32_v1 | FP32 | CPU 与 CUDA |
fp16_v1 | FP16 | CUDA |
bf16_v1 | BF16 | 支持的 CPU 或 SM80+ CUDA |
int8_x736_v1 | INT8,scale 736 | CPU 与 CUDA,推荐 INT8 |
int8_x1000_v1 | INT8,scale 1000 | 兼容旧 Collection 的 Profile |
全部 Profile 都是对每个存活 FaceSample 的扁平穷举搜索(exact search),不是 ANN 索引;低精度 Profile 是对 FP32 分数的近似,INT8 点积累加到 INT32,公开的 similarity 与 threshold 仍是原始 cosine。
容量参考(512 维向量,未计 ID 与工作区):每行 FP32 约2048 字节、FP16/BF16 约1024 字节、INT8 约512 字节。capacity_rows为该 Collection 预留最大存活行数,避免例行扩容停顿,默认100000,部署护栏上限默认10000000;请依据真实内存预算设定。max_faces_per_person默认20,限制的是每人样本数而非人数。
10. Python SDK 与从源码构建
Python SDK 使用方式(HTTP 契约详见 server/docs/api.pt.md):
from insightface_server import Client client = Client("http://localhost:18097", api_key="your-key") client.create_collection(collection_id="employees", name="Employees", threshold=0.4) client.add_person("employees", person_id="alice", images=["alice-1.jpg", "alice-2.jpg"]) matches = client.search("employees", "query.jpg", limit=5)SDK 接受路径、bytes 与 file-like 对象,提供 Detect、Compare、Collections、注册、Search 与 Monitors 的类型化方法。
任何用户都可在完整仓库检出下自行构建两个镜像:
make -C server build-cpu make -C server build-cuda12构建后为 Compose 的模型安装与up命令添加--pull never以使用本地镜像。构建使用固定的基础镜像与锁定依赖,但需要网络获取这些输入。公开标签为0.2.0-cpu与0.2.0-cuda12;cpu/cuda12是随最新稳定版本移动的标签,刻意不设latest标签。
升级前:停止写入 → 对/data与 crop 存储做 SQLite 安全快照 → 保留/models及其许可证文件 → 先用副本启动新容器,检查迁移与/v1/health→ 验证模型契约与一次已知搜索。docker compose down -v会删除命名数据卷,切勿使用。
11. CUDA 支持与快速失败验证
CUDA 镜像内置 CUDA Runtime 12.9.1、cuDNN 9.24.0、Python 3.11 与onnxruntime-gpu==1.27.0。宿主机只需 Driver、Docker Engine、NVIDIA Container Toolkit 与兼容 GPU。
驱动版本要求:
- Turing / Ampere / Ada / Hopper:Driver R535 或更新;
- Blackwell 与 RTX 50 系列:Driver 570.26 或更新;
- 新部署建议使用稳定版 R580 或更新驱动。
架构兼容性不代表每个 GPU SKU 都经过正式认证。每次 CUDA 启动时,服务器会检查:GPU 型号、Compute Capability、Driver、实际的 CUDA/cuDNN/ORT 版本、CUDAExecutionProvider是否存在、真实的检测器与识别器 Session 以及真实 warm-up 推理;它会审计 Provider 放置并在需要时终止而非静默回退 CPU。使用前在System页面确认结果。
12. 网络暴露与运维注意事项
对外暴露网络时:在可信反向代理处终结 HTTPS、CORS 只允许必需 origins(而非通配)、在边缘施加 rate/body/timeout 限制、将数据卷与备份按生物特征数据保护。Phase 1 只有一把无角色区分的 API Key,不是多租户授权系统;因此多租户场景应在前置层自行做身份与隔离控制。
请求重试建议:GET 可安全重试;DELETE 前先查状态;Person/Face 创建结果因网络不确定时,先查询 ID 再重试 POST;仅对 429 与 503 等瞬时错误做有限指数退避加重试,4xx 应先修正请求本身。
结语
从docker compose up到第一次成功搜索,InsightFace Server 将"部署、注册、搜索、监控"压缩为一条清晰的路径:Collection 契约固定模型与 Profile,Person 审核保证入库质量,穷举精确搜索保证结果可解释。本文所有配置与命令均来自仓库内 server/config/server.toml、server/deploy/compose.cpu.yml、server/backend/insightface_server/config.py 等真实文件,可直接对照使用;更完整的 HTTP 字段与错误语义,请继续阅读 server/docs/api.pt.md 与 server/README.md。
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考