搭建本地以图搜图服务

搭建本地以图搜图服务

一、前言

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

该服务是基于开源项目matsui528/sis搭建,在原项目的基础上做了一些修改。

原项目只能够检索jpg格式的图片。现在支持jpgpnggif、和png格式的图片搜索。

也可以自己添加需要的图片格式,只需要修改offline.py文件中的types数组即可,实际是否支持取决于库函数。

image-20220717151930189

注:

gif图片只会提取第一帧的特征,检索时也只会检索第一帧

二、快速开始

  1. 首先在电脑上安装好Python环境,版本推荐3.7,其他版本没有试过

  2. 下载项目到本地,使用git命令或者直接到github下载

  3. 安装Python包,打开命令行,进入sis目录,确保目录下有requirements.txt文件,执行pip install -r requirements.txt命令。若有还是有版本冲突请百度解决

  4. 图片库放到项目的static/img目录下

  5. 运行offline.py文件,在命令行执行命令:python offline.py

    该命令是提取static/img目录下所有图片的特征,每一个图片生成对应的==.npy保存到static/feature==目录下。

  6. 执行命令:python server.py。生成web服务,打开地址http://localhost:5000/即可开始以图搜图

三、效果展示

687474703a2f2f797573756b656d61747375692e6d652f70726f6a6563742f7369732f696d672f73637265656e63617074757265322e6a7067

这张图是matsui528/sis项目里的演示图,搜索结果图下面显示的是相似度距离,也可以自己修改页面显示图片的名字或者路径

四、云服务器部署

腾讯云服务器配置:

  • 系统:Ubuntu18.04
  • CPU: 2核 内存: 2GB
  • 40GB SSD云硬盘

云服务器先装好Python环境,并下载好项目。

由于我的服务器内存较小,只有2GB,在执行python offline.py命令时会报内存不足。所以我先在本地提取好特征再上传到服务器上。(后来发现内存不足的警告好像可以忽略)

将特征文件和图片文件都上传服务器之后,

执行nohup python -u server.py > server.log 2>&1 &

后台启动web服务程序,输出日志到server.log文件中

若需要添加新的图片,需要在本地提取好特征,将特征文件和图片文件上传服务器

五、OSS存储图片库

我的图片库有一万多张图片,一共有13个G,如果上传到服务器上需要花上十几个小时,速度实在是太慢了。于是我把图片文件都上传到了OSS存储,上传时间之花了十几分钟。

而一万多个特征文件只有100多mb,上传到服务器的速度是可以接受的。web服务程序启动时会把所有特征文件加载到内存,本地磁盘的IO速度肯定是比网络IO要快的。缩短服务程序的启动时间。

实现方法:

1、创建好OSS存储,创建img一个文件夹即可

image-20220717215610100

2、把提取好特征的图片上传OSS,特征文件上传云服务器

3、修改server_oss.py图片路径,把它改为自己的路径

image-20220718212150723

4、输入命令nohup python -u server_oss.py > server_oss.log 2>&1 &启动服务,查看log日志,若出现端口信息则表示启动完成(可能要花十几分钟)。

5、注意打开服务器的5000端口

六、待实现功能

现在还有一个痛点,就是每次添加图片到图片库里时,需要手动执行offline.py生成对应的特征文件,然后重启server.py服务。

最好可以在前端页面加一个添加图片库按钮,可以批量添加图片文件,然后将请求转发给后端接口进行特征提取以及保存图片信息,最后将提取好的特征文件路径和新增的图片路径加入各自的数组即可,不需要重启程序。

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值