技术栈
- 对外通讯
- zmq
- 项目管理
- git
- cmake
- gdbserver
- 其他
- ffmpeg
- opencv
- 推理
- 人脸检测
- 人脸矫正
- 特征提取
- 面向对象
- faiss
- 数据结构
流程
-
人脸检测 –> 人脸过滤 –> 人脸矫正 –> 特征提取 –> 人脸识别 –> 识别结果
-
具体实现
- 人脸检测:vca通过接收视频流地址,拉取视频流,解码成一帧帧图片,通过加载的引擎,检测图片中的人脸,输出结构化数据:追踪id,关键点,检测框
- 人脸过滤:计算节点接收vca输出的图片数据和结构化数据,根据追踪id完成一个画面一个人只报一次的逻辑,并根据算法选择每个人所有人脸图片中最优的一张图片,和关键点,检测框一起发送到人脸识别引擎
- 人脸矫正:根据关键点信息,进行人脸矫正,分两个步骤
- 一个是在更新人脸库时,先对人脸图片进行检测,获取关键点信息和检测框信息,然后根据关键点信息进行人脸矫正,之后进行特征提取,保存人脸特征,
- 另一个是在进行人脸识别时,先根据对接收到的关键点信息,对接收的人脸图片进行人脸矫正,然后在进行人脸识别
- 识别结果:top n和每张图片的uuid返回给计算节点
详细内容
数据结构
- 多个人脸库的管理
using TaskMap = std::map<std::string, Task>
- 一个人脸库,对应一个
Task
类的实例对象,使用map
将人脸库的id与人脸库底层实现连接起来 - 在Service一层,对外抽象出各种对人脸库的操作
- 增加人脸库,
- 删除人脸库,
- 人脸识别,
- 查看人脸库列表
- 每个人脸库的多张人脸的图像管理
using ImageMap = std::map<int64_t, std::string>
- 对每个人脸库的多个图片和信息的管理,提供每个人脸库具备的功能
- 初始化人脸库,
- 清除人脸库,
- 人脸识别
- 检测模型的加载和特征提取功能
using ModelMap = std::map<enum MODEL, struct ModelRuntime *>
- 对人脸检测模型和特征提取模型的管理,提供对模型基本的操作
- 加载模型,
- 增加人脸特征信息,
- 删除人脸特征信息,
- 人脸识别
ZeroMQ
-
具体基础知识,参考
Tools/ZMQ.md
文档 -
使用方式跟网络通信处于一个层次