Введение

Обратный поиск изображений изменил наш способ поиска цифрового контента. Теперь пользователи могут искать с помощью изображений, а не текста. Эта технология имеет множество применений: от помощи покупателям в поиске товаров до проверки дизайнов для дизайнеров. Сегодня обратный поиск стал важной частью многих цифровых платформ.

Вы можете попробовать наше демо для обратного поиска изображений на image.manticoresearch.com или посмотреть исходный код на GitHub.

В статье мы разберём, как работает обратный поиск изображений, рассмотрим примеры его использования и покажем, как векторный поиск делает эту технологию быстрой и доступной для разных задач — от повседневного использования до специализированных решений.

Понимание технологии обратного поиска изображений

Как работает обратный поиск изображений?

Эта технология позволяет загружать изображение или вставлять ссылку на него, а система возвращает похожие изображения и связанную с ними информацию. Весь процесс состоит из нескольких этапов, где используется векторный поиск для обработки сложных данных:

  1. Извлечение признаков: система анализирует изображение и выделяет ключевые визуальные элементы.

  2. Создание векторного представления: визуальные признаки преобразуются в числовую форму — вектор (также известно как “embedding”).

  3. Сравнение векторов: полученный вектор сравнивается с базой данных векторов изображений.

  4. Ранжирование результатов: система сортирует найденные изображения по степени их схожести.

Роль моделей машинного обучения

Модели машинного обучения, особенно глубокое обучение, совершили революцию в обратном поиске изображений. В начале 2000-х годов системы использовали простые методы, такие как анализ цветов и распознавание краёв. Это ограничивало их точность.

Прорыв произошёл в 2012 году с появлением сверточных нейронных сетей (CNN), таких как AlexNet. Они значительно улучшили понимание сложных визуальных паттернов.

Сегодня такие сервисы, как Google Images и Pinterest, используют глубокое обучение, чтобы предоставлять точные результаты. TinEye, например, демонстрирует, как можно отслеживать изменения и повторное использование изображений в интернете.

Современные модели отлично понимают контекст, узнают объекты под разными углами и даже распознают художественные стили. Всё это было недоступно для ранних технологий компьютерного зрения.

Создание системы обратного поиска изображений с помощью TinyCLIP и Manticore Search

Мы в Manticore Search изучили несколько способов создания эффективной системы обратного поиска изображений. Для демонстрации технологии мы хотели создать практичное решение, использующее векторный поиск Manticore и при этом доступное для большинства разработчиков. Так мы выбрали TinyCLIP — компактную модель, которая отлично работает на обычных CPU.

Почему TinyCLIP?

TinyCLIP — часть семейства моделей CLIP (Contrastive Language-Image Pre-training). Она позволяет создавать векторные представления как изображений, так и текста. Это делает её подходящей для задач вроде:

  1. Поиск изображений с помощью других изображений.

  2. Поиск изображений с использованием текстовых описаний.

  3. Поиск текстовой информации, связанной с изображением.

  4. Поиск похожего текста.

Преимущества TinyCLIP:

  • Компактность: модель занимает меньше места и потребляет меньше памяти.

  • Работа на CPU: не требуется дорогое оборудование.

  • Скорость: быстрая обработка запросов.

  • Простое развёртывание: легко интегрируется и масштабируется.

Мы объединили TinyCLIP с векторным поиском Manticore Search, чтобы создать практичную основу для мультимодальных систем поиска.

Векторный поиск и Manticore Search

Векторный поиск — это эффективный способ для быстрого и точного сравнения сложных данных. Manticore Search — это движок с открытым исходным кодом, который поддерживает векторный поиск. Благодаря этому он стал отличным выбором для реализации систем обратного поиска изображений.

Реализация обратного поиска изображений с помощью Manticore Search

Ниже описаны основные шаги, которые мы выполнили для создания системы:

  1. Установка Manticore Search: настройте и установите движок, следуя инструкции.

  2. Создание таблицы для векторов изображений:

sql
    CREATE TABLE IF NOT EXISTS <table name> (
        id bigint,
        image_path text,
        caption text,
        embeddings float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='COSINE'
    )
  1. Создание векторов изображений: используйте TinyCLIP для преобразования изображений в векторы. Мы создали простенький и легковесный сервер на Python для генерации и получения этих векторов. Если вы хотите использовать модель с Python, это довольно просто и выглядит примерно так:

    from transformers import CLIPProcessor, CLIPModel, AutoProcessor, AutoModelForCausalLM

    clip_model = CLIPModel.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")
    clip_processor = CLIPProcessor.from_pretrained("wkcn/TinyCLIP-ViT-61M-32-Text-29M-LAION400M")

    try:
        image_bytes = base64.b64decode(request.image)
        image = Image.open(io.BytesIO(image_bytes))

        inputs = clip_processor(images=image, return_tensors="pt")
        with torch.no_grad():
            image_features = clip_model.get_image_features(**inputs)

        print(image_features.squeeze().tolist())
    except Exception as e:
        raise HTTPException(status_code=400, detail=f"Error processing image: {str(e)}")
  1. Индексирование векторов: импортируйте данные в таблицу Manticore.

    Сначала обработайте каждое изображение, чтобы получить его текстовое векторное представление, а затем сохраните эти векторы в таблицу Manticore Search. Этот важный шаг преобразует ваши визуальные данные в числовые значения, которые можно эффективно использовать для поиска.

    Обратите внимание на этот скрипт, который мы разработали для импорта данных в наше демо с использованием ранее упомянутого серверного API на Python. Всё, что вам нужно, — это обработать вашу коллекцию изображений через модель, которая создаст векторы, готовые для сохранения в Manticore Search.

  2. Реализация поиска: настройте функцию поиска схожих изображений, используя возможности векторного поиска Manticore.Вот пример практической реализации и базовый рабочий процесс, показывающие, чего можно достичь с помощью Manticore. Для упрощения некоторые детали были опущены, но полный код вы можете найти в нашем репозитории.

    // Upload image and get embeddings first
    $image = Image::upload($file['tmp_name'])->unwrap();
    $embeddings = $Embed->getImageEmbeddings($image->getPath())->unwrap();

    // Search with Manticore Search
    $client = new Manticoresearch\Client(config('manticore'));
    $query = new Manticoresearch\Query\KnnQuery('embeddings', $embeddings, 10);
    $docs = $client->index('image')->search($query)->get();

    // Finally do something with images found
    foreach ($docs as $doc) {
        $row = ['id' => (int)$doc->getId(), ...$doc->getData()];
        $items[] = $row;
    }

Также в этом скрипте вы можете увидеть, как мы обрабатываем векторы изображений и выполняем поиск по их сходству с помощью Manticore Search, чтобы получить релевантные результаты.

Демо Manticore Search

Мы создали демо, которая показывает возможности векторного поиска. Вы можете попробовать её на image.manticoresearch.com. Это демо использует ИИ-модель TinyCLIP для преобразования изображений в векторы и выполнения быстрого поиска по схожести.

Ключевые возможности:

  1. Обратный поиск изображений: загрузите или укажите ссылку на изображение, чтобы найти похожий контент.

  2. Поиск изображений по тексту: текстовые описания преобразуются в векторы, что позволяет находить подходящие изображения.

  3. Эффективная обработка на CPU: TinyCLIP обеспечивает быстрые результаты без необходимости в специализированном оборудовании.

Применение обратного поиска изображений

Обратный поиск изображений открывает множество возможностей:

  • Электронная коммерция
    Обратный поиск помогает клиентам находить визуально похожие товары, просто загружая фото. Например, если покупатель увидел понравившееся платье, но не может найти его в интернете, он может загрузить изображение, и система покажет похожие платья, доступные для покупки. Эта функция помогает улучшить поиск товаров и сделать процесс покупок более удобным.

  • Управление контентом
    Поиск дубликатов изображений — одна из основных задач для организаций с большими библиотеками контента. Обратный поиск позволяет менеджерам контента быстро находить и удалять повторяющиеся изображения, оптимизировать пространство для хранения и улучшать управление контентом. Кроме того, он помогает отслеживать несанкционированное использование изображений на разных платформах, обеспечивая соблюдение авторских прав.

  • Рекомендации
    Предоставление визуально похожих рекомендаций улучшает взаимодействие с пользователями, помогая им легко находить связанный контент. Например, пользователь загружает фото предмета мебели, и система предлагает похожие вещи, которые подходят по стилю или цвету. Это делает проще поиск завершённых комплектов или изучение похожих вариантов. Такой подход можно применить в моде, дизайне интерьеров и многих других сферах, предлагая интуитивно понятный и визуально ориентированный опыт рекомендаций.

Заключение и перспективы

Технология обратного поиска изображений прошла долгий путь — от простого сопоставления цветов до сложного анализа сходства на основе векторов. С моделями, такими как TinyCLIP, и движком Manticore Search создание систем обратного поиска стало доступным разработчикам любого уровня.

Наше демо обратного поиска изображений, доступное на image.manticoresearch.com, позволяет вам самостоятельно исследовать эти технологии. Хотите добавить визуальный поиск в своё приложение или просто узнать больше? Это демо станет отличным началом для изучения возможностей современного обратного поиска изображений.

Комментарии (0)