一種分布式圖像索引與檢索方法
【技術領域】
[0001] 本發明屬于大規模圖像處理與檢索領域,特別是一種基于SparkStreaming的分 布式圖像索引與檢索方法。
【背景技術】
[0002] 現階段,單機圖像處理和檢索技術,單機計算能力有限。隨著圖像數據量的增長, 單機處理會造成很大的延時性。此外,傳統的相似圖像檢索算法,計算復雜度高,且計算結 果不可以復用,每次檢索都花費很長的時間進行相似度計算。
【發明內容】
[0003] 發明目的:本發明所要解決的技術問題是克服單機圖像處理的計算能力差,時延 性長,存儲容量有限以及圖像檢索速度慢的問題。
[0004] 技術方案:本發明提出了一種基于SparkStreaming分布式圖像索引與檢索方 法。該方法包括以下步驟:
[0005] 步驟1,搭建Hadoop分布式系統集群,包括HDFS分布式文件系統、YARN資源管理 器、ZooKeeper分布式應用程序協調服務、Spark集群和HBase數據庫;
[0006] 步驟2,部署配置基于資源管理器YARN的Spark集群;
[0007] 步驟3,啟動圖像索引流處理任務;
[0008] 步驟4,啟動圖像檢索流處理任務;
[0009] 步驟5,圖像索引流處理任務接收外部輸入圖像序列并建立索引;
[0010] 步驟6,圖像檢索流處理任務接收待檢索圖像,輸出檢索到的相似圖像。
[0011] 其中,步驟1中,所述YARN資源管理器用于任務調度,負責集群計算資源的管理及 為每個任務分配資源(包括內存資源、處理器資源等),并在集群中節點出現故障時為任務 重新分配計算資源(具體見步驟3與步驟4),所述HBase數據庫用于存儲圖像。
[0012] 步驟2包括:在Hadoop分布式系統集群上部署Spark集群,利用YARN資源管理器 調度Spark集群的Spark任務容器,Hadoop分布式系統集群中的工作節點包括索引節點、 檢索節點、以及輸出節點;
[0013] 其中,索引節點負責對輸入的圖像提取特征,并保存到指定的HBase數據庫表中, 供后續檢索使用;
[0014] 檢索節點,負責對輸入的待檢索圖像計算其與指定HBase數據庫表中所存儲圖像 的相似度,并進行排序和輸出;
[0015] 輸出節點負責對所有檢索節點返回的結果進行歸并排序,并從HBase數據庫中讀 取圖像編碼,然后生成原始圖像,再將檢索到的圖像返回給用戶。
[0016]步驟3包括:在ZooKe印er分布式應用程序協調服務中建立N個索引表1\,i= 1,…,N,應用Spark流處理技術在Spark集群中建立N個索引節點Si,并為每個索引節點分 配一個空閑的索引表,當一個索引節點失效時,比如異常退出或網絡故障,ZooKeeper分布 式應用程序協調服務中對應的索引節點和索引表分配節點自動刪除,由Spark流處理技術 自動新建索引節點,并在ZooKe印er分布式應用程序協調服務中重新建立對應索引節點及 索引表分配節點。
[0017] 步驟4包括:Spark流處理技術在Spark集群中建立N個檢索節點民,i= 1,…,N, 并為每個檢索節點分配一個空閑的索引表,當一個檢索節點失效時,比如異常退出或網絡 故障,ZooKeeper分布式應用程序協調服務中對應的檢索節點和索引表分配節點自動刪除, 由Spark流處理技術自動新建檢索節點,并在ZooKeeper分布式應用程序協調服務中重新 建立對應檢索節點及索引表分配節點。
[0018] 步驟5包括:對用戶輸入的圖像序列,首先對每個圖像I進行BASE64編碼得到編 碼結果B,并將編碼后的字符串作為輸入分發到已啟動的索引節點Si,并從ZooKe印er分布 式應用程序協調服務中獲取該索引節點對應的索引表,然后利用MD5編碼對輸入的圖像 編碼計算圖像的鍵值K,同時對編碼結果B1進行解碼,并對解碼后的圖像提取視覺特征向 量X,然后將[K,X,B]保存到索引表T中。
[0019] 步驟6包括:對用戶輸入的待檢索圖像,首先對該圖像進行BASE64編碼得到編 碼結果B2,并將編碼后的字符串作為輸入分發到已啟動的檢索節點民,i= 1,…,N,并從 ZooKe印er分布式應用程序協調服務中獲取該索引節點對應的索引表Tu,uG[1,N],然后 對編碼結果B2進行解碼,并對解碼后的圖像提取視覺特征向量X,然后計算其與索引表Tu 中保存的圖像特征的顏色分布相似度〇 (本發明實施例中使用顏色分布相似度,也可使用 其他任意相似度計算方法),并進行排序,將排序后的前M組結果W1= {〈K,〇,Tu>d|d= 1,…,M}發送到輸出節點,其中d為排序的序號,輸出節點對接收到的檢索結果I進行歸 并排序,保留前M組結果,并根據鍵值K及其對應的索引表Tu讀取圖像編碼結果B,解碼生 成圖像文件并返回圖像路徑。
[0020] 有益效果:本發明采用了基于內存計算的SparkStreaming技術,能夠實現圖像 處理任務和特征提取任務的分布式快速計算,具有高度的實時性。其次,利用Spark技術使 得整個系統設計具有很好的擴展性和很高的吞吐量。最后,本發明利用ZooKeeper來維護 多個索引表與索引節點、檢索節點的分配關系,充分利用分布式系統的可用性,在單節點失 效的情況下,集群能夠繼續對輸入的圖像進行索引和檢索。引入的SparkStreaming技術 具有很好的橫向擴展性和容錯能力。SparkStreaming能夠運行在100+節點上,能夠提供 強大的計算能力并達到秒級延遲。在建立圖像索引之后,可以實現海量圖像的秒級搜索。
[0021] 本發明引入的SparkStreaming技術具有很好的橫向擴展性和容錯能力。Spark Streaming能夠運行在100+節點上,能夠提供強大的計算能力并達到秒級延遲。一次建立 圖像索引之后,可以實現海量圖像的秒級搜索。
【附圖說明】
[0022] 圖1是基于SparkStreaming的分布式圖像檢索與索引系統流程圖。
[0023] 圖2是ZooKe印er節點樹狀圖。
[0024] 圖3是索引節點啟動流程圖。
[0025] 圖4是檢索節點啟動流程圖。
[0026] 圖5是索引節點工作流程圖。
[0027] 圖6是檢索節點及輸出節點工作流程圖程圖。
【具體實施方式】
[0028] 下面結合附圖對本發明作進一步詳細描述。
[0029] 現階段,單機圖像處理和檢索技術,單機計算能力有限。隨著圖像數據量的增 長,單機處理會造成很大的延時性。此外,傳統的相似圖像檢索算法,計算復雜度高,且計 算結果不可以復用,每次檢索都花費很長的時間進行相似度計算。本發明引入的Spark Streaming技術具有很好的橫向擴展性和容錯能力。SparkStreaming能夠運行在100+節 點上,能夠提供強大的計算能力并達到秒級延遲。一次建立圖像索引之后,可以實現海量圖 像的秒級搜索。本發明包括以下處理步驟。
[0030] (1)通過搭建Hadoop集群來整合多臺計算機的存儲和計算能力,利用YARN來進行 任務調度,利用HBase來作為數據庫存儲圖像。
[0031] (2)在Hadoop集群上部署Spark,利用YARN調度Spark任務容器。如圖1所示, 本發明中的工作節點包括索引節點、檢索節點、以及輸出節點。其中索引節點負責對輸入的 圖像提取特征,并保存到指定的HBase表中,供后續檢索使用;檢索節點則負責對輸入的待 檢索圖像計算其與指定HBase表中所存儲圖像的相似度,并進行排序和輸出;輸出節點則 負責對所有檢索節點返回的結果進行歸并排序,并從HBase中讀取圖像編碼,然后生成原 始圖像,再將檢索到的圖像返回給用戶。
[0032] (3)啟動圖像索引流處理任務,在ZooKe印er中建立N個索引表1\,(i= 1,…,N), SparkStreaming在集群中建立N個索引節點Si,(i= 1,…,沁,并為每個索引節點分配 一個空閑的索引表。當某個索引節點失效(異常退出或網絡故障)時,ZooKeeper中對 應的索引節點和索引表分配節點自動刪除,由SparkStreaming自動新建索引節點,并在 ZooKeeper中重新建立對應索引節點及索引表分配節點。
[0033] 如圖2所示,ZooKeeper中存儲了索引表、索引節點以及索引分配狀況,利用 ZooKeeper來保證分布式系統的一致性,ZooKeeper在啟動時首先新建索引表子樹,并在其 中添加N個索引表1\,(i= 1,…,N)節點。如圖3所示,每個索引節ASi啟動時,首先通過 ZooKeeper加鎖,然后在索引節點子樹中添加自己,查找未分配的索引表Tu,并將〈Si,Tu>保 存到索引分配子樹中。完成上述操作后解鎖。在索引節點及索引分配子樹中添加的節點均 為臨時節點,當對應的索引節點失效時,臨時節點會自動刪除。同時Spark會檢測到節點失 效并重新分配和啟動索引節點,該索引節點會按照圖3所示重新在ZooKe印er添加自己并 獲取索引表,從而保證了系統在節點失效的情況下能夠迅速恢復。
[0034] (4)啟動圖像