如何用 Elasticsearch 实现“图搜图”

1、什么是图搜图?

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

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

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

c9986120562f7020ec670890bf3b6c3b.png cd3f2e099331f2af9982e3ad5de84371.png
2、为什么要图搜索?传统搜索不香吗?

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

  • 寻找相似的图片

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

  • 找到图片的来源

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

  • 识别图片中的内容

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

  • 超越语言和文化障碍

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

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

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

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

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

步骤1:特征提取

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

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

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

步骤2:索引和搜索

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

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

4.1 架构梳理

22353cd3a8e3b2a88705c84ec3d35c78.png
  • 数据层:图片数据分散在互联网上,需要采集实现。

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

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

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

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

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

12e06a028be307aac1ed71e2ee295c75.png

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

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

4.3 生成向量

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

model.encode(image)

生成的向量参考如下:

be04545a0eade6e78d1561955e18de00.png

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 图搜图结果展示

99884afb28df62392a884939aa51dbea.gif

c785992f3cf164e315af9a19b5c51a28.png

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

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!

推荐阅读

  • 提前预体验阿里大模型“通义千问”的方法来了!

  • Meta AI负责人:ChatGPT等AI系统还没有狗聪明

  • AI,正在疯狂污染中文互联网

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18297.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RISC-V架构下 DSA - AI算力的更多可能性

责编 | 王子彧 出品 |进迭时空SpacemiT AI 应用出现在我们日常的生产生活当中,赋能各行各业的劲头势不可挡。近些年,AI 算力芯片领域群雄逐鹿,通过对芯片、算力与 AI 三者发展迭代过程的理解,我们发现高能效比的算力、通用的软件栈…

解忧杂货铺(五):用了无法离开的网站资源

目录 1、概述 2、网站列表 2.1 油猴 2.2、在线文档转换 2.3、电子书搜索 2.4、学吧导航 2.5、茶杯狐看片 2.6、极简插件 2.7、图片风格更改 2.8、千帆搜索 2.9、俄罗斯以图搜图 2.10、在线图片处理工具 2.11、英语在线真题 2.12、快搜 2.13、菜鸟教程 2.14、导航…

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例

Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例 一、Opencv大图找小图说明二、Opencv的window安装1.下载windows下的安装包2.安装3.Java中Opencv加载测试 三、Java中通过Opencv进行模板匹配大图找小图四、进行多图查找五:案例下载bilibili视…

利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】 在博文 https://www.hhai.cc/thread-220-1-1.html 中我们利用直方图的反向投影原理可以寻找图像中具有某个直方图特征的部分。 但是有时候会遇到这样的情况:图像中某个部分的…

chatgpt赋能python:Python以图搜图:如何用Python优化SEO?

Python以图搜图:如何用Python优化SEO? 随着搜索引擎算法的普及,优化您的SEO策略需要更多的创意和技巧。一种方法是使用Python以图搜图,具有该技能可以使您的网站上升到搜索结果列表的顶部。在这篇文章中,我们将探讨Py…

使用Milvus搭建以图搜图服务

使用Milvus搭建以图搜图服务 介绍安装MilvusJava调用Milvus插入、查询引入Maven依赖创建Milvus客户端实现Milvus插入向量数据实现Milvus 查询向量 结尾 介绍 网上相关的实现比较少,最多也只能查到Milvus,但不知道怎么使用。最后通过ChatGPT了解到了相关…

chatgpt赋能python:Python在SEO中的应用之以图找图

Python在SEO中的应用之以图找图 在SEO优化中,一个重要的环节是优化图片,而通过利用Python编写的代码,可以实现以图搜图,简化了图片优化的流程和提高了优化效率。 什么是以图找图 以图搜图,即通过一张已知图片搜索出…

自研芯片架构 ,这家中国公司发布DPU芯片计划

近日,专注于智能计算领域的DPU芯片和解决方案公司中科驭数发布了其下一代DPU芯片计划,将基于自研的KPU(Kernel Processing Unit)芯片架构,围绕网络协议处理、数据库和大数据处理加速、存储运算、安全加密运算等核心功能&#xff0…

十大芯片公司盘点,转行怎么选择芯片设计公司?

不少同学想要入行IC,想要了解IC行业哪些公司比较有前景?芯片设计公司哪家强?下面IC修真院就来为大家盘点一下! 中国十大芯片企业排名 1.海思Hisilicon 2.Spreadtrum展讯 3.龙芯loongson 4.兆易创新GigaDevice 5.汇顶GOODIX 6.华大…

全球爆火的ChatGPT,能否推动芯片市场增长?

“我所热爱的是我真实的生活,因为它包含了我所有的经历和感受,是我每一天都在体验和思考的。”这句非常有诗意的话,来自最近爆火的ChatGPT。 ChatGPT作为一款智能机器人,上知天文下知地理,不仅能写文案,还…

拿走!H5版本ChatGPT开源等你

近些日子忙里偷闲的研究chatGPT,也小弄了一个公众号版本,一个H5版本的,现在H5版本的也就是开放给大家体验的版本,还不知道的伙伴可以关注#公众号:李连活,回复“888”领取体验,和AI畅快聊天问答。…

ChatGPT分销版如何接入文心一言(文心千帆)?

对于ChatGPT分销版的对话通道接入还是比较简单的,为什么这么久才接入? 其实很久之前我们就在申请接入百度的文心一言(文心千帆),但是最之前的条件确实太苛刻了,需要签订各种协议以及缴纳各种费用&#xff0…

GPT-4震撼发布:多模态大模型,直接升级ChatGPT、必应,开放API,游戏终结了?...

ChatGPT 点燃了科技行业的明灯,GPT-4 能燎原吗? 谁能革得了 ChatGPT 的命?现在看来还是 OpenAI 自己。 在 ChatGPT 引爆科技领域之后,人们一直在讨论 AI「下一步」的发展会是什么,很多学者都提到了多模态,我…

(抛砖引玉)用好chatgpt小帮手,写一个实验室管理系统

本文用实际案例描述了如何用好chatgpt做一些小程序,主要是写给缺乏实际编程经验但又不得不硬着头皮上的同学。 大佬们可以直接飘过~ 目前兼着实验室管理员的工作,众做周知,电子工程师的实验室一般来说都是杂乱无章的,没有设备维护…

GPT发展史

不知道大家是否还记得年初刷屏的 DALLE2 ?因为它的爆火,大家开始不约而同的讨论起 AI 绘画会不会代替设计师的工作,这个话题至今还被人常常提起。最近,OpenAI 再放大招,推出的 ChatGPT 席卷网络,大家又开始…

IEEE IS评选AI十大新星,9位华人获奖

最近人工智能领域著名杂志 IEEE Intelligent Systems公布了 2022 年度「人工智能十大新星」(AIs 10 to Watch)名单 ,其中有九位都是华人研究者。 推荐阅读: ▶不愁失业!英伟达 CEO 黄仁勋:“AI 让每个人都能…

死磕数据库系列(三十二):MySQL 数据库、数据表管理工具介绍

关注公众号,回复“1024”获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 数据库、数据表相关工具的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!! 数据…

IBM停止招聘可被AI取代的职位;三星禁止员工使用ChatGPT;印象笔记官方AI免费课;清华美院AI绘画的高质量分享 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『IBM将停止招聘可被人工智能取代的职位』近8000名工人将被自动化取代 据彭博社报道,IBM首席执行官Arvind Krishna表示&am…

死磕数据库系列(三十一):MySQL 服务器 CPU、磁盘、内存等硬件选型

点关注公众号,回复“1024”获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 服务器的磁盘及相关硬件选型的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!更多关于MyS…

Linux 中 root 与 sudo 的用法与区别,居然这么多人搞不清楚。。。

点关注公众号,回复“1024”获取2TB学习资源! Linux 下面有两个概念可能大家接触的比较多,一个是 sudo 命令,还有一个是 root 账户。Sudo 命令可以以最高权限执行命令,而 root 账户下所有命令都有最高权限,也…