本发明涉及工智能和数据检索技术领域,具体的说,是涉及一种相似人脸快速搜索及有效存储的方法。
背景技术:
目前人脸识别系统广泛应用于平安城市、交通枢纽、智慧医疗、商业连锁、边检等各行各业,这也导致了越来越多的企业投身安防领域,但是人脸识别技术本身门槛较高,虽然国内有诸如商汤、旷视、依图、云从等专门从事人脸识别算法研究的企业,但是绝大多数企业仍然无法在短期内投入巨大的研发成本进行算法研究,因此它们更愿意采用第三方人脸识别sdk来针对行业应用做定制化的开发。
各个算法厂家推出的人脸识别sdk虽然识别性能各有差异,但它们都有一个共同点就是人脸库容量是受限制的,人脸库容量越大,sdk价格就越高。
这种模式导致人脸库容量伸缩性很差,不适合有些应用场景,比如摄像机实时抓拍的人脸图片送入sdk完成人脸入库操作。
在入库前,sdk会对该人脸图片进行人脸识别,对于达到识别阈值的人脸会被分配相同的personid并认定为相似人脸,后期通过搜索相同的personid并结合摄像机信息来判断是否是同一个人以及分析出该人的行动轨迹,因此需要不断地将摄像机实时采集的人脸数据入库,这样会导致人脸库很容易达到上限,一旦达到上限,后续抓拍的人脸将不能有效识别和入库存储。
此外,传统的人脸识别方法需要将抓拍的人脸与人脸库里每张人脸进行人脸比对,从而搜索出相似度最高的人脸,一旦人脸库规模很大,相似人脸搜索的效率不但会降低,而且搜索失败的人脸图片要么被丢弃,要么被简单地存储在数据库里,不能有助于后期的相似人脸搜索。
提高人脸库容量伸缩性并实现快速的相似人脸搜索和有效存储,成为我们当前需要解决的问题。
技术实现要素:
针对上述现有技术中的不足,本发明提供一种提高人脸库容量伸缩性,减少人脸识别运算量,加快搜索速度的相似人脸快速搜索及有效存储的方法。
本发明所采取的技术方案是:
一种相似人脸快速搜索及有效存储的方法,包括如下步骤:(1)人脸信息列表创建;在mongodb数据库里创建一个用于存储人脸条目的人脸信息列表;(2)相似人脸搜索:将人脸条目中的人脸信息和抓拍的人脸图片一起送入sdk进行人脸比对;将人脸识别结果连同抓拍的人脸图片一起送入更新人脸信息列表步骤;(3)更新人脸信息列表:根据抓拍的人脸图片来组装新的人脸条目,更新人脸信息列表。
所述人脸信息列表创建步骤,人脸信息列表初始化为空。
所述相似人脸搜索,接收到摄像机传来的人脸图片后,首先判断人脸信息列表是否为空,如果不为空,则从列表里提取索引为index=index 1(index初始为0)的人脸条目。
所述相似人脸搜索步骤,比对阈值设置为faceverify_threshold;
两张图片经过sdk比对之后的相似度为similarity;
如果similarity>faceverify_threshold,则说明两张图片为相似人脸,接着将比对结果和抓拍的人脸图片一起送入更新人脸信息列表步骤;
如果similarity<faceverify_threshold,则说明两张图片不是相似人脸,继续顺序提取索引为index=index 1的下一条人脸条目进行人脸比对,直到找到相似人脸并进入更新人脸信息列表步骤,或者遍历完整个人脸信息列表仍没找到相似人脸,则遍历人脸库进行人脸识别;
接收从相似人脸搜索步骤发来的信息;
首先从信息中判断是否存在人脸信息列表的信息;
如果存在,则说明在原来的人脸信息列表中存在相似人脸,那么在新的人脸条目里的相似人脸索引字段设置为指向人脸信息列表里相似人脸所对应的人脸条目的索引号,抓拍的人脸图片写入人脸信息字段,人脸库索引字段设置为空;
如果不存在,则继续判断是否存在人脸库信息,如果在人脸库里存在相似人脸信息,则新的人脸条目里的人脸库索引字段设置为指向人脸库里相似人脸的索引号,相似人脸索引字段设置为空,抓拍的人脸图片写入人脸信息字段;
如果人脸库里不存在相似人脸,则抓拍的人脸图片写入人脸信息字段,相似人脸索引字段和人脸库索引字段均设置为空;
通过上述流程组装了一条新的人脸条目,将该条目插入人脸信息列表完成更新人脸信息列表操作。
本发明相对现有技术的有益效果:
本发明相似人脸快速搜索及有效存储的方法,将抓拍的人脸图片采用相似人脸链式结构关联和人脸库结合的方式进行相似人脸快速搜索,并用mongodb数据库存储关联的相似人脸,不但消除了原有人脸库容量限制,而且减少了人脸搜索运算量,提高了搜索速度,与此同时,本发明中的存储人脸的mongodb数据库容量大小根据实际配置的硬盘大小动态变化,使系统在sdk人脸库容量固定的情况下,大幅提高sdk人脸库容量伸缩性,并在人脸识别领域里具有较好的实用价值。
附图说明
图1是本发明相似人脸快速搜索及有效存储的方法的功能框图;
图2为本发明相似人脸快速搜索及有效存储的方法中人脸信息列表及其内部人脸条目的数据结构图;
图3为本发明相似人脸快速搜索及有效存储的方法中相似人脸搜索流程图;
图4为本发明相似人脸快速搜索及有效存储的方法中更新人脸信息列表流程图;
图5为本发明相似人脸快速搜索及有效存储的方法中相似人脸链式关联示意图;
图6为本发明相似人脸快速搜索及有效存储的方法中人脸信息列表和人脸库初始化状态图;
图7为本发明相似人脸快速搜索及有效存储的方法中人脸信息列表与人脸库关系图;
图8为本发明相似人脸快速搜索及有效存储的方法中相似人脸关联关系图。
具体实施方式
以下参照附图及实施例对本发明进行详细的说明:
如图1所示,本发明一种相似人脸快速搜索及有效存储的方法包括人脸信息列表创建、相似人脸搜索和更新人脸信息列表三大步骤,这三大步骤具体如下:
(1)人脸信息列表创建步骤:系统使能后,在mongodb数据库里创建一个用于存储人脸条目的人脸信息列表,该列表初始化为空。人脸信息列表和人脸条目数据结构如图2所示,人脸信息列表创建成功后进入相似人脸搜索步骤。
(2)相似人脸搜索步骤:如图3所示,接收到摄像机传来的人脸图片后,首先判断人脸信息列表是否为空,如果不为空,则从列表里提取索引为index=index 1(index初始为0)的人脸条目,将人脸条目中的人脸信息和抓拍的人脸图片一起送入sdk进行人脸比对,假设比对阈值设置为faceverify_threshold,两张图片经过sdk比对之后的相似度为similarity,如果similarity>faceverify_threshold,则说明两张图片为相似人脸,接着将比对结果和抓拍的人脸图片一起送入更新人脸信息列表步骤;如果similarity<faceverify_threshold,则说明两张图片不是相似人脸,继续顺序提取索引为index=index 1的下一条人脸条目进行人脸比对,直到找到相似人脸并进入更新人脸信息列表步骤,或者遍历完整个人脸信息列表仍没找到相似人脸,则遍历人脸库进行人脸识别,并将人脸识别结果连同抓拍的人脸一起送入更新人脸信息列表步骤。
(3)更新人脸信息列表步骤:主要是根据抓拍的人脸图片来组装新的人脸条目,然后更新人脸信息列表。如图4所示,接收从相似人脸搜索步骤发来的信息,首先从信息中判断是否存在人脸信息列表的信息,如果存在,则说明在原来的人脸信息列表中存在相似人脸,那么在新的人脸条目里的相似人脸索引字段设置为指向人脸信息列表里相似人脸所对应的人脸条目的索引号,抓拍的人脸图片写入人脸信息字段,人脸库索引字段设置为空;
如果不存在,则继续判断是否存在人脸库信息,如果在人脸库里存在相似人脸信息,则新的人脸条目里的人脸库索引字段设置为指向人脸库里相似人脸的索引号,相似人脸索引字段设置为空,抓拍的人脸图片写入人脸信息字段;
如果人脸库里不存在相似人脸,则抓拍的人脸图片写入人脸信息字段,相似人脸索引字段和人脸库索引字段均设置为空。
通过上述流程组装了一条新的人脸条目,将该条目插入人脸信息列表完成更新人脸信息列表操作。
经过上述步骤,人脸条目里的相似人脸索引将人脸信息列表里的相似人脸按照链式结构相互关联起来,而人脸条目里的人脸库索引则将人脸信息列表与人脸库里相似人脸相互关联起来。如图5所示,人脸条目a、b、c在人脸信息列表中的位置不一定是顺序排列的,而有些人脸条目不一定与人脸库相关联,即抓拍的人脸在库里面找不到相似人脸。
下面结合图6-图8来说明相似人脸搜索及相互关联的过程。
(1)如图6所示,假设人脸库里有m张人脸,人脸信息列表初始化为空。
(2)当第一张抓拍的人脸送入系统,由于人脸信息列表为空,所以直接遍历人脸库搜索相似人脸,如果在人脸库里找到相似人脸,则建立关联关系;如果没有找到相似人脸则不建立关联关系。接着将抓拍的人脸组装成新的人脸条目插入人脸信息列表,如图7所示,
(3)对于后续抓拍的人脸图片,首先在人脸信息列表里搜索相似人脸,搜索到则建立关联;没搜索到则在人脸库里搜索相似人脸,找到则与人脸库建立关联;
接着组建新的人脸条目并插入人脸信息列表中。最终相似人脸将在人脸信息列表里或人脸库里建立关联,如图8所示,人脸条目n、人脸条目4和人脸条目1是相似人脸,在人脸信息列表里建立了关联关系,而人脸条目1又与人脸库里的人脸库图片i建立的了关联,由此说明人脸条目n、人脸条目4、人脸条目1和人脸库图片i是同一个人;人脸条目m、人脸条目3和人脸条目2是相似人脸,但人脸条目2跟人脸库图片没有建立关联,说明人脸条目2存储的人脸在人脸库里找不到相似人脸。
本发明相似人脸快速搜索及有效存储的方法,所设计的链式结构能够实现把抓拍的人脸与人脸库里的相似人脸关联起来,同时又摒弃了传统的需要遍历整个人脸库里的人脸来进行比对从而获得相似人脸的方法;只需要在人脸信息列表里找到第一个相似的人脸,并由此相似人脸的关联信息追溯到人脸库。
本发明相似人脸快速搜索及有效存储的方法,对于非人脸库的人脸,将它们放置在人脸库外的人脸信息列表里存储,并把它们中的相似人脸关联起来。
以上所述,仅是本发明的较佳实施例而已,并非对本发明的结构作任何形式上的限制。凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均属于本发明的技术方案范围内。
1.一种相似人脸快速搜索及有效存储的方法,其特征在于,包括如下步骤:(1)人脸信息列表创建;在mongodb数据库里创建一个用于存储人脸条目的人脸信息列表;(2)相似人脸搜索;将人脸条目中的人脸信息和抓拍的人脸图片一起送入sdk进行人脸比对;将人脸识别结果连同抓拍的人脸图片一起送入更新人脸信息列表步骤;(3)更新人脸信息列表;根据抓拍的人脸图片来组装新的人脸条目,更新人脸信息列表。
2.根据权利要求1所述相似人脸快速搜索及有效存储的方法,其特征在于:所述人脸信息列表创建步骤,人脸信息列表初始化为空。
3.根据权利要求1所述相似人脸快速搜索及有效存储的方法,其特征在于:
所述相似人脸搜索,接收到摄像机传来的人脸图片后,首先判断人脸信息列表是否为空,如果不为空,则从列表里提取索引为index=index 1的人脸条目。
4.根据权利要求1所述相似人脸快速搜索及有效存储的方法,其特征在于:
所述相似人脸搜索步骤,比对阈值设置为faceverify_threshold;
两张图片经过sdk比对之后的相似度为similarity;
如果similarity>faceverify_threshold,则说明两张图片为相似人脸,接着将比对结果和抓拍的人脸图片一起送入更新人脸信息列表步骤;
如果similarity<faceverify_threshold,则说明两张图片不是相似人脸,继续顺序提取索引为index=index 1的下一条人脸条目进行人脸比对,直到找到相似人脸并进入更新人脸信息列表步骤,或者遍历完整个人脸信息列表仍没找到相似人脸,则遍历人脸库进行人脸识别。
5.根据权利要求1所述相似人脸快速搜索及有效存储的方法,其特征在于:所述更新人脸信息列表步骤,
接收从相似人脸搜索步骤发来的信息;
首先从信息中判断是否存在人脸信息列表的信息;
如果存在,则说明在原来的人脸信息列表中存在相似人脸,那么在新的人脸条目里的相似人脸索引字段设置为指向人脸信息列表里相似人脸所对应的人脸条目的索引号,抓拍的人脸图片写入人脸信息字段,人脸库索引字段设置为空;
如果不存在,则继续判断是否存在人脸库信息,如果在人脸库里存在相似人脸信息,则新的人脸条目里的人脸库索引字段设置为指向人脸库里相似人脸的索引号,相似人脸索引字段设置为空,抓拍的人脸图片写入人脸信息字段;
如果人脸库里不存在相似人脸,则抓拍的人脸图片写入人脸信息字段,相似人脸索引字段和人脸库索引字段均设置为空;
通过上述流程组装了一条新的人脸条目,将该条目插入人脸信息列表完成更新人脸信息列表操作。
技术总结