InspireFace C++ 架构分析
https://github.com/deepinsight/insightface/tree/master/cpp-package/inspireface
1. 项目概述
InspireFace 是一个高性能的人脸识别和分析 SDK,采用 C++ 开发,提供了完整的人脸检测、跟踪、特征提取、活体检测、属性分析等功能。该项目采用模块化设计,具有良好的可扩展性和跨平台支持能力。
2. 整体架构
2.1 架构层次
InspireFace 采用分层架构设计,从上到下分为以下几个层次:
C API 层 (c_api/
):提供 C 语言接口,便于跨语言调用会话管理层 (session.cpp
):管理整个识别会话的生命周期引擎层 (engine/
):核心业务逻辑,协调各个功能模块功能模块层 : 人脸跟踪模块 (track_module/
) 人脸识别模块 (recognition_module/
) 流水线处理模块 (pipeline_module/
) 特征管理模块 (feature_hub/
) 中间件层 (middleware/
):模型加载、推理适配等平台层 (platform/
):平台相关的优化和适配基础设施层 : 图像处理 (image_process/
) 日志系统 (log.cpp
) 资源管理 (runtime_module/
)
2.2 主要模块功能
2.2.1 人脸跟踪模块 (FaceTrackModule)
人脸检测 (face_detect/
):使用深度学习模型检测图像中的人脸关键点检测 (landmark/
):检测人脸的106个关键点人脸跟踪 (tracker_optional/
):使用 ByteTrack 算法进行多目标跟踪质量评估 (quality/
):评估人脸姿态和图像质量
2.2.2 人脸识别模块 (FeatureExtractionModule)
特征提取 (extract/
):提取人脸的特征向量特征归一化 :对特征向量进行归一化处理相似度计算 :计算两个特征向量之间的余弦相似度
2.2.3 流水线处理模块 (FacePipelineModule)
活体检测 (liveness/
):RGB活体检测和眨眼检测口罩检测 (attribute/mask_predict_adapt.h
)属性识别 (attribute/
):识别年龄、性别、种族等属性表情识别 (attribute/face_emotion_adapt.h
):识别7种基本表情交互检测 :眼睛状态检测等交互式活体检测
2.2.4 特征管理模块 (FeatureHub)
特征存储 :使用 SQLite 数据库持久化存储人脸特征特征检索 :支持1:N人脸搜索SIMD优化 :使用 SIMD 指令加速特征比对
3. 核心流程
3.1 初始化流程
调用 HFLaunchInspireFace
加载资源文件 创建 Session
对象,配置检测模式和参数 加载各个功能模块的深度学习模型
3.2 人脸检测与跟踪流程
输入图像通过 HFImageStream
传入 FaceTrackModule
进行人脸检测对检测到的人脸进行关键点定位 使用跟踪算法维护人脸ID的连续性 返回人脸位置、关键点、跟踪ID等信息
3.3 人脸识别流程
基于检测到的人脸和关键点进行人脸对齐 将对齐后的人脸送入特征提取网络 得到特征向量并进行归一化 与数据库中的特征进行比对
4. 设计模式
4.1 单例模式
ResourceManager
:管理全局资源的创建和释放Launch
:管理全局的模型加载和初始化
4.2 工厂模式
4.3 Pimpl 模式
Session
类使用 Pimpl 模式隐藏实现细节
4.4 适配器模式
AnyNetAdapter
:统一不同推理引擎的接口
5. 架构图示
5.1 系统架构图
基础设施层
推理引擎层
算法适配层
功能模块层
引擎层
会话层
应用层
ImageProcess 图像处理
ResourceManager 资源管理
Logger 日志系统
MNN
RKNN
CoreML
TensorRT
FaceDetectAdapt 人脸检测
FaceLandmarkAdapt 关键点检测
ExtractAdapt 特征提取
RGBAntiSpoofingAdapt 活体检测
FaceAttributeAdapt 属性识别
FaceTrackModule 人脸跟踪
FeatureExtractionModule 特征提取
FacePipelineModule 流水线处理
FeatureHub 特征管理
FaceSession 人脸会话引擎
Session 会话管理
C API inspireface.h
Python API
其他语言绑定
5.2 类关系图
Session
-pImpl: unique_ptr<Impl>
+Create() : Session
+FaceDetectAndTrack()
+FaceFeatureExtract()
+MultipleFacePipelineProcess()
FaceSession
-m_face_track_: shared_ptr<FaceTrackModule>
-m_face_recognition_: shared_ptr<FeatureExtractionModule>
-m_face_pipeline_: shared_ptr<FacePipelineModule>
+Configuration()
+FaceDetectAndTrack()
+FacesProcess()
FaceTrackModule
-m_face_detector_: shared_ptr<FaceDetectAdapt>
-m_landmark_predictor_: shared_ptr<FaceLandmarkAdapt>
-m_refine_net_: shared_ptr<RNetAdapt>
-m_face_quality_: shared_ptr<FacePoseQualityAdapt>
+Configuration()
+UpdateStream()
+TrackFace()
FacePipelineModule
-m_rgb_anti_spoofing_: shared_ptr<RGBAntiSpoofingAdapt>
-m_mask_predict_: shared_ptr<MaskPredictAdapt>
-m_attribute_predict_: shared_ptr<FaceAttributePredictAdapt>
+Process()
«abstract»
AnyNetAdapter
+LoadData()
+Forward()
«singleton»
ResourceManager
-sessionMap: unordered_map
-streamMap: unordered_map
+getInstance()
+createSession()
+releaseSession()
5.3 人脸处理流程图
始终检测
轻量跟踪
检测跟踪
输入图像
图像预处理
检测模式
人脸检测
人脸跟踪
ByteTrack
关键点检测
人脸对齐
特征提取
流水线处理
活体检测
口罩检测
属性识别
表情识别
特征比对
身份识别结果
检测结果汇总
输出结果
5.4 数据流图
输出数据
中间数据
数据转换
输入数据
MultipleFaceData 多人脸数据
FaceFeature 人脸特征
检测结果 活体/属性/表情
FaceTrackWrap 人脸追踪数据
FaceBasicToken 人脸基础数据
Embedded 特征向量
HFImageStream
FrameProcess
Image对象
RGB图像
视频流
IR图像
5.5 模块交互时序图
应用程序 C API Session FaceTrackModule FeatureExtractionModule FacePipelineModule FeatureHub HFCreateInspireFaceSession Create() Configuration() Configuration() Configuration() HFExecuteFaceTrack FaceDetectAndTrack() UpdateStream() FaceTrackWrap[] HFFaceFeatureExtract FaceFeatureExtract() FaceExtract() Embedded HFFeatureHubFaceSearch SearchFeature() SearchResults 应用程序 C API Session FaceTrackModule FeatureExtractionModule FacePipelineModule FeatureHub
5.6 状态图
HFLaunchInspireFace
加载成功
加载失败
HFCreateSession
创建成功
创建失败
ExecuteFaceTrack
检测完成
FeatureExtract
识别完成
ReleaseSession
HFTerminate
清理资源
未初始化
资源加载中
已初始化
错误状态
会话创建
就绪状态
检测中
识别中
会话释放
资源释放
5.7 组件图
InspireFace SDK
核心组件
算法组件
数据组件
接口组件
C API Interface C接口
Stream Handler 流处理器
Resource Manager 资源管理器
Feature Database 特征数据库
Image Processor 图像处理器
Model Loader 模型加载器
Landmark Detector 关键点检测
Liveness Detector 活体检测
Attribute Analyzer 属性分析
Quality Assessor 质量评估
Emotion Recognizer 表情识别
Session Manager 会话管理器
Face Detector 人脸检测器
Feature Extractor 特征提取器
Face Tracker 人脸跟踪器
Pipeline Processor 流水线处理器
5.8 用例图
InspireFace 用例
参与者
初始化SDK
创建会话
检测人脸
提取特征
人脸比对
人脸搜索
活体检测
属性识别
表情识别
管理特征库
配置参数
释放资源
开发者
应用程序
管理员
5.9 部署图
硬件加速
可选云端服务
客户端设备
CPU SIMD指令集
GPU CUDA/Metal
NPU 神经网络处理器
特征数据库 服务器
模型更新 服务器
应用程序
InspireFace SDK
推理引擎 MNN/TensorRT/CoreML
模型文件 .onnx/.mnn
5.10 活动图 - 人脸识别完整流程
否
是
否
是
是
否
是
否
是
否
开始
加载InspireFace资源
资源加载成功?
返回错误
创建会话
配置检测参数
输入图像/视频流
图像预处理
人脸检测
检测到人脸?
继续下一帧
关键点定位
人脸对齐
需要识别?
特征提取
特征比对/搜索
返回识别结果
需要其他分析?
执行分析 活体/属性/表情
返回分析结果
返回检测结果
继续处理?
释放资源
结束
5.11 协作图 - 多模块协作
结果输出
高级功能
特征分析
检测跟踪
预处理
图像输入
Detection Result 检测结果
Recognition Result 识别结果
Analysis Result 分析结果
Liveness 活体检测
Attribute 属性分析
Emotion 表情识别
Face Align 人脸对齐
Feature Extract 特征提取
Quality Check 质量检查
Face Detect 人脸检测
Face Track 人脸跟踪
Landmark 关键点
Format Convert 格式转换
Image Rotate 图像旋转
Image Scale 图像缩放
Camera 摄像头
Image File 图片文件
5.12 包图 - 代码组织结构
inspireface
include
c_api
engine
track_module
recognition_module
pipeline_module
middleware
common
face_info/ 人脸信息
face_data/ 数据结构
model_archive/ 模型管理
any_net_adapter.h 推理适配
liveness/ 活体检测
attribute/ 属性分析
extract/ 特征提取
dest_const.h 常量定义
face_detect/ 检测算法
landmark/ 关键点算法
quality/ 质量评估
tracker_optional/ 跟踪算法
face_session.cpp 会话引擎
inspireface.cc C接口实现
intypedef.h 类型定义
inspireface.h 公共接口
data_type.h 数据类型
launch.h 启动管理
6. 关键设计特点
6.1 模块化设计
各功能模块独立,便于维护和扩展 通过接口抽象,降低模块间耦合
6.2 跨平台支持
支持多种推理引擎(MNN、RKNN、CoreML、TensorRT) 平台相关代码集中在 platform 目录
6.3 性能优化
SIMD 指令优化特征比对 多级人脸检测(160/320/640像素) 轻量级跟踪模式减少计算量
6.4 资源管理
使用 ResourceManager 统一管理资源生命周期 智能指针自动管理内存
6.5 扩展性
插件式模型加载机制 灵活的功能开关配置 标准化的适配器接口
7. 技术栈
编程语言 : C++11/14构建系统 : CMake图像处理 : InspireCV (内部库)深度学习推理 : MNN (默认) RKNN (瑞芯微) CoreML (苹果) TensorRT (NVIDIA) 数据库 : SQLite3日志系统 : 自定义日志系统序列化 : 自定义二进制格式
8. 总结
InspireFace 采用了清晰的分层架构和模块化设计,具有以下优势:
高性能 :通过多种优化手段提升性能易扩展 :模块化设计便于添加新功能跨平台 :支持多种操作系统和硬件平台易集成 :提供简洁的 C API 接口功能完整 :涵盖人脸识别的完整流程
整体架构设计合理,代码组织清晰,是一个工业级的人脸识别 SDK 实现。