王柏翔+姜佳鵬


摘 要: 處理海量圖像數據問題時,針對傳統的圖像檢索方法計算速度慢、檢索效率低的問題,借助HBase和Hadoop分布式技術對海量數據超強的讀寫能力,提出一種適用于大數據背景下的基于Hadoop平臺的圖像檢索模型。該圖像檢索模型提供了圖像數據處理的可序列化數據類型,并通過輸入模塊實現大數據背景下數據類型的轉換及海量圖像的輸入。理論驗證了該模型為特征提取、圖像處理等并行處理算法提供了可行的方案。
關鍵詞: 圖像檢索; HBase; Hadoop; 并行處理
中圖分類號:TP391 文獻標志碼:A 文章編號:1006-8228(2016)12-35-04
hods have the problems of lower computation speed and lower retrieval efficiency for processing massive image data. To solve these problems, this paper proposes a retrieval model applied to storage and process massive image data, which with the help of read and write property of Hadoop distributed technology and HBase. This model provides serializable data types for processing image data, and through the input module realizes the data type conversion and massive image input in big data background. The theory proves that the proposed model can provide a feasible solution for parallel processing algorithms of feature extraction, image processing and so on.
Key works: image retrieval; HBase; Hadoop; parallel processing
0 引言
從圖像檢索技術的發展看,基于文本標注的圖像檢索和基于圖像內容的檢索方法提高了圖像特征提取、相似度對比[1],但是大數據時代,對現有的圖像處理、表達與度量等方面增加了存儲圖像數據及高效處理海量數據集的要求。
傳統的基于內容的圖像檢索方法,是對圖像采用單機單線程進行特征提取及圖像處理,然后將經過處理后的圖像特征存入關系型數據庫中。發起檢索請求時,遍歷關系型數據庫對比查詢到的圖像特征和全庫特征,對其結果進行排序即為檢索的結果。現今圖像數據快速增長,即使采用多線程技術處理圖像也不能完全解決存儲海量圖像數據及其處理效率的問題,更不用說簡單依賴單計算機的處理能力的傳統圖像處理技術。
采用HBase和Hadoop分布式技術[2-3]對海量數據進行基于內容的數據圖像模型,解決了海量圖像數據的存儲與傳輸問題,并且原設計的圖像檢索算法可直接移植至分布式環境并行處理。該思想依賴基于Map-Reduce的并行模型并行檢索大數據圖像。
大數據背景下的圖像數據,80%以上是以MB為單位的小文件,針對大文件的基于HDFS的分布式存儲技術不適用。基于HBase和Hadoop分布式技術可實現系統層的小文件合并,實現全局命名,有良好的通用性[4]。
1 技術背景
1.1 基于內容的圖像檢索技術
基于內容的圖像檢索的特點是對圖像數據內容本身的操作處理。具體處理流程如圖1所示。
圖像特征的提取,雖然實現的算法各不相同,但提取的結果一般為文本表示的矩陣或數字。如今的計算機圖像處理接口對數字圖像的存取簡化為對字節流的獲取與輸出。基于內容的圖像檢索技術之所以快速發展,一個重要原因就是只專注于研究圖像處理算法,而忽略存取圖像耗費的資源。
1.2 基于Hadoop的分布式技術
MapReduce分布式計算模型和Hadoop分布式文件系統HDFS(Hadoop Distributed File System)是Hadoop的核心。Hadoop提供分布式文件系統、通用I/O組件和接口以及分布式數據處理模式和執行環境。
MapReduce是一種簡單的用于數據處理的編程模型,支持C++、Python和Java等多種編程語言。MapReduce的并行性使大規模數據的分析能在多個計算機上并行執行,提高效率的同時降低了消耗。
1.3 HBase數據庫
HBase數據庫是分布式列存儲數據庫,有超強的讀寫性能,底層通過HDFS存儲數據,支持隨機查詢和Map Reduce的批量式計算。
用Java編寫的HBase支持其他編程語言,提供原生的操作API。HBase的數據和坐標以字節數組形式存儲,即支持任意類型的數據存儲。HBase不存放空表格,只存放有內容的表格單元,其稀疏性適用于存儲文件數據[5]。
2 模型設計與實現
2.1 模型整體架構
Hadoop集群的一系列優勢如集群規模靈活、成本低廉、其承載的MapReduce模型有高效的并行計算能力。高效并行處理圖像特征數據需要借助MapReduce模型,既能移植到現有的特征提取算法中,也能以圖像的可序列化數據類型在分布式環境中存儲、傳輸和操作。使用HBase面向列擴展的分布式數據庫對圖像數據以字節數組的形式進行壓縮式存儲和快速查詢。因此,本文選擇HBase為數據存儲庫,MapReduce模型實現并行處理,建立海量圖像分布式檢索模型。
檢索模型的整體架構如圖2所示,主要分為圖像輸入模塊、分布式集群模塊和檢索結果顯示模塊。圖像輸入模塊對圖像數據進行預處理,將獲取到的網絡圖像轉換成可序列化圖像數據類型[6-8],并轉換成字節數組存儲在HBase中;分布式集群模塊以可序列化的圖像數據類型為接口實現并行圖像檢索;檢索結果顯示模塊主要還原相似度較高的圖像文件,并將其顯示或保存到指定的計算機硬盤。
2.2 可序列化的圖像數據類型
可序列化的數據類型要適用于分布式存儲和傳輸,便于處理數據,因此系統設計的Hadoop API中基本的可序列化類型都有其對應的Java API基本數據類型。Java API中的BufferedImage是常用的處理圖像的類,將對象本身轉換成字節數組,進而轉換成Text類型。Text類型最大值是2GB,通過可變長的int型以字符串編碼形式存儲海量圖像數據。此外,BufferedImage類帶有圖像常用的數據信息。
ImageWritable類的具體實現,如圖3所示。其中ImageWritable的構造方法需由BufferedImage對象作參數;私有函數parse Bytes實現將BufferedImage轉換為字節數組,進而轉換成Text類型。第二個Text類型和第三個Text類型分別保存的是圖像文件的后綴名及獲取圖像的網址。
2.3 HBase的數據庫設計
本文設計的圖像檢索模型針對海量圖像,因此,采用HBase數據庫存儲圖像內容的數據及預處理后的數據。因為行鍵要求定長且惟一,所以本文采用MD5摘要處理圖像獲取的路徑或網址。HBase中單元格的默認塊大小是64KB,對列值沒有長度限制,此外行鍵長默認小于65536。為了不影響圖片的存取效率,對于小圖像文件則不對圖像字節數組分段。對HBase的數據表設計見表1。
2.4 圖像輸入模塊
ImageWritable類只是一種MapReduce模型中鍵/值對值的數據類型,將將圖像文件輸入HBase數據庫或分布式文件系統的常規的做法是繼承Hadoop API的文件輸入格式類(FileInputFormat)。FileInputFormat認為一個計算機本地圖像文件是一個文件分片,將其轉換成自定義的可序列化類。該圖像檢索模型主要由MapReduce并行模型和一個Web服務器組成,其中Web服務器具有文件上傳和瀏覽的功能。MapReduce模型是實現獲取圖像數據和格式轉換的程序。本地圖像通過Web服務器轉換成網絡圖像,并將記錄網絡圖像地址的文本文件作為輸入。Map過程獲取文件流,生成BufferedImage對象,并轉換成ImageWritable對象,然后通過SequenceFile文件保存到HDFS中。此外,也可以通過ImageWritable類將響應的圖像字節數組保存在HBase中。將圖像數據存儲在HDFS的MapReduce流程圖如圖4所示。
2.5 分布式集群模塊
分布式集群模塊主要包括圖像預處理、特征提取及相似度計算。通過ImageWritable,可以從HBase或HDFS獲取所需圖像數據,然后將現有選用的預處理生成的BufferedImage對象構建ImageWritable對象,通過Reduce寫入HBase或HDFS的SequenceFile中。MapReduce過程中,特征提取與預處理不同之處是輸出數據的類型是數字類型還是文本類型。相似度計算及其排序的輸入輸出的數據類型都是數字類型或者文本類型。分布式集群模塊的實現如表2所示。
2.6 檢索結果的顯示模塊
檢索結果的顯示模塊中,將輸入模塊作為待檢模塊,相似度計算并排序后,讀取相似度高的圖像集合對應的圖像數據并轉換成BufferedImage對象,通過UI界面顯示,將檢索結果保存到本地計算機硬盤中。
3 Image Writable類的封裝與實現
本文圖像檢索模型的核心類是Image Writable類。圖像檢索首先要實現對象轉換,即BufferedImage和byte[],圖像文件后綴名從網址中抓取。基于Java編程實現對ImageWritable類的封裝與實現。具體代碼如下:
其中ImageIO類用于讀取和生成圖像,是Java API的常用圖像工具類。getBytes()將BufferedImage轉換成byte[]對象,byte[]對象用于建立Text對象。Text類保證數據存儲和傳輸的正確性、可靠性。ImageWritable類實現的Writable接口二進制讀寫流算法如下:
4 結束語
本文提出的基于Hadoop平臺的圖像檢索模型實現了存取和檢索圖像數據的功能。該圖像檢索技術采用HBase的分布式列存儲數據庫,通過Map-Reduce實現并行檢索圖像,提高了檢索速度,數據輸入靈活,可并行處理大數據圖像,適用于重構現有的圖像檢索系統。但該模型是假設在不受噪音影響的條件下檢索,這也是下一步需要研究和改進的地方。
參考文獻(References):
[1] 李向陽,莊越挺,潘云鶴.基于內容的圖像檢索技術與系統[J].
計算機研究與發展,2001.38(3):344-354
[2] Borthakur D. The hadoop distributed file system:
Architecture and design[J]. Hadoop Project Website,2007.11(11):1-10
[3] White T. Hadoop:the definitive guide[J]. O'reilly Media Inc
Gravenstein Highway North,2010.215(11):1-4
[4] 朱曉麗,趙志剛.一種基于HBase的海量圖片存儲技術[J].信
息系統工程,2013.8:22-24
[5] 朱敏,程佳,柏文陽.一種基于HBase的RDF數據存儲模型[J].
計算機研究與發展,2013.50(s1):23-31
[6] 鄭欣杰,朱程榮,熊齊邦.基于Map Reduce的分布式光線跟
蹤的設計與實現[J].計算機工程,2007.33(22):83-85
[7] 李倩,施霞萍.基于Hadoop Map Reduce圖像處理的數據類
型設計[J].軟件導刊,2012.11(4):182-183
[8] 張良將,宦飛,王楊德.Hadoop云平臺下的并行化圖像處理
實現[J].信息安全與通信保密,2012.10:59-62