林文煜++戴青云++曹江中++何小明++李能
摘 要:針對(duì)傳統(tǒng)基于內(nèi)容的圖像檢索系統(tǒng)在存儲(chǔ)、處理、檢索海量圖像等方面的不足,借助Hadoop分布式技術(shù)和HBase面向列的數(shù)據(jù)庫對(duì)海量數(shù)據(jù)出色的讀寫性能,提出了一種適用于海量圖像數(shù)據(jù)存儲(chǔ)與處理的檢索框架。該框架提供處理圖像數(shù)據(jù)的可序列化數(shù)據(jù)類型,并通過通用的輸入模塊實(shí)現(xiàn)海量圖像的輸入和數(shù)據(jù)類型轉(zhuǎn)換,為現(xiàn)有的圖像處理、特征提取等算法的并行處理提供可行的方案。
關(guān)鍵詞: 海量圖像; 檢索框架; 并行處理
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)09-0212-04
Designed and Implementation of An Content-based Image Retrieval Framework for Magnanimity Image
LIN Wen-yu,DAI Qing-yun,CAO Jiang-zhong, HE Xiao-ming,LI Neng
(Guangdong University of Technology, Guangzhou 510006, China)
Abstract:With the advantage of the I/O performance of mass data of Hadoop distributed technology and HBase column oriented database, a new retrieval framework is put forword for overcoming the shortage of data storage, processing, real-time retrieval with a very large image database. The retrieval framework is applied to storing and processing the huge amounts of image data. It provides a serializable data type for image data processing, and inputs large image and converts data types by a general input module. Thus the framework can provide a feasible scheme for parallel processing of image processing and feature extraction algorithms.
Key words:magnanimity image; retrieval framework; parallel processing
伴隨著計(jì)算機(jī)與移動(dòng)電子設(shè)備的快速發(fā)展與廣泛應(yīng)用,各領(lǐng)域各行業(yè)的圖像數(shù)據(jù)也日益增多。如何從海量的數(shù)字圖像中快速有效地檢索出有價(jià)值有意義的信息,成為了人們面臨的一大難題,也促使了大量學(xué)者投身于圖像檢索技術(shù)的研究中。單從圖像檢索技術(shù)的發(fā)展而言,從基于文本標(biāo)注的圖像檢索到現(xiàn)今各種基于圖像內(nèi)容的檢索方法使得對(duì)圖像特征的處理、特征提取、相似度比對(duì)等方面現(xiàn)已出現(xiàn)許多較為成熟的算法[1]。但對(duì)于海量圖像的檢索而言,除了對(duì)現(xiàn)有的圖像的處理、表達(dá)與度量等方面的要求外,還增加了對(duì)海量圖像數(shù)據(jù)存儲(chǔ)的需求,以及對(duì)整個(gè)海量圖像數(shù)據(jù)集的處理效率的要求。
傳統(tǒng)的基于內(nèi)容的圖像檢索,通過在單個(gè)計(jì)算機(jī)上以單線程對(duì)圖像進(jìn)行處理、特征提取,再將提取出的圖像特征數(shù)據(jù)存入關(guān)系型數(shù)據(jù)庫。在檢索請(qǐng)求發(fā)起時(shí),通過遍歷關(guān)系數(shù)據(jù)庫將查詢圖像的特征與全庫特征進(jìn)行比對(duì)并對(duì)比對(duì)結(jié)果進(jìn)行排序,從而獲得檢索的結(jié)果。依賴單計(jì)算機(jī)的處理能力對(duì)現(xiàn)今圖像數(shù)據(jù)增長(zhǎng)的急速形勢(shì)而言,傳統(tǒng)的圖像處理技術(shù)顯然是杯水車薪。即使通過多線程技術(shù)來處理海量圖像也不能完全解決對(duì)海量圖像存儲(chǔ)與處理效率的問題。隨著大數(shù)據(jù)概念的興起及其存儲(chǔ)與處理技術(shù)的成熟,采用Hadoop技術(shù)與HBase技術(shù)的基于內(nèi)容的海量圖像框架,不僅可以解決海量圖像的存儲(chǔ)與數(shù)據(jù)傳輸?shù)膯栴},還能將原本設(shè)計(jì)的圖像檢索算法直接移植到分布式環(huán)境中并行處理,依靠MapReduce集群的并行計(jì)算能力,實(shí)現(xiàn)對(duì)海量圖像的檢索。
海量圖像中,超過八成的圖像是容量在數(shù)MB以內(nèi)的小文件,不適合使用HDFS等流式訪問的大文件分布式存儲(chǔ)技術(shù)。而基于HBase的海量圖片存儲(chǔ)技術(shù)方案,實(shí)現(xiàn)系統(tǒng)層的小文件合并、全局名字空間、并具有良好的通用性[2]。
1技術(shù)背景
1.1 基于內(nèi)容的圖像檢索技術(shù)
針對(duì)圖像本身的數(shù)據(jù)內(nèi)容的操作與處理是基于內(nèi)容的圖像檢索的重要特點(diǎn)。具體處理流程如圖1所示。
對(duì)于圖像特征的提取而言,雖然在實(shí)現(xiàn)的算法上各有不同,但處理對(duì)象都是圖像數(shù)據(jù),而算法提取的結(jié)果往往是能以文本表示的矩陣或數(shù)字?,F(xiàn)有計(jì)算機(jī)的圖像處理接口使得對(duì)數(shù)字圖像數(shù)據(jù)的存儲(chǔ)與讀取簡(jiǎn)化為字節(jié)流的獲取與輸出,而基于內(nèi)容的圖像檢索技術(shù)的研發(fā)人員專注于圖像處理算法的研究,而不必在存儲(chǔ)與讀取圖像方面耗費(fèi)過多的精力與資源,這也是現(xiàn)今基于內(nèi)容的圖像檢索技術(shù)快速發(fā)展的重要原因之一。
1.2 基于Hadoop的分布式技術(shù)
Hadoop的核心是HDFS分布式文件系統(tǒng)和MapReduce分布式計(jì)算框架,它提供了一系列分布式文件系統(tǒng)和通用的I/O的組件和接口,更提供了分布式數(shù)據(jù)處理的模式和執(zhí)行環(huán)境。
MapReduce是一種用于數(shù)據(jù)處理的簡(jiǎn)單編程模型,支持包括Java、C++和Python等多種編程語言。在本質(zhì)上,MapReduce的程序是并行化的,這意味著對(duì)大規(guī)模的數(shù)據(jù)分析能夠在足夠多的廉價(jià)機(jī)器上高效的并行執(zhí)行。并行化處理大型數(shù)據(jù)集的能力正是MapReduce框架的最大優(yōu)勢(shì)。
1.3 HBase數(shù)據(jù)庫
HBase是一個(gè)分布式的、持久的、強(qiáng)一致性的數(shù)據(jù)存儲(chǔ)系統(tǒng),性能優(yōu)異的讀寫性能。它是列存儲(chǔ)數(shù)據(jù)庫,底層通過HDFS做數(shù)據(jù)存儲(chǔ),更支持MapReduce的批量式計(jì)算和隨機(jī)查詢。
HBase是用Java編寫的,提供了原生的操作API,同時(shí)也支持用其他編程語音訪問HBase。HBase的數(shù)據(jù)和坐標(biāo)都是以字節(jié)數(shù)組的形式存儲(chǔ),這在間接上支持存儲(chǔ)任意的數(shù)據(jù)類型。HBase只存放有內(nèi)容的表格單元,數(shù)據(jù)文件的稀疏性非常適合存儲(chǔ)文件數(shù)據(jù)[3]。
1.3常見的分布式圖像檢索框架
現(xiàn)在常見的分布式圖像檢索方法是部分分布式實(shí)現(xiàn)。部分分布式實(shí)現(xiàn)是指,通過借用傳統(tǒng)的圖像特征提取算法,將圖像特征提取后存入關(guān)系數(shù)據(jù)庫,再通過MapReduce處理文本化后的圖像特征文件[4]。
面對(duì)海量的圖像數(shù)據(jù),沒有把對(duì)圖像的處理過程通過并行化技術(shù)來實(shí)現(xiàn)這將極大的影響整體的檢索效率。不僅如此,面對(duì)圖像來源的多變與不確定性是很難保證對(duì)圖像數(shù)據(jù)的傳輸與存儲(chǔ),更無法對(duì)其進(jìn)行并行處理與檢索。
2框架設(shè)計(jì)與實(shí)現(xiàn)
2.1框架整體架構(gòu)
Hadoop集群具有硬件成本低廉、集群規(guī)模靈活等優(yōu)勢(shì),而其承載的MapReduce應(yīng)用具有高效的并行計(jì)算能力。在框架的設(shè)計(jì)中也需要借助MapReduce框架的來開發(fā)對(duì)海量圖像、圖像特征數(shù)據(jù)的并行化處理程序,實(shí)現(xiàn)對(duì)海量圖像數(shù)據(jù)的高效處理,既能以圖像的可序列化數(shù)據(jù)類型將圖像在分布式環(huán)境中存儲(chǔ)、傳輸和操作,又能移植現(xiàn)有的成熟的圖像特征提取等算法。為了對(duì)圖像數(shù)據(jù)進(jìn)行快速的查詢與壓縮式存儲(chǔ),存儲(chǔ)圖像的環(huán)境需要使用HBase面向列擴(kuò)展的分布式數(shù)據(jù)庫,圖像以字節(jié)數(shù)組的形式存于其中,以較為出色的讀寫性能支撐分布式圖像檢索的運(yùn)行。因此選擇以HBase為數(shù)據(jù)存儲(chǔ)庫,以MapReduce程序?qū)崿F(xiàn)并行處理模塊,建立海量分布式圖像檢索框架。
檢索框架主要分為圖像輸入模塊、分布式集群模塊和檢索結(jié)果顯示模塊。圖像輸入模塊以獲取網(wǎng)絡(luò)圖像為基礎(chǔ),承載著采集圖像文件并轉(zhuǎn)換為設(shè)計(jì)的可序列化圖像數(shù)據(jù)類型,隨后轉(zhuǎn)為字節(jié)數(shù)組存入HBase的圖像表中等數(shù)據(jù)輸入工作。分布式集群模塊以可序列化的圖像數(shù)據(jù)類型為接口,通過移植現(xiàn)有圖像預(yù)處理、特征提取和相似度比對(duì)等算法實(shí)現(xiàn)并行化的圖像檢索。檢索結(jié)果顯示模塊主要實(shí)現(xiàn)將相似度較高的一系列圖像還原為圖像文件,并顯示或保存到指定計(jì)算機(jī)硬盤中。
框架整體架構(gòu)如圖2。
2.2可序列化的圖像數(shù)據(jù)類型
2.2.1可序列化圖像數(shù)據(jù)類型的用途和現(xiàn)狀
序列化是指將結(jié)構(gòu)化對(duì)象轉(zhuǎn)為字節(jié)流以便于通過網(wǎng)絡(luò)進(jìn)行傳輸或?qū)懭氤志么鎯?chǔ)的過程??尚蛄谢臄?shù)據(jù)格式是指實(shí)現(xiàn)由Hadoop設(shè)計(jì)的緊湊、快速的接口Writable的類。Writable接口主要定義了一個(gè)二進(jìn)制輸入流方法和一個(gè)二進(jìn)制輸出流方法,MapReduce程序就是通過它來序列化鍵值對(duì)的值。針對(duì)Hadoop的Java基本封裝類來說,大多是針對(duì)文本和數(shù)字?jǐn)?shù)據(jù)的,而API中針對(duì)二進(jìn)制數(shù)據(jù)的封裝類BytesWritable由于底層是由int字段實(shí)現(xiàn)最長(zhǎng)僅能容納4字節(jié)的數(shù)據(jù)。因此要在Mapreduce程序中處理圖像需要自定義序列化數(shù)據(jù)格式。
針對(duì)Hadoop的分布式圖像處理,國(guó)內(nèi)研究者大多是通過繼承Hadoop的Java API提供的文件輸入Fi1eInPutFormat類和文件輸出格式FileOutputFormat類,將一個(gè)圖像作為一個(gè)輸入分片和輸出分片,實(shí)現(xiàn)將圖像文件轉(zhuǎn)換為自定義的可序列化圖像類型[5] -[7]。這樣的實(shí)現(xiàn)一方面對(duì)輸入路徑和輸入的圖像文件數(shù)量存在限制,另一方面對(duì)自定義圖像類型的設(shè)計(jì)不便于對(duì)圖像進(jìn)行處理。
2.2.2圖像數(shù)據(jù)類型ImageWritable
對(duì)于可序列化的數(shù)據(jù)類型,除了要能適用分布式環(huán)境的傳輸和存儲(chǔ)外,也要便于對(duì)數(shù)據(jù)的處理。因此系統(tǒng)設(shè)計(jì)的Hadoop API中基本的可序列化類型都有其對(duì)應(yīng)的Java API基本數(shù)據(jù)類型,如Text類與String類對(duì)應(yīng)。因此實(shí)現(xiàn)圖像的數(shù)據(jù)類型若與圖像處理常涉及的類相對(duì)應(yīng)就能夠便于并行式對(duì)圖像的處理。在Java API 中BufferedImage類是處理圖像最常用的類,而且它能將對(duì)象本身轉(zhuǎn)換為字節(jié)數(shù)組,而字節(jié)數(shù)組又可以轉(zhuǎn)化為Hadoop API的Text類型。Text類型是通過可變長(zhǎng)的int型在字符串編碼中存儲(chǔ)字節(jié)數(shù),最大值為2GB,這足夠保存絕大多少的圖片數(shù)據(jù)。此外,BufferedImage類帶有圖像常用的數(shù)據(jù)信息。
ImageWritable類的具體實(shí)現(xiàn),如圖3。其中ImageWritable的構(gòu)造方法需由BufferedImage對(duì)象作參數(shù);私有函數(shù)parseBytes實(shí)現(xiàn)將BufferedImage轉(zhuǎn)換為字節(jié)數(shù)組,再通過字符數(shù)組可以轉(zhuǎn)換為Text類型;用第二個(gè)Text類型保存圖像文件的后綴名;用第三個(gè)Text類型保存獲取圖像的網(wǎng)址。
2.3 HBase的數(shù)據(jù)庫設(shè)計(jì)
本框架針對(duì)的是海量圖像的檢索,除了要存儲(chǔ)海量的圖像內(nèi)容的數(shù)據(jù)外,針對(duì)圖像預(yù)處理后的圖像數(shù)據(jù),圖像特征等相關(guān)數(shù)據(jù),采用面向列擴(kuò)展的HBase數(shù)據(jù)庫進(jìn)行存儲(chǔ)。由于行鍵除了要求唯一性外還要求定長(zhǎng),因此建議將圖像獲取的路徑或網(wǎng)址通過MD5摘要處理后的定長(zhǎng)字段作為行鍵,而將獲取圖片的路徑或網(wǎng)址作為一個(gè)列值存入。
HBase中單元格的默認(rèn)塊大小是64KB,但這是對(duì)于HBase的系統(tǒng)文件而言的。HBase對(duì)于列值是沒有長(zhǎng)度限定的。為了索引的性能,HBase僅會(huì)對(duì)行鍵的長(zhǎng)度做檢查,默認(rèn)應(yīng)該小于65536。由此可知,對(duì)于海量的小圖像文件的數(shù)據(jù)而言,沒有必要對(duì)圖像的字節(jié)數(shù)組進(jìn)行分段,這樣將影響圖片的存儲(chǔ)和讀取的效率。
對(duì)于圖像檢索的應(yīng)用而言,HBase除了保存圖像數(shù)據(jù)外,還可以保存預(yù)處理后的圖像數(shù)據(jù)、提取后的圖像特征等數(shù)據(jù)。對(duì)HBase的數(shù)據(jù)表設(shè)計(jì)見表1。
2.4圖像輸入模塊
對(duì)于ImageWritable類來說只是MapReduce程序中一種鍵/值對(duì)中的值的數(shù)據(jù)類型,要將圖像文件輸入分布式文件系統(tǒng)或HBase數(shù)據(jù)庫中,常規(guī)的做法是繼承Hadoop API的文件輸入格式類(FileInputFormat)。文件輸入格式類以一個(gè)計(jì)算機(jī)本地圖像文件為一個(gè)文件分片,再轉(zhuǎn)換為自定義的可序列化類。
本框架的圖像輸入模塊主要一個(gè)Web服務(wù)器和一個(gè)MapReduce程序。Web服務(wù)器具有文件上傳和瀏覽等功能。MapReduce程序是實(shí)現(xiàn)圖像數(shù)據(jù)獲取和格式轉(zhuǎn)換的工具。本地圖像通過Web服務(wù)器就能轉(zhuǎn)換為網(wǎng)絡(luò)圖像。再把一個(gè)記錄網(wǎng)絡(luò)圖片地址的文本文件作為輸入,在Map過程中通過獲取文件流,生成BufferedImage對(duì)象,再將其轉(zhuǎn)換為ImageWritable對(duì)象,最后可以通過SequenceFile文件保存到HDFS中。另外,也可以通過ImageWritable類獲得對(duì)應(yīng)的字節(jié)數(shù)組存入HBase的數(shù)據(jù)庫表格中。針對(duì)圖片輸入模塊將圖像數(shù)據(jù)存入HDFS的MapReduce數(shù)據(jù)流如圖4。
2.5分布式集群模塊
框架中的分布式集群模塊主要包括圖片的預(yù)處理、圖像特征提取以及特征相似度計(jì)算等MapReduce程序。由于有ImageWritable數(shù)據(jù)類型的支持,可以從HDFS或HBase中獲取需要的圖像數(shù)據(jù),通過將現(xiàn)有選用的圖像預(yù)處理的算法在Map過程中實(shí)現(xiàn),將處理后的圖像生成的BufferedImage對(duì)象構(gòu)建出新的ImageWritable對(duì)象并通過Reduce過程寫入HDFS的SequenceFile中或存入HBase數(shù)據(jù)庫中。對(duì)于圖像特征提取的MapReduce過程,與預(yù)處理不同的是MapReduce輸出的是文本或數(shù)字類型的數(shù)據(jù)。相似度計(jì)算和排序的MapReduce程序的輸入輸出都是文本或數(shù)字的數(shù)據(jù)類型。分布式集群模塊一種的實(shí)現(xiàn)見表2。
2.6檢索結(jié)果的顯示模塊
檢索結(jié)果顯示模塊主要是以某個(gè)輸入圖片為待檢圖片時(shí),通過圖像相似度計(jì)算和排序后,將相似度高的圖像集合通過MapReduce程序從HBase數(shù)據(jù)庫的表中讀取對(duì)應(yīng)的圖像數(shù)據(jù),并將其轉(zhuǎn)換為BufferedImage對(duì)象,通過UI界面顯示出來,還可將這些檢索結(jié)果保存到計(jì)算機(jī)本地的硬盤上。
3 ImageWritable類的封裝與實(shí)現(xiàn)
ImageWritable類是實(shí)現(xiàn)分布式圖像檢索框架的核心類。
首先要實(shí)現(xiàn)BufferedImage對(duì)象和byte[]對(duì)象的轉(zhuǎn)換,這需用到圖像文件的后綴名,一般可以從圖像的網(wǎng)址中截取。代碼如下:
private byte[] getBytes(BufferedImage image, String format) {
ByteArrayOutputStream baos
= new ByteArrayOutputStream();
try{
ImageIO.write(image, format, baos);
} catch (Exception e) {
e.printStackTrace();}
return baos.toByteArray();}
其中ImageIO類是Java API中常用的圖像工具類,常用于讀取或生成圖像。
由于通過上面實(shí)現(xiàn)的getBytes方法可將BufferedImage對(duì)象轉(zhuǎn)換為byte[]對(duì)象,而通過byte []對(duì)象可以建立Text對(duì)象。Text類是HadoopAPI的基礎(chǔ)類,對(duì)數(shù)據(jù)的傳輸和存儲(chǔ)由原生的接口保證正確性與可靠性。對(duì)于ImageWritable類實(shí)現(xiàn)的Writable接口的二進(jìn)制讀寫流方法,示意代碼如下:
public void readFields(DataInput arg0) throws IOException {
imagedata.readFields(arg0);
imageFormat.readFields(arg0);
imagePath.readFields(arg0);}
public void write(DataOutput arg0) throws IOException {
imagedata.write (arg0);
imageFormat.write (arg0);
imagePath.write (arg0);}
以上對(duì)ImageWritable類的封裝與實(shí)現(xiàn)都是使用Java來編程實(shí)現(xiàn)的。
4結(jié)束語
本文提出了一種能夠存儲(chǔ)、處理和檢索海量圖像數(shù)據(jù)的圖像檢索框架。該框架以HBase為數(shù)據(jù)存儲(chǔ)工具,并通過MapReduce程序并行化實(shí)現(xiàn)圖像檢索,解決了趨于成熟的多種圖像檢索方法無法存儲(chǔ)、處理和檢索海量圖像的問題,具有數(shù)據(jù)輸入靈活、處理數(shù)據(jù)量大,算法并行化的移植靈活等特點(diǎn),適合應(yīng)用于對(duì)現(xiàn)有的圖像檢索系統(tǒng)進(jìn)行并行處理的重構(gòu)。
參考文獻(xiàn):
[1] 李向陽, 莊越挺, 潘云鶴. 基于內(nèi)容的圖像檢索技術(shù)與系統(tǒng)[J]. 計(jì)算機(jī)研究與發(fā)展,2001,38((3): 344-354.
[2] 朱曉麗, 趙志剛. 一種基于HBase的海量圖片存儲(chǔ)技術(shù)[J]. 信息系統(tǒng)工程,2013(8):22-24.
[3] 朱敏, 程佳, 柏文陽. 一種基于HBase的RDF數(shù)據(jù)存儲(chǔ)模型[J]. 計(jì)算機(jī)研究與發(fā)展,2013,50((z1): 23-31.
[4] 王賢偉, 戴青云, 姜文超, 曹江中. 基于MapReduce的外觀設(shè)計(jì)專利圖像檢索方法[J].小型微型計(jì)算機(jī)系統(tǒng),2012,33((3): 626-632.
[5] 鄭欣杰, 朱程榮, 熊齊邦. 基于MapReduce 的分布式光線跟蹤的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2007,33((22):83-85.
[6] 李倩, 施霞萍. 基于Hadoop MapReduce圖像處理的數(shù)據(jù)類型設(shè)計(jì)[J]. 軟件導(dǎo)刊,2012,11((4):182-183.
[7] 張良將, 宦飛, 王楊德. Hadoop云平臺(tái)下的并行化圖像處理實(shí)現(xiàn)[J]. 信息安全與通信保密,2012(10):59-62.