Elasticsearch 8.X “图搜图”实战

这篇具有很好参考价值的文章主要介绍了Elasticsearch 8.X “图搜图”实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、什么是图搜图?

"图搜图"指的是通过图像搜索的一种方法,用户可以通过上传一张图片,搜索引擎会返回类似或者相关的图片结果。这种搜索方式不需要用户输入文字,而是通过比较图片的视觉信息来找到相似或相关的图片。这项技术在许多不同的应用中都很有用,如找到相同或相似的图片,寻找图片的来源,或者识别图片中的物体等等。

图像搜索的技术基础主要包括图像处理和机器学习等方面。通过图像处理,可以提取图像的特征(如颜色、形状、纹理等),然后通过机器学习模型比较这些特征来寻找相似的图片。近年来,深度学习也在图像搜索中发挥了重要作用,使得搜索结果更加精确和高效。

举例:谷歌“按图搜索”、百度识图。

elasticsearch 以图搜图elasticsearch 以图搜图

2、为什么要图搜索?传统搜索不香吗?

图像搜索和传统的文本搜索都有它们各自的优点和适用场合。以下是一些使用图像搜索的原因:

  • 寻找相似的图片

如果你有一张图片,想找到类似的图片,或者找到这张图片的其他版本(如不同的分辨率或是否有水印等),图像搜索是最直接的方法。

  • 找到图片的来源

如果你找到一张你喜欢的图片,但不知道它来自哪里,图像搜索可以帮你找到它的原始来源,比如说是来自哪个网站或者是谁拍摄的。

  • 识别图片中的内容

图像搜索也可以帮助你识别图片中的物体或人物。比如说,你有一张含有未知物体的图片,你可以通过图像搜索来识别它是什么。

  • 超越语言和文化障碍

有时候,你可能无法用文字准确描述你要搜索的内容,或者你不知道它的正确名称。在这种情况下,图像搜索可以帮助你找到你需要的信息,不需要考虑语言和文化的差异。

举个例子:小区里带孩子玩,遇到一个虫子,小朋友们都围过去,好奇的小朋友就问到“这个虫子叫什么名字?”家长们也都不知道,有点像小时候见过的豆虫,但又不完全一样,最终借助“百度识图”搞定答案。

总的来说,图像搜索是一个非常有用的工具,能够补充和增强传统的文本搜索。不过,它也并不是万能的,有时候还是需要配合文本搜索一起使用才能得到最好的搜索结果。

3、Elasticsearch 8.X 如何实现图搜图?

从宏观角度,类似把“大象放冰箱”的几个大步骤,Elasticsearch 8.X 要实现图搜图需要两个核心步骤:

步骤1:特征提取

使用图像处理和机器学习的方法(如卷积神经网络)来提取图像的特征。这些特征通常会被编码为一个向量,可以用来衡量图像的相似度。有一些开源的工具库可以用于图像特征提取,部分举例如下:

工具库 语言 主要特性
OpenCV C++,Python,Java 提供多种特征提取算法,如SIFT,SURF,ORB等;同时提供一系列图像处理功能
TensorFlow Python 提供预训练的深度神经网络模型,如ResNet,VGG,Inception等,用于提取图像特征
PyTorch Python 提供预训练的深度神经网络模型,如ResNet,VGG,Inception等,用于提取图像特征
VLFeat C,MATLAB 提供多种特征提取算法,如SIFT,HOG,LBP等

这些库都为图像特征提取提供了大量的工具和函数,可以帮助开发者快速地实现图像特征提取。需要注意的是,不同的特征提取方法可能适用于不同的任务,选择何种方法取决于特定的应用需求。

步骤2:索引和搜索

将提取出来的特征向量存储在Elasticsearch中,然后利用Elasticsearch的搜索能力来找出相似的图像。Elasticsearch的向量数据类型可以用来存储向量,而script_score查询可以用来计算相似度。

4、Elasticsearch 8.X “图搜图”实战

4.1 架构梳理

elasticsearch 以图搜图
  • 数据层:图片数据分散在互联网上,需要采集实现。

  • 采集层:借助爬虫或者已有工具采集数据,存储到本地即可。

  • 存储层:借助向量转换工具或模型工具,遍历图片为向量存入Elasticsearch。

  • 业务层:实现图片转向量后,借助knn检索实现图搜图。

4.2 clip-ViT-B-32-multilingual-v1工具选择

sentence-transformers/clip-ViT-B-32-multilingual-v1是OpenAI的CLIP-ViT-B32模型的多语言版本。

elasticsearch 以图搜图

该模型可以将文本(50多种语言)和图像映射到一个公共的密集向量空间中,使得图像和匹配的文本紧密相连。这个模型可以用于图像搜索(用户通过大量的图像进行搜索)和多语言的图像分类(图像标签被定义为文本)。

模型地址:https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1

4.3 生成向量

如下的函数能将已有数据集图片生成向量。

model.encode(image)

生成的向量参考如下:

elasticsearch 以图搜图

4.4 执行检索

POST my-image-embeddings/_search
{
  "knn"           : {
  "field"         : "image_embedding",
  "k"             : 5,
  "num_candidates": 10,
  "query_vector"  : [
      -0.7245588302612305,
      0.018258392810821533,
      -0.14531010389328003,
      -0.08420199155807495,
     .....省略.......
    ]
  },
  "fields": [
    "image_id",
    "image_name",
    "relative_path"
  ]
}

如上搜索请求使用了Elasticsearch的k-NN (k-最近邻) 插件来查找与query_vector最接近的图像。

具体的参数含义如下:

参数 含义
knn 表示将使用k-最近邻搜索。
field 定义了执行k-NN搜索的字段。在此例中,image_embedding 字段应包含图像的嵌入向量。
num_candidates 是一个控制搜索精度和性能权衡的选项。在一个大的索引中,寻找确切的k个最近邻居可能会很慢。因此,k-NN插件首先找到num_candidates个候选,然后在这些候选中找到k个最近邻居。在此例中,num_candidates: 10 ,表示首先找到10个候选,然后在这些候选中找到5个最近邻居。
query_vector 要比较的查询向量。k-NN插件会计算这个向量与索引中的每个向量的距离,然后返回距离最近的k个向量。在此例中,query_vector 是一个大的浮点数列表,代表图像的嵌入向量。
fields 定义了返回的字段。在此例中,搜索结果将只包含image_id,image_name,和relative_path字段。如果不指定 fields参数,搜索结果将包含所有字段。

4.5 图搜图结果展示

elasticsearch 以图搜图

elasticsearch 以图搜图

5、小结

总结一下,图搜图功能的实现重点在于两个关键的组件:Elasticsearch和预训练模型 sentence-transformers/clip-ViT-B-32-multilingual-v1。

Elasticsearch,作为一个基于Lucene的搜索服务器,为分布式多用户全文搜索提供了一个基于RESTful web接口的平台。另一方面,sentence-transformers/clip-ViT-B-32-multilingual-v1,这个预训练模型,基于OpenAI的CLIP模型,可以生成文本和图像的向量表示,这对于比较文本和图像的相似性至关重要。

在具体实现过程中,每个图像的特征都由预训练模型提取,得到的向量可以视作图像的数学表示。这些向量将存储在Elasticsearch中,为图搜图功能提供了一个高效的最近邻搜索机制。当有新的图像上传进行搜索时,同样使用预训练模型提取特征,得到向量,并与Elasticsearch中存储的图像向量进行比较,以找出最相似的图像。

整个过程体现了预训练模型在图像特征提取中的重要作用,以及Elasticsearch在进行高效最近邻搜索中的强大能力。两者的结合为图搜图功能的实现提供了一个可靠的技术支持。

参考

  • 1、https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1

  • 2、https://github.com/rkouye/es-clip-image-search

  • 3、https://github.com/radoondas/flask-elastic-image-search

  • 4、https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html

  • 5、https://unsplash.com/data

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单

  3. 如何系统的学习 Elasticsearch ?

  4. 2023,做点事

  5. Elasticsearch:普通检索和向量检索的异同?

  6. 干货 | Elasticsearch 向量搜索的工程化实战

  7. 高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索

更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

elasticsearch 以图搜图

大模型时代,抢先一步学习进阶干货!文章来源地址https://www.toymoban.com/news/detail-523024.html

到了这里,关于Elasticsearch 8.X “图搜图”实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 某某88以图搜图

    声明:本文仅限学习交流使用,禁止用于非法用途、商业活动等。否则后果自负。如有侵权,请告知删除,谢谢!本教程也没有专门针对某个网站而编写,单纯的技术研究 cnVub29iaHR0cHM6Ly9zLjE2ODguY29tL3lvdXl1YW4vaW5kZXguaHRtPw== 1.对应接口: 2.难点: 1.sign从直观来看是32位,所以我们可

    2024年02月15日
    浏览(37)
  • 使用火山云搜索ESCloud服务构建图文检索应用(以文搜图/以图搜图)

    图文检索在生活中具有广泛的应用,常见的图片检索包括基于文本内容搜索和基于图片内容搜索。用户通过输入文字描述或上传图片就可以在海量的图片库中快速找到同款或者相似图片,这种搜索方式被广泛应用于电商、广告、设计以及搜索引擎等热门领域。 本文 基于 火山

    2024年02月14日
    浏览(38)
  • 图片搜索引擎网站大全,以图搜图网站

    当我们需要搜索一些图片的时候使用图片搜索引擎网站可以帮我们更快地找到自己需要的图片,那么有哪些图片搜索引擎网站可以搜索图片呢?下面小编就来和大家分享几个以图搜图的网站。 1.百度图片搜索引擎网站 百度是最大的中文搜索引擎,百度的图片搜索以中文网站的

    2024年02月07日
    浏览(73)
  • ES 如何实现向量搜索【以图搜图/语义搜索】

    在 ES 的使用过程中,通过设置分词器可以灵活地按照文本字面实现搜索和查询。但是在某些场景下,向量搜索非常有必要,比如 CV 方面的以图搜图和 NLP 领域的语义搜索。较新的 ES 版本支持稠密向量搜索,详情如下。相关片段设置重在强调特定的关键点,需要根据自己具体

    2024年02月11日
    浏览(57)
  • 【milvus】向量数据库,用来做以图搜图+人脸识别的特征向量

    ref:https://milvus.io/docs 第一次装东西,要把遇到的问题和成功经验都记录下来。 1.Download the YAML file 看一下下载下来的是什么东西 Start Milvus In the same directory as the docker-compose.yml file, start up Milvus by running: 报错则需要安装docker-compose了 下载最新版的docker-compose 文件 添加可执行权限

    2024年02月16日
    浏览(43)
  • OpenCV #以图搜图:均值哈希算法(Average Hash Algorithm)原理与实验

    均值哈希算法(Average Hash Algorithm,简称aHash) 是哈希算法的一种,主要用来做相似图片的搜索工作。   均值哈希算法(aHash)首先将原图像缩小成一个固定大小的像素图像,然后将图像转换为灰度图像,通过缩小图像的每个像素与平均灰度值的比较,生成一组哈希值。最后,

    2024年02月08日
    浏览(42)
  • Pytorch基于VGG cosine similarity实现简单的以图搜图(图像检索)

    代码如下: 上述代码的核心思想类似于感知损失(Perceptual Loss),利用VGG提取图像的多级特征,从而比较两张图像之间的相似性。区别在于Perceptual Loss中一般使用MAE,MSE比较特征的距离,而这里的代码使用余弦相似度。 一个例子如下,给定一张狸花的图像(query)如下: 我们希望

    2024年02月13日
    浏览(42)
  • OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

    感知哈希算法(Perceptual Hash Algorithm,简称pHash) 是哈希算法的一种,主要可以用来做以图搜索/相似图片搜索工作。   感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后将图像转换为灰度图像,通过使用离散余弦变换(DCT)来获取频域信息。然后,根

    2024年02月05日
    浏览(58)
  • ElasticSearch 实战:ElasticSearch文档全文检索

    Elasticsearch 实战:Elasticsearch 文档全文检索 全文检索是 Elasticsearch 的核心功能之一,它允许用户对文本内容进行高效的模糊搜索、词组匹配、同义词处理、停用词过滤等操作。以下是如何进行文档全文检索的详细步骤: **1. **全文匹配查询(Match Query) 最基础的全文检索查询是

    2024年04月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包