海量图像存储与快速检索
2019-05-22郑星奇周云才王同喜
郑星奇 周云才 王同喜
摘要:本文将介绍海量数据的存储与检索需要的技术与关键算法,并对此系统进行架构设计与实现。其中最主要技术为大数据技术对海量图像数据的存储与检索的优化,使用的相关算法为层次聚类算法和平均哈希算法。
关键词:大数据;Hbase;ElasticSearch;海量数据存储;检索优化
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2019)06-0245-03
1 引言
隨着互联网发展的速度越来越快,数据量的级别也越来越高,人类社会进入了飞速发展的数字信息时代。面对不断扩大的图像数据,传统的存储结构扩展性差,不便于管理和运营,并且消耗大量资源。与此同时,复杂的存储结构也不便于适应日益复杂的用户需求。与此对应,海量图像的检索也面临一系列问题,其中的重点是检索的准确度、速度以及所需信息的完整性。海量图像检索在现实生活中有着大量的应用。但由于海量的图片会占用大量的存储空间,所以图像的存储和检索都会出现性能的瓶颈。
大数据技术的快速发展对海量图片的存储和快速检索带来了良好的发展前景和机遇,尤其是当前被广泛探索应用的Hadoop、Spark等技术,针对TB甚至PB级的数据,其丰富的组件在数据存储和挖掘、分析方面提出了完善的处理方案。
2 国内外发展现状
随着图像技术的发展和广泛应用,图像的存储和检索技术在应用领域的要求越来越高,比如在安全交通监控,电商购物平台,地图信息展示等方面。
在国外,例如google公司,创造了GFS系统,并用BigTable来存储网页的属性信息和它的快照,以此来更加便于网页的搜索。而国外最大的图片信息存储公司Facebook则开发了Haystack作为处理facebook上面分享的照片而设计的对象存储技术。
在国内,以淘宝为代表的图像处理技术开发则开发了TFS系统,它主要是解决海量并发小文件的访问问题。我国在基于内容的图像检索系统的开发起步比外国晚,大约是在1990年之后才开始发展,直到今天一直在探究和研发的路上。比如中科院,阿里巴巴,腾讯,百度等国内互联网公司都已经各自推出了相应的图像检索产品。微软亚洲研究院建立了一个叫作MindFinder的大规模的图像搜索引擎系统,主要用于检索亚洲庞大的图像数据信息。
3 主要技术介绍
3.1 数据存储
从大的角度讲,目前的数据库的类别主要有两种:传统SMP 架构的数据库,主要指传统的关系型数据库,例如MySQL,DB2,Sql Server等;新型数据库,指可以存储大规模数据,支持高并发,扩展性强的新型数据库,例如NoSQL, MPP, NewSQL 等与大数据相关的数据库。
典型的大数据存储技术主要有三种:一是使用MPP架构的新型数据库集群,二是基于Hadoop的技术封装与扩展,三是大数据一体机。
HDFS中处理海量小文件的方法通常是将小文件合并成大文件进行存储,同时为小文件建立索引。典型技术包括使用hadoop自带的一些插件,如SequenceFile 和Archive,但都需要编写程序来合并这些文件,不方便于扩展和广泛的应用,所以我们将会用到hbase存储技术。
由于HDFS主要是解决大文件的问题,所以在Hadoop中提供了两种机制来小文件的存储问题,其中就包括将文件转化为SequenceFile以及转化为HAR文件,这两种方式在一定的层面上解决了小文件存在的问题,但是仍旧存在着不足之处。
将数据存储到Hbase的传统方法是:第一步先把所有的图片上传进入HDFS,然后将这些小文件转换成SequenFile文件。第二步是将转换后的SequenFile文件读取出来,HBase表中的rowkey与列值就用解析后的key和value值表示。我们将基于Hbase并且加上ElasticSearch对存储结构加以改进。
3.2 数据检索
在图像检索方面,主要有以下几种方法:
一是基于文本的图像检索技术,即通过已存在的图像周围的文本信息内容来进行检索。雅虎,谷歌和百度等主流的搜索引擎目前都采用的是这种基于文本图像检索提供服务的。它的优点是符合人们日常的习惯,使用简单,应用广泛,它的缺点是太依赖文本信息而忽略了图像本身的信息,故而有一定的局限性。
二是基于内容的图像检索技术,它主要分为两个部分:即图像特征提取FE(feature extraction)和图像的相似计算SM(similarity Measurement),其中图像特征提取是对图像从视觉上感受到的物理特征就行提取,图像的相似计算则是根据图像特征方法提取出来的特征值进行相似距离(hamming distance)计算,图像特征值之间的相似距离越近,说明图像之间的相似度越高。基于内容的图像检索技术的算法计算量比较大,而且一般只在一些特定的领域有广泛应用,如图像识别,指纹识别和车牌号自动检测等。对于其他不同的领域内,则表现出一定的短板。
4 关键算法
4.1 层次聚类算法
层次聚类就是按照某种方法对数据集进行层次分类,一直到满足条件为止。按照分类的原理不同,层次聚类可分为凝聚和分裂两种类别。在这里主要介绍凝聚型。
凝聚型:假如这里有五个样本x1,x2,x3,x4,x5,每个样本都可以看成一簇,接着选择相近的两个样本组成一簇,如(x1,x2),x3,x4,x5,这时我们可以得到4个簇,然后再把其中的两个相近的簇组成一簇,直到最后所有的样本促组成一个簇就停止。虽然这个过程会比较慢,但这样的存储结构将有助于提高检索的速度。
在层次算法中最重要的就是计算出cluster R与cluster S间的距离,主要有三种方式:
4.2 平均哈希算法
平均哈希算法是一种基于灰度图每个像素与平均值相比较实现的,它的适用范围是对于缩略图和放大图的搜索。算法的主要内容有:
(1) 将图片缩小。首先将图片统一缩小到8*8,即64像素的图片。这样做是为弱化图片的细节部分,仅仅是比较图片之间的结构。
(2) 将图片转化为灰度图。将第一步中的缩放之后的图片转化成256阶的灰度图。
(3) 计算像素的平均值。将第二步处理的图片的所有像素点进行平均值计算。
(4) 像素灰度值比较。将灰度图片的每一个像素进行遍历处理,当出现像素大于平均值时,将结果记录为1,否则记录为0。
(5) 图像特征采集。将上一步每个像素比较后的结果值组合成64个bit位,它们的顺序可以随意,但必须保持一致。这个64位的bit位便是这个图片的特征值hash code。
(6) 特征值对比。使用汉明距离(hamming distance)的方法比较两幅图片的特征值hash code,当汉明距离越小,则说明两张图片越相似,反之,则不相似,如果汉明距离为0,则说明两张图片完全相同。
5 设计与实现
5.1 系统架构设计
系统架构主要层级功能介绍:
(1) 数据的采集。从网络上或者已存在的库中使用python采集数据;对抓取的数据进行清洗,转换;选择合适的存取策略,对图像数据进行聚类分析。
(2) 数据存储。将图像分为两类信息存入Hbase库中。原始图像作单独一列存入数据库中,图像的相关信息做一类存入库中,包括图像的大小,类型等属性信息。对于比较大的图片使用mapreduce对图片进行切片处理。
(3) 图像检索。使用基于哈希的图像检索技术,借助spark平台Elasticsearch搜索引擎对存入的海量图片进行检索和取出。
(4) 图像展示。对取出的图片可以直接放到前端UI上展示,也可以暂时存入Mysql数据库,再按需取出图像进行展示。
5.2 系统实现过程
数据存储:在Hbase建立一个表,用单独的列存储具体的图片,用其他的列存储图片的属性信息,如图片大小,类型,轮廓等。Hbase在存储每个列时,会通过key/value的方式把数据存储在每个单元格之中。
为了加快索引速度,我们将构建基于Hbase+ElasticSearch的二级索引模式。我们首先在hbase中将图片数据hash化,然后构建数据分区分裂表,索引表中对行键进行了改造,增加了索引名称和索引数据。并且与数据对应的索引可以根据数据的分裂而分裂,并使用保持与数据的startkey起始一致。
数据检索:构建二级索引后,我们还可以依此构建ElasticSearch和缓存索引数据。在正式进行检索操作之前,我们要使用继承基类BaseRegionObserver,重写postPut和postDelete方法;开启协处理器,还要使用Hbase Shell激活协处理器中的观察者。
当数据读取进程开始时,我们先访问ElasticSearch,根据索引表中查询到的结果,使用协处理器对数据实际行键进行查找,并访问数据表。得到数据后,通过协处理器将数据返回到客户端。
5.3 系统测试
并发存储吞吐量测试:我们将从单机服务,添加索引以及不添加索引的方式进行比对实验,分别检测10000条到1000万条数据的插入速度,建立集群将会比单机直接存储拥有更高的存储效率。
集群中查询速度测试:我们将从整体统计查询以及实时响应这两个角度进行性能检测,主要测试PB级别数据基础上,不同的结果集数据查询的查询效率,建立索引的集群将比不建立索引的集群查询响应时间更短。结果如下图。
6 结语
在现实的安全监控中,当出现某种紧急情况时,我们需要快速找到目标。如果仅仅靠人力,那将会耗费大量的人力物力。所以研究海量图片的存储和快速检索,对于提高图片查找效率,减少人力物力的不必要浪费有着重要的意义。
参考文献:
[1] 孙玉林,王晓卉.一种基于 Hadoop的海量图片检索策略[J].电子技术与软件工程,2016.
[2] 朱晓丽,赵志刚.一种基于Hbase的海量图片存储技术[J].信息系统工程,2013.
[3] 倪康康.基于哈希算法的图像检索系统[D].西安电子科技大学,2015.
[4] 图像搜索引擎—原理篇[Z].http://blog.csdn.net/hyman_yx/article/details/51773691.
[5] 董長青, 任女尔, 张庆余,等.基于HBase+ElasticSearch的海量交通数据实时存取方案设计[J].2017.
[6] 林悦,基于哈希算法的高维数据的最近邻检索[D]. 浙江大学,2013.
【通联编辑:梁书】