我正在開發一個項目,我必須索引圖像及其文本元數據。我首先想到了Lucene,但它不支持圖像。然後我發現了LIRE,但它只能處理圖像,並且不會處理元數據。在Java中索引
是否有一個開源的解決方案,在單個索引中索引圖像及其元數據?
否則,我發現的唯一解決方案是有兩個單獨的索引併合並結果。我突然想不出如何合併它們,因爲考慮到每個索引圖像匹配一組索引元數據。 在這種情況下,我可能需要一種將元數據集與圖像鏈接的方法。
你能向我解釋我如何實際合併結果嗎?
我正在開發一個項目,我必須索引圖像及其文本元數據。我首先想到了Lucene,但它不支持圖像。然後我發現了LIRE,但它只能處理圖像,並且不會處理元數據。在Java中索引
是否有一個開源的解決方案,在單個索引中索引圖像及其元數據?
否則,我發現的唯一解決方案是有兩個單獨的索引併合並結果。我突然想不出如何合併它們,因爲考慮到每個索引圖像匹配一組索引元數據。 在這種情況下,我可能需要一種將元數據集與圖像鏈接的方法。
你能向我解釋我如何實際合併結果嗎?
我對LIRE並不熟悉,但看起來您會使用DocumentBuilder
創建文檔。當你從一個文檔回來,你可以輕鬆地添加你自己的屬性吧,如:
DocumentBuilder builder = /*create your builder*/
Document doc = builder.createDocument(image, id);
Field metadata = /*create your metadata field*/
doc.add(metadata);
indexWriter.addDocument(doc);
這將允許您利用里拉圖像識別,並能夠基於元數據分別進行搜索。如果您需要能夠將這兩者進行混合,例如通過某些元數據匹配約束過濾了圖像識別搜索,則您可能需要自行實施。查看GenericFastImageSearcher
的代碼,它實際上並不構建Lucene查詢,而是迭代圖像並進行比較以找到最佳匹配。您應該可以創建自己的findSimilar
方法,在迭代循環中通過simiply繼續在不符合的地方過濾結果:
for (int i = 0; i < docs; i++) {
if (reader.hasDeletions() && !liveDocs.get(i)) continue;
d = reader.document(i);
if (!d.getField("metadata").equals(constraint)) continue;
謝謝。我會研究這一點。 – qbisson