В настоящее время я пишу пакет визуальной системы поиска изображений на основе слов, которая похожа на модель векторного пространства в текстовом поиске. Согласно этой схеме каждое изображение представлено вектором (или иногда в литературе также называется гистограммой). По сути, каждое число в векторе подсчитывает, сколько раз каждое «визуальное слово» встречается на этом изображении. Если 2 изображения имеют векторы, которые «близки» друг к другу, это означает, что они имеют много общих характеристик изображения и, следовательно, похожи.
Я пытаюсь создать инвертированный индекс файла для набора таких векторов. Я хочу что-то, что может масштабироваться от тысяч (на стадии пробного использования) до сотен тысяч или миллионов + изображений, чтобы домашний взлом структуры данных не работал.
Я смотрел на Lucene, но, видимо, он только индексирует текст (поправьте меня, если я ошибаюсь), тогда как в моем случае я хочу, чтобы он индексировал числа (т.е. сами векторы). Я видел случаи, когда люди преобразовывали вектор в текстовый документ следующим образом:
<3, 6, ..., 5> -> "w1 w2 ... wn". По существу, любой ненулевой компонент заменяется текстовым словом «w [n]», где n - индекс этого числа. Этот «документ» затем передается в Lucene для индексации.
Проблема с использованием этого метода состоит в том, что текстовое представление для вектора не кодирует, как часто встречается конкретное "слово", поэтому ранжирование найденных изображений не будет хорошим.
Кто-нибудь знает о зрелом API индексации, который может обрабатывать векторы или, возможно, предложить другую схему кодирования для моих векторов, чтобы я мог продолжать использовать Lucene? Я также посмотрел проект Lucene for Image Retrieval (LIRE) и попробовал демоверсию, которая пришла с ним, но количество исключений, которые были сгенерированы, когда я запустил эту демоверсию, заставляет меня сомневаться в ее использовании.
Что касается языка API, я открыт для C ++ или Java.
Заранее спасибо за любые ответы.