概述
- 提供图像库的初始化和反初始化,图像检索等功能
- 将需要增加的图像和对应的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_search
API内部有锁,如果改成批量查询要做数据赋值,反而增加了查询的时间 -
人脸库组信息
- 组id
- 模型文件路径
- 标志
- 清单文件
- 图像id
- 图像标志
- 图像路径
动态人脸识别引擎 – 代码构思
概述
- 服务,