blog-post

Создание приложения для обратного поиска изображений с Manticore Search

TL;DR: Узнайте, как создать приложение для обратного поиска изображений с Manticore Search, включая обзор истории обратного поиска изображений, технологий, стоящих за ним, и практических подходов к системам извлечения изображений.

Введение

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

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

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

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

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

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

  1. Извлечение признаков: Система анализирует изображение, чтобы определить ключевые визуальные элементы.
  2. Генерация встраиваний: Визуальные признаки преобразуются в числовое векторное представление.
  3. Сравнение схожести: Этот вектор сравнивается с базой данных сохраненных векторов изображений с использованием векторного поиска.
  4. Ранжирование результатов: Результаты упорядочиваются по оценкам схожести.

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

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

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

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

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

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

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

Часть семейства CLIP (Contrastive Language-Image Pre-training), TinyCLIP может создавать векторные встраивания как для изображений, так и для текста, позволяя:

  1. Искать изображения, используя другие изображения (обратный поиск изображений).
  2. Искать изображения, используя текстовые описания.
  3. Находить связанный текстовый контент с изображением.
  4. Сопоставлять текст с текстом на основе схожести.

TinyCLIP сохраняет хорошую точность, одновременно уменьшая:

  • Размер модели (меньше хранилища и памяти).
  • Вычислительные требования (работает на ЦП).
  • Время вывода (быстрый ответ).
  • Объем контейнера (легкое развертывание и масштабирование).

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

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

Мы оживили обратный поиск изображений с помощью возможностей Manticore Search. Ниже приведено пошаговое руководство:

  1. Настройка Manticore Search: Установите и настройте Manticore Search, следуя этим инструкциям .
  2. Создание таблицы для векторов изображений: Определите схему таблицы для хранения векторов изображений:
    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'
    )
    
  3. Генерация встраиваний изображений: Используйте TinyCLIP для преобразования ваших изображений в векторные встраивания.
    Генерация встраиваний изображений: Используйте 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"Ошибка обработки изображения: {str(e)}")
    
  4. Индексация векторных изображений: Импортируйте ваши векторные данные в таблицу Manticore Search.
    Сначала обработайте каждое изображение, чтобы получить его текстовое представление в виде вектора, затем сохраните эти векторы в вашей таблице Manticore Search. Этот важный шаг преобразует ваши визуальные данные в числовые значения, которые можно искать, что делает их готовыми для эффективного извлечения во время поиска.
    Посмотрите на этот скрипт , который мы разработали для импорта данных в нашу демонстрацию с использованием упомянутого ранее API сервера Python. Все, что вам нужно сделать, это обработать вашу коллекцию изображений через модель, которая сгенерирует векторы, которые затем можно сохранить в Manticore Search.
  5. Реализация поиска по изображениям: Интегрируйте возможности векторов Manticore Search для поиска визуально похожих изображений.
    Вот практическая реализация и базовый рабочий процесс, демонстрирующий, что вы можете достичь с Manticore. Для простоты некоторые детали были опущены, но вы можете найти полный код в нашем репозитории .
    // Сначала загрузите изображение и получите векторы
    $image = Image::upload($file['tmp_name'])->unwrap();
    $embeddings = $Embed->getImageEmbeddings($image->getPath())->unwrap();
    
    // Поиск с Manticore Search
    $client = new Manticoresearch\Client(config('manticore'));
    $query = new Manticoresearch\Query\KnnQuery('embeddings', $embeddings, 10);
    $docs = $client->index('image')->search($query)->get();
    
    // Наконец, сделайте что-то с найденными изображениями
    foreach ($docs as $doc) {
        $row = ['id' => (int)$doc->getId(), ...$doc->getData()];
        $items[] = $row;
    }
    
    Также в этом скрипте вы можете увидеть, как мы обрабатываем векторы изображений и выполняем поиск по векторному сходству с использованием Manticore Search для получения релевантных результатов.

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

Ключевые особенности

  1. Обратный поиск по изображениям (Поиск по изображению): Загрузите или вставьте ссылку на изображение, чтобы найти визуально похожий контент.
  2. Поиск по тексту в изображениях: Используйте текстовые описания для поиска релевантных изображений. Эта функция стала возможной благодаря способности TinyCLIP создавать текстовые векторы, которые соответствуют векторным представлениям изображений, предлагая эффективный кросс-модальный поиск. Хотя эта статья сосредоточена на обратном поиске по изображениям, мы создадим отдельную статью, посвященную поиску по тексту в изображениях в будущем.
  3. Эффективная обработка на CPU: TinyCLIP обеспечивает быстрые результаты без необходимости в специализированном оборудовании.

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

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

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

Заключение и будущие направления

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

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

Установить Manticore Search

Установить Manticore Search