跳到正文

游民营地

主题: 开发运维

免费开放中!这款离线人脸识别 SDK 你再不试就晚了

从虹软 ArcFace 3.0 的获取与授权,到 ArcFace.Net 示例调试、Linux 动态库加载、人脸检测与比对,梳理离线接入流程,并区分原生能力、封装限制和授权期限。

作者 一只游民Developer and YouTuber

发布于 更新于 约 1 分钟读完

要在人脸检测和比对之外,再加上“离线运行”和“成本可控”两个条件,选择一下就少了。我给不方便接公网的客户用过虹软 ArcFace 3.0,也把它封装成了 ArcFace.Net,方便 .NET 项目调用。

这篇从获取 SDK 到跑通 Sample,重点讲授权、Linux 动态库路径,以及人脸检测、特征比对和人脸库检索。原生 SDK 的功能与封装已经实现的功能要分开看,不能只看一张功能清单就直接上线。

1. 为什么选离线 SDK

有些场景不能把人脸图像发送到公网服务,或者希望减少上传与网络等待。离线 SDK 把推理放在本机,更容易控制数据流向。

它不等于天然安全:原图、特征向量、日志和备份仍可能留在本机。这里介绍接入方法,真实部署还需要确认采集目的、授权、访问权限、保留期限和人工复核方式。

2. 获取 SDK:平台、版本和授权必须配套

从 虹软开发者中心注册并登录,创建应用,再在应用中添加 SDK。我演示选择的是 Linux x64、ArcFace 3.0、C++ 包;是否仍提供免费方案、有效期和商用范围,以当前后台及许可为准。

准备项用途
对应平台的原生 SDKLinux 使用 .so,Windows 使用 .dll
AppId 与平台 SDKKey激活和初始化;须与所选 SDK 配套
SDK 文档核对数据结构、接口顺序和错误码
.NET 项目或 Sample调用封装并检查结果
获准使用的测试图片验证检测与比对,不使用真实客户资料做公开演示

下载并解压后,lib 保存原生动态库,doc 提供接入说明。只安装 NuGet 包不能替代原生 SDK,也不能替代合法授权。授权值留在本地受保护配置中,不进入仓库或截图。

3. .NET 封装:先选图像处理实现

ArcFace.Net 的核心库调用原生 SDK,图像处理另分实现,Sample 用于调试和走读。

实现选择时注意
Core核心接口,需要配合图像处理实现
4.x/SystemDrawing基于 System.Drawing.Common;核对运行平台
5.x/ImageSharp项目说明要求 .NET 8+;同时核对依赖许可
自定义 IImageProcessor可以替换图像处理库,接口实现参考现有代码

微软说明 .NET 6 起 System.Drawing.Common 只支持 Windows,不是整个库停止维护。Linux 项目不能照搬 Windows 的图像处理依赖。

4. 跑 Sample:授权之后,通常还差动态库路径

克隆仓库,打开 ColinChang.ArcFace.Sample。先阅读示例配置和 Program.cs,在自己的本地配置中填写对应平台 AppId/SDKKey,再确认测试图片路径。

我的 Linux 调试在第一次运行时提示找不到原生库。原因不是 NuGet 包没装,而是进程找不到 SDK 的 .so。

  1. 找到合法 SDK 的 lib 目录,确认是 Linux x64 文件。
  2. 在 Rider 对应运行/调试配置的环境变量中设置 LD_LIBRARY_PATH,指向该目录。
  3. 重新运行 Sample,检查库加载及激活结果。
  4. 如仍失败,按报错核对架构、原生依赖、授权与读写权限,不把所有目录都塞进查找路径。

LD_LIBRARY_PATH 只是动态链接器的查找路径之一;应限制在需要的进程环境,不随意全局设置。已有值时按需要追加并保留原配置。

5. 按接口顺序检查检测、特征和人脸库

先看激活及 SDK 版本,再测试单项功能,更容易定位失败环节。

阶段应观察的结果不应推断
激活/版本授权状态、有效期和平台信息一次激活成功就永久可用
人脸检测检测数量、位置矩形等能检测到就一定能正确识别身份
属性接口所选版本实际返回的属性年龄、性别预测可直接用于决策
特征提取与比对两个特征的匹配得分得分就是同一人的概率
人脸库检索返回匹配候选及得分任意最高分都应自动放行

测试比对时可以选两张相近但身份不同的授权样本,再与同一人的不同照片对照。得分用于该算法的比较,不直接等于概率;阈值必须在实际人群、光照和误识代价下评估,不照搬示例输出。

Sample 涉及活体接口,也不代表封装已经交付完整活体防伪。项目 README仍列出视频模式追踪、活体检测未开发,以及角度结果的限制。需要这些能力时,逐项看当前版本源码和测试,不以原生产品“支持”代替封装“实现”。

6. 部署与激活:离线推理不等于从不联网

Rider 配置只影响调试进程,部署服务后还要在服务或容器环境中配置动态库位置。仓库提供 Dockerfile,可作为目录与依赖配置的参考,但生产镜像要使用自己的合法 SDK,不把授权文件和客户照片烘焙进公开镜像。

我使用的免费 3.0 方案需要初次联网激活,到期后更新 SDK 并重新激活。这是该方案的条件;其他版本是否支持不同激活方式、费用如何,都按当前合同和后台核对,不能把“离线”理解为没有授权期限。

接得上之后,还要用自己的样本验收

按 SDK 与授权配套 → 原生库加载 → Sample 单项验证 → 部署环境复测走,常见的路径和激活问题就有了检查顺序。真正上线还要管好人脸数据,特征向量同样属于需要保护的信息,不是天然匿名的普通数字。

欢迎带着平台、.NET 版本、SDK 版本和脱敏错误码交流,也可以在 ArcFace.Net 仓库提交问题。别上传授权值或真实人脸库。感谢阅读,希望这套接入顺序能帮你把“包已经装了,为什么还跑不起来”拆解清楚。

评论

评论由 GitHub Discussions 提供。发表评论、回复或添加反应需要使用 GitHub 登录。

正在加载评论服务…

暂时没有相互链接的笔记;先读同主题文章,再看看最近更新的内容。

更多好文