使用elasticSearch搭建本地以图搜图服务

使用elasticSearch的向量检索实现以图搜图

前言

项目地址:https://github.com/xjhqre/sis/tree/v1.0

搭建本地以图搜图服务文章中实现了以图搜图,但还是存在一些问题,程序启动时需要加载大量的特征文件到内存中,每次程序启动时都需要花上十几分钟。

而在使用elasticSearch实现以图搜图文章中使用了elasticsearch来检索图片的描述。但是精准度不高,而且图片的训练速度有点慢

于是我想直接把特征数组直接存入elasticsearch来做检索。于是我查了一下elasticsearch能否存储向量数据,刚好找到了dense_vector这个数据结构,并且elasticsearch也提供了几种算法来计算向量之间的相似度。

快速开始

安装elasticsearch和kibana

需要注意dense_vector向量数据结构是在elasticsearch7.2版本之后加入的。

安装步骤可以直接看我的这篇文章全文检索-ElasticSearch里的docker安装目录

创建索引

在kibana里创建索引

# 创建索引结构
PUT imgsearch
{
  "mappings": {
    "properties": {
      "feature": {
        "type": "dense_vector",
        "dims": 1024
      },
      "url": {
        "type": "keyword"
      },
      "name": {
        "type": "keyword"
      }
    }
  }
}

其他的命令:

# 删除索引数据
DELETE imgsearch

# 查询索引数据
GET imgsearch/_search

# 查询索引
GET imgsearch

下载项目

https://github.com/xjhqre/sis/tree/v1.0

项目里有三个主要文件:

  • config.py:修改配置
  • offline.py:提取图片特征保存到elasticsearch
  • server_oss.py:启动web服务检索图片

1、修改elasticsearch配置,将以上两个文件里的elasticsearch的IP地址改为自己的

image-20220724150926368

2、修改两个文件中的图片路径,我的图片是放在OSS上的。可以把地址修改为./static/img/

image-20220724151101511

image-20220724151247408

3、运行offline.py文件查看elasticsearch是否存入数据

4、若以上步骤无误后启动server_oss.py,访问http://localhost:5000/即可

效果展示

image-20220724151940976

总结

优点:

  1. 不需要.npy文件
  2. 程序秒启动
  3. 图片检索速度快
  4. 特征数据备份方便,只需要备份elasticsearch的索引

缺点:

  1. 图片检索准确度可能会有所降低,因为elasticsearch的dense_vector数据结构最多支持的数组大小为1024。而图片提取的特征尺寸为4096,对特征数组做了切片

参考资料

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Elasticsearch可以用于以图搜图的应用。你可以将提取出来的特征向量存储在Elasticsearch中,并利用Elasticsearch的搜索能力来找出相似的图像。在Elasticsearch中,可以使用向量数据类型(dense_vector)来存储向量,并通过使用script_score查询来计算向量之间的相似度。 你可以通过安装Elasticsearch和Kibana来开始使用Elasticsearch。然后,将文件server.py和index_database.py中的es = Elasticsearch()改为es = Elasticsearch([{'host': 'xxx', 'port': 9200}], timeout=3600),其中xxx是安装Elasticsearch的机器的IP地址,以确保与Elasticsearch建立连接。 这样,你就可以使用Elasticsearch进行以图搜图的任务了。123 #### 引用[.reference_title] - *1* [使用elasticSearch搭建本地以图搜图服务](https://blog.csdn.net/xjhqre/article/details/125959890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [如何用 Elasticsearch 实现“图搜图”](https://blog.csdn.net/j3T9Z7H/article/details/131388281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [使用elasticSearch实现以图搜图](https://blog.csdn.net/xjhqre/article/details/125914198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值