基于Spark框架的海量人脸图像检索系统及检索方法与流程

文档序号:12465768阅读:340来源:国知局
基于Spark框架的海量人脸图像检索系统及检索方法与流程

本发明属于视频人脸图像检索技术领域,特别是涉及一种基于Spark框架的海量人脸图像检索系统及检索方法。



背景技术:

近年来随着网络带宽技术和物联网行业的进步,智能手机等智能终端设备和应用迅速普及,围绕图像检索技术的相关研究越来越深入。在传统互联网端,谷歌、百度等大型互联网公司先后推出了以图搜图应用,著名电子商务平台淘宝网推出了通过图片搜索相似商品的功能。在移动互联网端,伴随着互联网知识的高速传播,植物类型识别、宠物狗品种识别等创新应用蓬勃发展。

在人脸搜索领域,目前,普遍采用的人脸图像检索技术为传统的BoVW(Bag of Visual Words)视觉词袋检索模型,其技术要点在于,借鉴了文本检索技术中的词袋模型,通过提取图像中的视觉特征描述符(descriptor,也称特征点)并加以聚类形成视觉词汇表,对于一个待检索的图像,通过检测出的一组视觉词汇来表示,从视觉词汇表中找到相关的单词,计算拥有这些视觉单词的图像跟检索图像的相似度并以此排序,从而得到检索结果。这种方法在大规模人脸图像的场景下,将出现两点瓶颈,一是单机情况下,单位时间内能够处理的人脸图像数量有限,即便是开启多线程,其处理效率依然受限于机器的CPU核心数,无法无限扩展;二是视觉特征描述符的聚类过程缓慢,由于视觉特征描述符是高维向量,如果采用单机进行K均值聚类,其时间消耗将非常高。

鉴于此,有必要设计一种新的基于Spark框架的海量人脸图像检索系统及检索方法用于解决上述技术问题。



技术实现要素:

鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于Spark框架的海量人脸图像检索系统及检索方法,用于解决现有的人脸检索方法效率低的问题。

为实现上述目的及其他相关目的,本发明提供一种基于Spark框架的海量人脸图像检索系统,所述检索系统包括:

前端处理系统,与用户进行交互,用于采集待检索图像并将所述待检索图像发送给Spark分布式流式计算集群,及将检索结果反馈给用户;

与所述前端处理系统连接的Spark分布式流式计算集群,在索引阶段,用于从HDFS分布式文件系统中读取海量人脸图像数据,并对读取的海量人脸图像数据进行分布式并行处理,生成视觉单词词汇表和倒排索引表;在检索阶段,用于对待检索图像进行分布式并行处理,根据视觉单词词汇表和倒排索引表对处理后的待检索图像进行分布式并行检索,生成检索结果,并将检索结果反馈给前端处理系统;

与所述Spark分布式流式计算集群连接的HDFS分布式文件系统,用于存储海量人脸图像数据;

与所述Spark分布式流式计算集群连接的HBase分布式列式数据库,用于存储视觉特征单词词汇表及倒排索引表。

优选地,所述Spark分布式流式计算集群包括:

驱动器,在索引阶段,用于从HDFS分布式文件系统中读取海量人脸图像数据和从执行器中读取局部区域图像,进行拆分后分配给执行器;在检索阶段,用于将前端处理系统发送的待检索图像发送给执行器,再从执行器中读取局部区域图像,进行拆分后重新分配给执行器,以及对局部区域相似图像进行处理,生成相似图像列表并反馈给前端处理系统;

以及和所述驱动器连接的多个执行器,在索引阶段,用于分别接收、处理驱动器分配的人脸图像和局部区域图像,生成视觉单词词汇表和倒排索引表;在检索阶段,用于接收、处理驱动器发送的待检索图像和待检索图像的局部区域图像,并根据视觉单词词汇表和倒排索引表,分别对待检索图像的局部区域图像进行检索,生成局部区域相似图像。

优选地,所述执行器通过OpenCV视频/图像处理库对接收的人脸图像和待检索图像进行人脸检测,识别出局部区域图像。

本发明还提供一种如上述任一项所述的基于Spark框架的海量人脸图像检索系统的检索方法,所述检索方法包括索引阶段和检索阶段,其中,

索引阶段:Spark分布式流式计算集群从HDFS分布式文件系统中读取海量人脸图像数据,并对读取的海量人脸图像数据进行分布式并行处理,生成视觉单词词汇表和倒排索引表,并保存到HBase分布式列式数据库中;

检索阶段:前端处理系统接收到用户请求后,采集待检索图像后并将所述待检索图像发送给Spark分布式流式计算集群;所述Spark分布式流式计算集群对待检索图像进行分布式并行处理后,再从HBase分布式列式数据库中获取视觉单词词汇表及倒排索引表,并采用Spark Transformation及Spark Action操作对处理后的待检索图像进行分布式并行检索,生成检索结果,最后将检索结果通过前端处理系统反馈给用户。

优选地,所述索引阶段包括:

1.1)驱动器从HDFS分布式文件系统中读取海量人脸图像数据,并以图像为粒度进行数据拆分,将读取的人脸图像数据分配给各执行器;

1.2)各执行器分别接收驱动器分配的人脸图像数据,并通过OpenCV视频/图像处理库对接收到的每张人脸图像进行人脸检测,识别出每张人脸图像的局部区域图像,并计算得到每张局部区域图像对应的视觉特征描述符向量;

1.3)驱动器以局部区域图像为粒度对所有执行器中的局部区域图像进行拆分,将同一类局部区域图像分配到同一执行器;

1.4)各执行器根据分配的局部区域图像对应的视觉特征描述符向量,通过聚类算法对其内的视觉特征描述符向量进行聚类,生成视觉单词词汇表并保存到HBase分布式列式数据库中,再通过对视觉单词词汇表中的视觉单词进行分类统计,并根据分类统计结果计算视觉单词的权重,生成倒排索引表,保存到HBase分布式列式数据库中,其中,所述倒排索引表以key-value键值对的形式表示。

优选地,所述检索阶段包括:

2.1)前端处理系统接收用户的检索请求后,采集待检索图像,并将所述待检索图像发送给驱动器;

2.2)驱动器将接收的待检索图像发送给任一执行器,该执行器通过OpenCV视频/图像处理库对接收的待检索图像进行人脸检测,识别出所述待检索图像的局部区域图像,并计算得到每张局部区域图像对应的视觉特征描述符向量;

2.3)驱动器以局部区域图像为粒度对待检索图像的所有局部区域图像进行拆分,使任一局部区域图像均对应一执行器;

2.4)各执行器分别从HBase分布式列式数据库中读取视觉单词词汇表,根据视觉单词词汇表对其内的局部区域图像对应的视觉特征描述符向量进行分类统计,得到视觉特征描述符向量对应的视觉单词及该视觉单词对应的key-value键值对,并统计该视觉单词出现的次数;

2.5)各执行器分别从HBase分布式列式数据库中读取倒排索引表,并采用Spark Transformation操作中的join算子将2.4)中获得的key-value键值对与倒排索引表进行匹配,得到局部区域相似图像;

2.6)驱动器根据各局部区域相似图像的key-value键值对,进行分类统计,得到待检索图像的相似图像,并计算各相似图像的权重,再根据计算结果采用Spark Action操作中的collect算子对相似图像进行降序排列,得到相似图像列表,最后通过前端处理系统反馈给用户。

优选地,所述key-value键值对包括key和value两部分,其中,

所述key包括<局部区域ID_视觉单词ID>;

所述value包括含有该视觉单词的人脸图像列表,及列表中该视觉单词在对应的人脸图像中的权重。

优选地,所述局部区域图像包括左眼、右眼、鼻子、左嘴角、及右嘴角。

优选地,所述局部区域图像还包括额头、左眉毛、右眉毛、左耳朵、右耳朵、下颌、左脸颊、或右脸颊中的一种或多种。

如上所述,本发明的基于Spark框架的海量人脸图像检索系统及检索方法,具有以下有益效果:

1.本发明通过将Spark框架与人脸检索相结合,形成了基于Spark框架的分布式人脸图像检索系统,并利用多个执行器分布式并行处理的方式,解决了在索引阶段和检索阶段进行大数据处理时效率低的问题,大大提高了索引构建及图像检索的速度。

2.本发明所述的检索系统能够根据实际场景的数据规模及划分的局部区域图像进行合理增加或减少执行器的数量,具有极好的可扩展性。

3.本发明所述检索方法通过采用局部区域划分方法将人脸图像划分成多个局部区域图像,在进行人脸图像检索时,不仅减少了视觉单词噪点,还提高了检索速度;而且划分的局部区域数量越多,检索速度提升越大。

附图说明

图1显示为本发明所述检索系统的结构示意图。

图2显示为本发明所述检索方法的流程图。

图3显示为本发明所述索引阶段的流程图。

图4显示为本发明所述检索阶段的流程图。

元件标号说明

1 Spark分布式流式计算集群

1.1)~1.4) 步骤

2.1)~2.6) 步骤

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。

请参阅图1至图4。需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

实施例一

如图1所示,本实施例提供一种基于Spark框架的海量人脸图像检索系统,所述检索系统包括:

前端处理系统,与用户进行交互,用于采集待检索图像并将所述待检索图像发送给Spark分布式流式计算集群,及将检索结果反馈给用户;

与所述前端处理系统连接的Spark分布式流式计算集群,在索引阶段,用于从HDFS分布式文件系统中读取海量人脸图像数据,并对读取的海量人脸图像数据进行分布式并行处理,生成视觉单词词汇表和倒排索引表;在检索阶段,用于对待检索图像进行分布式并行处理,根据视觉单词词汇表和倒排索引表对处理后的待检索图像进行分布式并行检索,生成检索结果,并将检索结果反馈给前端处理系统;

与所述Spark分布式流式计算集群连接的HDFS分布式文件系统,用于存储海量人脸图像数据;

与所述Spark分布式流式计算集群连接的HDFS分布式文件系统,用于存储视觉特征单词词汇表及倒排索引表。

具体的,所述Spark分布式流式计算集群包括:

驱动器,在索引阶段,用于从HDFS分布式文件系统中读取海量人脸图像数据和从执行器中读取局部区域图像,进行拆分后分配给执行器;在检索阶段,用于将前端处理系统发送的待检索图像发送给执行器,再从执行器中读取局部区域图像,进行拆分后重新分配给执行器,以及对局部区域相似图像进行处理,生成相似图像列表并反馈给前端处理系统;

以及和所述驱动器连接的多个执行器,在索引阶段,用于分别接收、处理驱动器分配的人脸图像和局部区域图像,生成视觉单词词汇表和倒排索引表;在检索阶段,用于接收、处理驱动器发送的待检索图像和待检索图像的局部区域图像,并根据视觉单词词汇表和倒排索引表,分别对待检索图像的局部区域图像进行检索,生成局部区域相似图像。

需要说明的是,所述执行器通过OpenCV视频/图像处理库对接收的人脸图像和待检索图像进行人脸检测,识别出局部区域图像;其中,所述局部区域图像包括左眼、右眼、鼻子、左嘴角、及右嘴角。

进一步需要说明的是,所述局部区域图像还可以包括额头、左眉毛、右眉毛、左耳朵、右耳朵、下颌、左脸颊、或右脸颊中的一种或多种。

实施例二

如图2所示,本实施例还提供一种如实施例一所述的基于Spark框架的海量人脸图像检索系统的检索方法,所述检索方法包括索引阶段和检索阶段,其中,

索引阶段:Spark分布式流式计算集群从HDFS分布式文件系统中读取海量人脸图像数据,并对读取的海量人脸图像数据进行分布式并行处理,生成视觉单词词汇表和倒排索引表,并保存到HBase分布式列式数据库中;

检索阶段:前端处理系统接收到用户请求后,采集待检索图像后并将所述待检索图像发送给Spark分布式流式计算集群;所述Spark分布式流式计算集群对待检索图像进行分布式并行处理后,再从HBase分布式列式数据库中获取视觉单词词汇表及倒排索引表,并采用Spark Transformation及Spark Action操作对处理后的待检索图像进行分布式并行检索,生成检索结果,最后将检索结果通过前端处理系统反馈给用户。

下面请参阅图3至图4对索引阶段和检索阶段进行详细说明。

如图3所示,所述索引阶段包括:

1.1)驱动器从HDFS分布式文件系统中读取海量人脸图像数据,并以图像为粒度进行数据拆分,将读取的人脸图像数据分配给各执行器。

优选地,在本实施例中,驱动器从HDFS分布式文件系统中读取10万张人脸图像数据,并将10万张人脸图像平均分配给5个执行器,即每个执行器接收2万张人脸图像。

1.2)各执行器分别接收驱动器分配的人脸图像数据,并通过OpenCV视频/图像处理库对接收到的每张人脸图像进行人脸检测,识别出每张人脸图像的局部区域图像,并计算得到每张局部区域图像对应的视觉特征描述符向量。

具体的,所述局部区域图像包括左眼、右眼、鼻子、左嘴角、及右嘴角;当然,所述局部区域还包括额头、左眉毛、右眉毛、左耳朵、右耳朵、下颌、左脸颊、或右脸颊中的一种或多种。优选地,在本实施例中,所述局部区域图像包括左眼、右眼、鼻子、左嘴角、及右嘴角。

具体的,处理局部区域图像的方法为任一种能够得到视觉特征描述符向量的方法,优选地,在本实施例中,采用尺度不变特征转换算子(SIFT:Scale-invariant feature transform)计算得到每张局部区域图像对应的视觉特征描述符向量。

具体为每个执行器各接收2万张人脸图像,通过OpenCV视频/图像处理库在每张人脸图像上识别出左眼、右眼、鼻子、左嘴角、及右嘴角5个局部区域图像,再通过SIFT计算得到每张局部区域图像对应的视觉特征描述符向量。

需要说明的是,通过对海量人脸图像进行拆分,并通过使用Spark Transformation操作中的map、flatMap、reduceByKey算子对多个执行器进行分布式并行处理,大大提高了处理速度。

1.3)驱动器以局部区域图像为粒度对所有执行器中的局部区域图像进行拆分,将同一类局部区域图像分配到同一执行器。

具体为驱动器对5个执行器中的50万个局部区域图像进行拆分,将同一类的局部区域图像分配到同一执行器,即将10万个左眼分配到一个执行器中,10万个右眼分配到一个执行器中,10万个鼻子分配到一个执行器中,10万个左嘴角分配到一个执行器中,10万个右嘴角分配到一个执行器中。

1.4)各执行器根据分配的局部区域图像对应的视觉特征描述符向量,通过聚类算法对其内的视觉特征描述符向量进行聚类,生成视觉单词词汇表并保存到HBase分布式列式数据库中,再通过对视觉单词词汇表中的视觉单词进行分类统计,并根据分类统计结果计算视觉单词的权重,生成倒排索引表,保存到HBase分布式列式数据库中,其中,所述倒排索引表以key-value键值对的形式表示。

具体的,所述聚类算法为任一种能实现对所述视觉特征描述符向量进行聚类的算法,优选地,在本实施例中,所述聚类算法为k-means(k-平均算法)聚类算法。

具体的,所述key-value键值对包括key和value两部分,其中,

所述key包括<局部区域ID_视觉单词ID>;

所述value包括含有该视觉单词的人脸图像列表,及列表中该视觉单词在对应的人脸图像中的权重。

具体为每个执行器均采用k-means聚类算法对接收到的10万个局部区域图像对应的视觉特征描述符向量进行聚类,生成视觉单词词汇表,并保存到HBase分布式列式数据库中;然后在通过对视觉单词词汇表中的视觉单词进行分类统计,并根据分类统计结果计算视觉单词的权重,生成倒排索引表,保存到HBase分布式列式数据库中。

如图4所示,所述检索阶段包括:

2.1)前端处理系统接收用户的检索请求后,采集待检索图像,并将所述待检索图像发送给驱动器。

2.2)驱动器将接收的待检索图像发送给任一执行器,该执行器通过OpenCV视频/图像处理库对接收的待检索图像进行人脸检测,识别出所述待检索图像的局部区域图像,并计算得到每张局部区域图像对应的视觉特征描述符向量。

具体为执行器接收到待检索图像后,通过OpenCV视频/图像处理库在待检索图像上识别出左眼、右眼、鼻子、左嘴角、及右嘴角5个局部区域图像,再通过SIFT计算得到每个局部区域图像对应的视觉特征描述符向量。

2.3)驱动器以局部区域图像为粒度对待检索图像的所有局部区域图像进行拆分,使任一局部区域图像均对应一执行器;

具体为驱动器对待检索图像的5个局部区域图像进行拆分,将局部区域图像与执行器一一对应,即将左眼分配到一个执行器中,右眼分配到一个执行器中,鼻子分配到一个执行器中,左嘴角分配到一个执行器中,右嘴角分配到一个执行器中。

2.4)各执行器分别从HBase分布式列式数据库中读取视觉单词词汇表,根据视觉单词词汇表对其内的局部区域图像对应的视觉特征描述符向量进行分类统计,得到视觉特征描述符向量对应的视觉单词及该视觉单词对应的key-value键值对,并统计该视觉单词出现的次数。

2.5)各执行器分别从HBase分布式列式数据库中读取倒排索引表,并采用Spark Transformation操作中的join算子将2.4)中获得的key-value键值对与倒排索引表进行匹配,得到局部区域相似图像;

2.6)驱动器根据各局部区域相似图像的key-value键值对,进行分类统计,得到待检索图像的相似图像,并计算各相似图像的权重,再根据计算结果采用Spark Action操作中的collect算子对相似图像进行降序排列,得到相似图像列表,最后通过前端处理系统反馈给用户。

综上所述,本发明的基于Spark框架的海量人脸图像检索系统及检索方法,具有以下有益效果:

1.本发明通过将Spark框架与人脸检索相结合,形成了基于Spark框架的分布式人脸图像检索系统,并利用多个执行器分布式并行处理的方式,解决了在索引阶段和检索阶段进行大数据处理时效率低的问题,大大提高了索引构建及图像检索的速度。

2.本发明所述的检索系统能够根据实际场景的数据规模及划分的局部区域图像进行合理增加或减少执行器的数量,具有极好的可扩展性。

3.本发明所述检索方法通过采用局部区域划分方法将人脸图像划分成多个局部区域图像,在进行人脸图像检索时,不仅减少了视觉单词噪点,还提高了检索速度;而且划分的局部区域数量越多,检索速度提升越大。

所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1