技术栈

  • 对外通讯
    • 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文档

  • 使用方式跟网络通信处于一个层次