概述

  • 提供图像库的初始化和反初始化,图像检索等功能
  • 将需要增加的图像和对应的id(唯一)输入,通过模型提取特征
  • 输入需要检索的图像,在图像库中检索,返回top[n]个图像和对应的距离分数,距离分数越小,对应的图像与需要检索的图像越相似

  • 初始化人脸库是,需要输入一张证件照,三张生活照
  • 流程
    • 检索的图像,找出相似度最高的前3张,如果这三张是某一证件照对应的三张生活照,就判定需要检索的图像中的人就是这个证件照,在前端界面显示证件照

使用

  • 输入
    • --search-image <base64-string>
      • 输入base64编码后的字符串
    • --search-image-box <string>
      • 输入图像中人脸索引和坐标信息
      • <string> : <uuid,x1,y1,x2,y2|uuid,x1,y1,x2,y2|...>
      • 注:也支持输入Json格式的字符串,不过需要将字符串写入到文件中,将文件路径传给该参数

模块

  • base
    • 提供基础的工具,例如:锁,计数
  • jpeg
    • 继承Base类
    • 提供 jpeg格式的 图像编解码工具,例如:编码jpeg图像到文件,从文件解码到图片
  • image
    • 提供操作图像的工具
    • 在内存中,描述了图像的属性,例如:图像的长,宽,像素格式
    • 为图像在内存中的句柄,使得程序员可以通过操作该句柄实现对图像的操作
  • box
    • 提供对检测框的抽象
    • 包含了检测框的坐标和操作
  • mat
    • 对检测框对象和图像对象进行了封装,将检测框与图像关联起来
  • detector
    • 提供了通过模型进行检测的工具,例如:人脸检测获取人脸检测框坐标,提取人脸图特征并添加到人脸库
    • 对人脸检测模型和特征提取模型的加载和使用进行了封装
  • task
    • 提供了对任务管理的工具
  • service
    • 提供了对任务管理的工具,例如:启动任务,停止任务,删除任务等
  • server
    • 提供了服务对外操作的工具
  • client
    • 提供了客户端

人脸检测模型管理

特征模型管理

图像清单,人脸库组管理

  • 无结构化数据
  • 按行读取,每一行的信息为id|flag|image_path|\n(分隔符为|)
  • 读取id和flag,通过flag判断id对应的图像是增加还是删除
    • 如果是删除,就不再读取后面的图像路径,直接使用id将人脸库中的图像id删除,删除时,还需要在图像库中查找一下该id是否存在,这就意味着需要将每次增加的图像的id保存下来,
    • 如果是增加,先通过id检查图像库中是否已经存在该id,如果存在,就不再读取,证明已经添加过了;如果不存在,就读取图像路径,调用接口添加图像

其他

  • 批量查询,写个循环,因为spp_searchAPI内部有锁,如果改成批量查询要做数据赋值,反而增加了查询的时间

  • 人脸库组信息

    • 组id
    • 模型文件路径
    • 标志
    • 清单文件
      • 图像id
      • 图像标志
      • 图像路径

动态人脸识别引擎 – 代码构思

概述

  • 服务,