SeetaFace6 教程:免费全栈人脸识别工具包,5 分钟上手 9 大核心功能
【免费下载链接】SeetaFace6SeetaFace 6: Newest open and free, full stack face recognization toolkit.项目地址: https://gitcode.com/gh_mirrors/se/SeetaFace6
SeetaFace6 是中科视拓(SeetaTech)开源的免费全栈人脸识别工具包,把人脸检测、特征点定位、人脸识别、静默活体、质量评估、年龄性别估计、口罩检测等 9 大模块封装在同一套标准 C++ 接口下,且不依赖任何第三方库。它解决的问题很直接:以前做一套完整的人脸识别系统要拼凑多个零散工具包,现在一个 SDK 就够了,个人和商业使用都免费。
为什么选 SeetaFace6
三个具体理由,都是和前代版本或同类方案的差距:
- 与商用版同步。v6 是首个与商用版本完全同步发布的开放版,不是"社区阉割版"。
- 推理速度提升 2.5 倍。开放版换用了商用版最新的 TenniS 推理引擎,ResNet-50 在 I7 上的推理速度从 SeetaFace2 的 8FPS 提升到 20FPS。
- 训练数据上亿张。SeetaFace6 的人脸识别训练集扩大到上亿张图片量级,识别准确率随之提高。
另外,整个工具包用标准 C++ 开发接口,运行时不依赖 OpenCV 或任何第三方库,接入成本很低(注意:官方提供的 Qt 示例 Demo 依赖 OpenCV,但那只是示例工程自己的依赖,SDK 本身不依赖)。
快速上手步骤
- 克隆项目:
git clone https://gitcode.com/gh_mirrors/se/SeetaFace6- 获取开发包与模型文件。仓库本身是文档与示例代码,SDK 动态库和各平台的开发包、
.csta模型文件的下载地址都列在项目 README 的「下载地址」一节(覆盖 Windows、Ubuntu、CentOS、Android、iOS、ARM 等),按你部署的平台各取对应压缩包即可。 - 解压后,每个平台压缩包内都附带该平台的调用示例,可以直接照着改。
- 想先跑起来看效果,用仓库里的 Qt 示例工程:打开
example/qt/seetaface_demo/seetaface_demo.pro,在INCLUDEPATH中加上 OpenCV 和 SeetaFace6 头文件路径,在LIBS中链接 OpenCV 库和 SDK 库(如-lSeetaFaceDetector600 -lSeetaFaceRecognizer610 -ltennis),保存后执行qmake再编译运行即可。
接口文档按模块拆分,放在 docs/ 目录,每个模块一个 md 文件,写明了结构体、构造参数和成员函数签名。
9 大核心功能一览
| 功能 | C++ 类 | 作用 | 接口文档 |
|---|---|---|---|
| 人脸检测 | FaceDetector | 在图像中定位所有人脸位置与置信分数 | 人脸检测.md |
| 特征点检测 | FaceLandmarker | 定位 5 点或 68 点,可返回遮挡信息 | 特征点检测.md |
| 人脸识别 | FaceRecognizer | 裁剪人脸、提取特征向量、计算相似度 | 人脸识别.md |
| 静默活体 | FaceAntiSpoofing | 判断真人 / 假体,支持单帧与视频模式 | 静默活体.md |
| 质量评估 | QualityOf* | 亮度、清晰度、姿态、分辨率、完整度 | 质量评估器.md |
| 年龄估计 | AgePredictor | 估计人脸年龄 | 年龄估计.md |
| 性别估计 | GenderPredictor | 估计人脸性别 | 性别估计.md |
| 口罩检测 | MaskDetector | 判断是否佩戴口罩,返回置信度 | 口罩检测.md |
| 人脸跟踪 | FaceTracker | 对图像序列中的人脸持续跟踪 | 人脸跟踪.md |
所有模块共用同一套数据约定:图像用SeetaImageData(BGR888,行优先),人脸位置用SeetaRect,特征点用SeetaPointF,构造时统一传SeetaModelSetting(模型路径 + CPU/GPU 设备选择,SEETA_DEVICE_AUTO会优先用 GPU)。学过一个模块,其余模块基本零学习成本。
戴口罩人脸识别
口罩场景是 SeetaFace6 专门补上的能力。流程是双路径设计:
先用检测与对齐模型处理输入图像,再用MaskDetector判断是否戴口罩,最后分流到通用识别模型或专用的face_recognizer_mask.csta口罩识别模型。这样口罩遮挡住下半脸时,特征提取仍能走正确的模型。
3 种识别模型规格与实测速度
应对不同算力平台,官方开放了 3 档人脸识别模型:
| 模型 | 网络结构 | I7-6700 | RK3399 | 特征长度 | 适用场景 |
|---|---|---|---|---|---|
| 通用人脸识别 | ResNet-50 | 57ms | 300ms | 1024 | 服务器高精度部署 |
| 带口罩人脸识别 | ResNet-50 | 34ms | 150ms | 512 | 口罩遮挡场景 |
| 通用人脸识别(小) | Mobile FaceNet | 9ms | 70ms | 512 | 移动端、嵌入式 |
选择策略很简单:服务器上用 ResNet-50 换最高准确率;移动端和 RK3399 这类 ARM 设备用 Mobile FaceNet,单张 9ms 就能满足实时需求。注意特征长度不同,1024 维和 512 维的特征不能混用同一张人脸库。
跨平台与硬件终端支持
从门禁平板、闸机终端到智能网关、功能一体机,都能跑起来。平台覆盖情况如下:
- 操作系统:Windows、Ubuntu、CentOS、macOS、Android、iOS
- 硬件架构:x86、ARM(RK3399 实测数据如上)
- 接口形式:标准 C++ 接口,SDK 本身零第三方依赖
实战:门禁识别管线
把模块串成一条门禁流水线的标准顺序:
- 人脸检测:
FaceDetector::detect找到画面中的人脸; - 质量评估:用质量评估器检查亮度、清晰度、姿态,不合格的帧直接丢弃,避免污染后续步骤;
- 特征点定位:
FaceLandmarker输出 5 点坐标,供裁剪对齐; - 静默活体:
FaceAntiSpoofing::Predict判断真人还是照片/视频攻击,状态为REAL/SPOOF/FUZZY; - 特征提取与比对:
FaceRecognizer::Extract提取特征向量,与人脸库逐条CalculateSimilarity,取最高分做通行判断。
想扩展到刷脸支付或人证核验,只需在第 4 步前加证件照片的比对分支。
调优参数清单
各模块默认值都偏保守,上线前建议按场景调一遍:
| 参数 | 默认值 | 说明 |
|---|---|---|
检测MIN_FACE_SIZE | 20 | 可调小以检测更小人脸,但速度变慢 |
检测THRESHOLD | 0.90 | 调低召回更多人脸,调高减少误检 |
| 活体清晰度 / 活体阈值 | 0.3 / 0.8 | 通过SetThreshold调整,按攻击场景的误拒率标定 |
| 活体模型数量 | 1 或 2 | 传 1 个模型速度快,传 2 个(局部+全局)精度高,顺序不可颠倒 |
| 活体视频帧数 | — | SetVideoFrameCount设定后达到帧数才出结果 |
| 计算线程数 | 4 | 各模块PROPERTY_NUMBER_THREADS统一可调 |
| 质量模糊阈值 | 0.80 | PROPERTY_BLUR_THRESH,卡清晰度用 |
两个容易踩的坑:活体的FUZZY状态是图像质量差导致无法判断,不是识别失败,应重新采图;CropFace前先用GetCropFaceWidth/Height拿尺寸预分配内存,避免重复拷贝。
延伸阅读
- 各模块完整接口:docs/,含结构体字段与函数签名
- Qt 可视化 Demo 源码:example/qt/,含视频采集线程实现(
videocapturethread.cpp) - 版本说明:README 中「版本号说明」一节,解释 v6 与 SeetaFace3 的关系
小结
- 9 大模块 + 3 档模型,一套 C++ 接口覆盖检测、识别、活体到属性估计的完整链路
- 商用版同步发布,TenniS 引擎下 ResNet-50 速度比 SeetaFace2 快 2.5 倍
- x86 / ARM 通吃,SDK 零第三方依赖,移动端最低 9ms 单张推理
如果你正在搭门禁、闸机或人脸检索系统,建议先拿face_detector.csta+face_recognizer_light.csta跑通「检测 → 提取 → 比对」三步,再把活体和质量评估挂进管线。
【免费下载链接】SeetaFace6SeetaFace 6: Newest open and free, full stack face recognization toolkit.项目地址: https://gitcode.com/gh_mirrors/se/SeetaFace6
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考