
InsightFace Server 授权体系解析MIT 源码、非商用模型授权与 MODEL.LICENSE 机制【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightfaceInsightFace Server 仓库通过 server/LICENSING.md 明确了项目内两类资产的授权边界服务器源码与 Python SDK 采用 MIT 协议而开源模型包仅限非商用学术研究用途商用需另行获取授权。本文以该文档为核心结合仓库内的模型许可证实现、默认模型授权文件与清单生成脚本说明 Server 在代码层面如何落实模型授权可验证这一约束帮助自托管部署者正确判断自己的使用场景是否合规。一、授权范围总览代码 MIT模型非商用LICENSING.md 给出了三条授权声明InsightFace Server 的源代码及其 Python SDK 采用 MIT 协议——即server/目录下的后端、前端、Docker 部署与 server/sdk/python 下的 SDK 均可自由使用InsightFace 开源模型包仅授权用于非商用学术研究商用需通过 insightface.ai 获取商业授权Server 加载的每个模型目录都包含一份MODEL.LICENSE文件用于描述该模型的授权状态。第三条是整个 Server 授权体系的落地点授权不是停留在文档声明层面而是以随包分发的结构化 JSON 文件形式存在并在服务器启动/加载模型时被校验。这一点在 server/pyproject.toml 中也能得到印证——打包时通过license-files [LICENSING.md]将本文件纳入发布物并将各默认模型的授权文件作为包数据一并分发[tool.setuptools.package-data] insightface_server.licensing [ trusted_keys/*.pem, defaults/*/MODEL.LICENSE, ]也就是说安装insightface-serverserver/pyproject.toml 中项目名为insightface-server版本0.2.0后包内自带默认模型的MODEL.LICENSE与用于离线验签的 Ed25519 公钥。二、默认模型的非商用授权文件MODEL.LICENSE 的真实内容仓库在 server/backend/insightface_server/licensing/defaults/ 下内置了四组默认模型的授权文件defaults/buffalo_l/MODEL.LICENSEdefaults/buffalo_m/MODEL.LICENSEdefaults/buffalo_sc/MODEL.LICENSEdefaults/antelopev2/MODEL.LICENSE以 buffalo_l 的 MODEL.LICENSE 为例其完整内容为{ license_version: 1, license_id: buffalo_l-public-v1, issuer: InsightFace, model_id: buffalo_l, grant: non-commercial, valid_from: 2021-09-22T00:00:00Z, signature: mkF_zjs_gw5lzWlN6DXlBWPY6ZK7diTGoSORdp33ISLegqxSrL930a--bHEGOOiUO4n-W9kX5qQc6kbEkGnUBQ }这份文件即 LICENSING.md 中每个模型目录包含 MODEL.LICENSE的具体形态核心字段含义为字段示例值含义license_version1许可证格式版本当前仅支持1license_idbuffalo_l-public-v1许可证唯一标识issuerInsightFace签发方校验时必须精确等于InsightFacemodel_idbuffalo_l该许可证绑定的逻辑模型 IDgrantnon-commercial授权类型取值为non-commercial或commercialvalid_from2021-09-22T00:00:00Z生效时间UTC必须带Z后缀valid_until可选过期时间缺省表示长期有效customer/reference可选商用许可证必须填写customer指明授权客户signaturebase64url 字符串对除签名外全部字段的 Ed25519 签名64 字节无填充 base64url 编码其中grant: non-commercial正是 LICENSING.md 中开源模型包仅限非商用学术研究这一条款在模型级别的机器可读表达内置的默认模型全部是non-commercial授权若某部署使用了grant: commercial的许可证则代表该模型已通过商业渠道获得授权。三、离线校验实现model_license.py 的验签流程Server 对MODEL.LICENSE的校验实现在 server/backend/insightface_server/licensing/model_license.py核心入口为verify_model_license(path, expected_model_id, ...)。其校验链路可以概括为五个步骤文件与格式约束文件必须存在、大小在 164 KiBMAX_LICENSE_BYTES 64 * 1024之间、是合法 JSON 对象且解析时通过object_pairs_hook拒绝重复键_reject_duplicate_keys字段白名单校验必需字段为license_version、license_id、issuer、model_id、grant、valid_from、signature可选字段仅有customer、reference、valid_until出现任何其他字段unknown会直接报错model_id必须匹配^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$grant必须属于{non-commercial, commercial}签名验证用 RFC 8785 的 JSON Canonicalizationrfc8785.dumps对去除signature字段后的全部字段做规范化再用内置的 Ed25519 可信公钥逐一验签。可信公钥从licensing/trusted_keys/*.pem加载当前仓库内置 insightface-model-license-public-ed25519.pem模型范围绑定model_id必须等于调用方传入的expected_model_id防止用 A 模型的许可证去授权 B 模型商用授权还强制要求customer非空有效期判断以 UTC 时间比较valid_from/valid_until未生效或已过期均抛出ModelLicenseError。两个值得注意的设计细节均出自该文件顶部 docstring 与实现代码许可证不与 ONNX 文件摘要绑定。源码注释明确写道它是针对逻辑model_id的合规凭证刻意不绑定 ONNX 摘要这意味着运维方可以自行将模型转换为 FP16、INT8 或 TensorRT 等优化派生版本而无需重新申请授权——授权绑定的是逻辑模型而非具体二进制文件商用判断有统一出口。ModelLicense.commercial_use_permitted属性直接返回grant commercial服务端其余模块可以据此决定商用能力是否开放而不需要各自解析字段。关于密钥管理trusted_keys/README.md 说明了当前公钥的状态active含 DER SHA-256 指纹并强调私有签发密钥必须保存在 Git 忽略的.private/license-issuer/目录中绝不进入源码归档或容器镜像——这正是离线校验模式能成立的前提公钥随包分发可被信任地验签而签名能力只掌握在签发方手中。四、清单生成链路manifest 中的 license 字段LICENSING.md 的每个模型目录包含 MODEL.LICENSE与模型清单机制衔接体现在 server/scripts/create_model_manifest.py 中。该脚本用于生成 Server 期望的 v1 格式manifest.json其命令行参数包括python create_model_manifest.py \ --models-dir /path/to/models \ --detector det_10g.onnx \ --recognizer w600k_r50.onnx \ --model-id buffalo_l \ --model-version v0.7 \ --display-name Buffalo_L \ --license MODEL.LICENSE \ --output manifest.json参数要点--models-dir必填模型目录detector、recognizer、license三个文件都必须直接位于该目录下脚本会解析绝对路径并检查package_file.parent root防止引用目录外的文件--detector/--recognizer默认分别为det_10g.onnx与w600k_r50.onnx--model-id/--model-version/--display-name默认buffalo_l/v0.7/Buffalo_L--license默认为MODEL.LICENSE即 LICENSING.md 所要求的授权文件名生成的 manifest 包含manifest_version: 1、文件映射、recognition元数据input_size: [112, 112]、embedding_dimension: 512、preprocessing: insightface-arcface-1以及license字段指向模型目录内的授权文件。也就是说清单生成、清单加载与许可证校验构成了同一条链路manifest 声明模型目录里有哪份MODEL.LICENSEServer 在加载该模型包时按 model_license.py 的流程完成验签任何一步失败都会以ModelLicenseError阻止模型投入使用。相关行为由 server/tests/unit/test_model_license.py、server/tests/unit/test_inference_manifest.py 等单元测试覆盖。五、合规边界小结结合 LICENSING.md 与上述实现自托管 InsightFace Server 时的授权判断可以归纳为资产授权依据Server 后端/前端源码、Python SDKserver/sdk/pythonMITserver/LICENSING.md、server/pyproject.toml 的license-files内置默认模型包buffalo_l / buffalo_m / buffalo_sc / antelopev2非商用学术研究各defaults/*/MODEL.LICENSE中grant: non-commercial商业部署所需的模型使用需grant: commercial的许可证model_license.py 对customer的强制要求商用授权获取途径见 LICENSING.md 指向的官方渠道需要注意的限制非商用限制适用于模型包而非 Server 代码本身——MIT 协议允许你自由使用、修改和分发代码但代码中加载的开源模型仍受MODEL.LICENSE约束生产环境若计划商用应替换为携带grant: commercial许可证的模型包Server 会通过内置公钥离线完成验签而无需访问外部网络。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考