InsightFace Server 用户指南:从空目录到首次人脸搜索的完整部署与实战手册
2026/9/10 0:08:10 网站建设 项目流程

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 响应与statusauth_enabledrequest_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_ORIGINSINSIGHTFACE_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: CUDAExecutionProviderINSIGHTFACE_STRICT_CUDA: "1"两项配置强制保证。

2. 创建 Collection(人脸集合)

Coleções(集合)页面选择Nova coleção(新建集合),需要设置:

  • 稳定 ID(如employees)、显示名称与可选 metadata;
  • 默认 cosine 阈值(初始建议0.4);
  • 当前主机支持的搜索 Profile(见第 8 节);
  • 容量(capacity)与每人的最大 FaceSamples 数;
  • 检测器输入尺寸、检测/NMS 阈值与单脸选择策略;
  • 可选的 112×112bounding-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、生效的thresholdmatched布尔值。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切换enabledEdit轮换 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_mismatchCollection 基于不同模型契约创建
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_ldet_10g.onnxw600k_r50.onnx
buffalo_mdet_2.5g.onnxw600k_r50.onnx
buffalo_scdet_500m.onnxw600k_mbf.onnx
antelopev2scrfd_10g_bnkps.onnxglintr100.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_v1FP32CPU 与 CUDA
fp16_v1FP16CUDA
bf16_v1BF16支持的 CPU 或 SM80+ CUDA
int8_x736_v1INT8,scale 736CPU 与 CUDA,推荐 INT8
int8_x1000_v1INT8,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-cpu0.2.0-cuda12cpu/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),仅供参考

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

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

立即咨询