blog-post

使用 Manticore Search 创建图像反向搜索应用

TL;DR: 在本文中,您将学习如何使用 Manticore Search 创建图像反向搜索应用。我们将讨论这项技术的历史、其结构及创建图像搜索系统的实用方法。

引言

图像反向搜索改变了我们查找数字内容的方式。现在用户可以通过图像而不是文本进行搜索。这项技术有很多应用:从帮助购物者寻找商品到帮助设计师验证设计。如今,反向搜索已成为许多数字平台的重要组成部分。

您可以在 image.manticoresearch.com 尝试我们的图像反向搜索演示,或者在 GitHub 上查看源代码

在本文中,我们将解析图像反向搜索的工作原理,给出使用示例,并展示向量搜索如何使这项技术快速且能够满足从日常使用到专业解决方案的不同需求。

理解图像反向搜索技术

图像反向搜索如何工作?

这项技术允许用户上传图像或插入图像链接,系统返回相似的图像及相关信息。整个过程包括几个阶段,其中使用向量搜索来处理复杂数据:

  1. 特征提取: 系统分析图像并提取关键视觉元素。
  2. 创建向量表示: 视觉特征被转换为数值形式——向量(也称为 “embedding”)。
  3. 向量比较: 生成的向量与图像向量数据库进行比较。
  4. 结果排序: 系统按相似度对找到的图像进行排序。

机器学习模型的角色

机器学习模型,特别是深度学习,彻底改变了图像反向搜索。在 2000 年代初,系统使用简单的方法,如颜色分析和边缘检测。这限制了它们的准确性。

2012 年,卷积神经网络(CNN)的出现带来了突破,比如 AlexNet。它们显著提高了对复杂视觉模式的理解。

如今,Google Images 和 Pinterest 等服务使用深度学习来提供准确的结果。TinEye 例如,展示了如何跟踪互联网图像的变化和重复使用。

现代模型非常了解上下文,可以在不同角度识别对象,甚至能识别艺术风格。在早期计算机视觉技术中,这一切都是无法做到的。

使用 TinyCLIP 和 Manticore Search 创建图像反向搜索系统

Reverse Image Search Showcase

我们在 Manticore Search 探索了创建有效图像反向搜索系统的多种方法。为了演示这项技术,我们希望创建一个实用的解决方案,利用 Manticore 的向量搜索,并且对大多数开发者可用。因此我们选择了 TinyCLIP ——这是一种在常规 CPU 上表现良好的紧凑型模型。

为什么选择 TinyCLIP?

TinyCLIP 是 CLIP(对比语言-图像预训练)模型家族的一部分。它能够生成图像和文本的向量表示。这使其非常适合以下任务:

  1. 通过其他图像搜索图像。
  2. 使用文本描述搜索图像。
  3. 查找与图像相关的文本信息。
  4. 搜索相似的文本。

TinyCLIP 的优点:

  • 紧凑性:模型占用更少的空间,消耗更少的内存。
  • CPU 工作:不需要昂贵的硬件。
  • 速度:快速处理请求。
  • 简单部署:易于集成和扩展。

我们将 TinyCLIP 与 Manticore Search 的向量搜索结合,以创建多模态搜索系统的实用基础。

向量搜索 是一种快速准确比较复杂数据的有效方法。Manticore Search 是一个支持向量搜索的开源引擎。因此,它成为实现图像反向搜索系统的绝佳选择。

使用 Manticore Search 实现图像反向搜索

以下是我们为创建系统而遵循的主要步骤:

  1. 安装 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'
   )
  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表中。这是一个重要步骤,将您的视觉数据转换为可以用于高效搜索的数值。

请参考 这个脚本 ,这是我们开发用于通过前面提到的Python API服务器将数据导入到演示中的。您要做的就是通过模型处理图片集合,生成可以保存到Manticore Search的向量。

  1. 实现搜索: 使用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 AI模型将图片转换为向量并执行快速相似性搜索。

主要功能:

  1. 反向图片搜索: 上传或提供图片链接以查找相似内容。
  2. 基于文本的图片搜索: 文本描述被转换为向量,以便查找匹配的图片。
  3. 高效的CPU处理: TinyCLIP无需专用硬件即可提供快速结果。

反向图片搜索的应用

反向图片搜索开启了许多可能性:

  • 电子商务
    反向搜索通过简单的图片上传帮助客户找到视觉上相似的产品。例如,如果一个买家看到喜欢的连衣裙但在网上找不到,他们可以上传图片,系统会显示可购买的类似连衣裙。这个功能有助于改善产品搜索和购物体验。

  • 内容管理
    对于拥有大型内容库的组织来说,查找重复图片是一项核心任务。反向搜索使内容管理人员能够快速识别和删除重复图片,优化存储空间并改进内容管理。此外,它还有助于跟踪跨平台上未经授权的图片使用,确保版权合规。

  • 推荐
    提供视觉上相似的推荐可以改善用户体验,帮助他们轻松找到相关内容。例如,用户上传家具照片,系统就会推荐风格或颜色相配的类似物品。这使得查找完整的搭配或探索类似选项变得更容易。这种方法可以应用于时尚、室内设计等众多领域,提供直观且以视觉为导向的推荐体验。

总结与展望

反向图片搜索技术已经走过了漫长的道路 - 从简单的颜色匹配到复杂的基于向量的相似性分析。借助TinyCLIP等模型和Manticore Search引擎,构建反向搜索系统已经变得适合各个水平的开发人员。

我们的反向图片搜索演示可在 image.manticoresearch.com 上使用,让您亲自探索这些技术。想要为您的应用添加视觉搜索功能或只是了解更多?这个演示是开始探索现代反向图片搜索功能的绝佳起点。

安装Manticore Search

安装Manticore Search