python+milvus实现一个以图搜图系统
当您听到“以图搜图”时,是否首先想到了百度、Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到库中进行搜索,并得到与其相似的若干图片。
引言
当您听到“以图搜图”时,是否首先想到了百度、Google 等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到库中进行搜索,并得到与其相似的若干图片。
说明
大概需要三个步骤
- 准备数据
- 训练数据
- 查询数据
准备数据
训练数据
训练数据的步骤这里是用了python
方式集成towhee
使用resnet50
模型训练提出特征向量,存储到milvus
,技术背景自行去了解,本文只整理操作步骤
安装minlvus(docker-compose方式)
1)、下载docker-compose.yml
wget https://github.com/milvus-io/milvus/releases/download/v2.1.4/milvus-standalone-docker-compose.yml -O docker-compose.yml
2)、docker启动docker-compose
docker-compose up -d
启动成功会显示
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
查询容器状态
docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------
milvus-etcd etcd -advertise-client-url ... Up 2379/tcp, 2380/tcp
milvus-minio /usr/bin/docker-entrypoint ... Up (healthy) 9000/tcp
milvus-standalone /tini -- milvus run standalone Up 0.0.0.0:19530->19530/tcp, 0.0.0.0:9091->9091/tcp
觉得不清楚的可以参考官方文档
https://milvus.io/docs/v2.1.x/install_standalone-docker.md
python集成milvus+towhee
官方项目Demo包含前后端,其中后端python实现,前端演示react实现
https://github.com/milvus-io/bootcamp/tree/master/solutions/image/reverse_image_search/one_step
提取特征向量的核心代码
import towhee
from towhee.functional.option import _Reason
class ResNet50:
def __init__(self):
self.pipe = (towhee.dummy_input()
.image_decode()
.image_embedding.timm(model_name='resnet50')
.tensor_normalize()
.as_function()
)
def resnet50_extract_feat(self, img_path):
feat = self.pipe(img_path)
if isinstance(feat, _Reason):
raise feat.exception
return feat
if __name__ == "__main__":
ResNet50().resnet50_extract_feat('https://github.com/towhee-io/towhee/raw/main/towhee_logo.png')
python后端启动方式
启动之前,首先修改config.py
,将host
修改成自己部署milvus
服务器的host
MILVUS_HOST = os.getenv("MILVUS_HOST", "127.0.0.1")
MILVUS_PORT = int(os.getenv("MILVUS_PORT", "19530"))
然后安装依赖,启动
$ cd bootcamp/solutions/reverse_image_search/one_step/server
$ pip install -r requirements.txt
$ python main.py
启动前端
注意:
- 前端demo只是一个功能演示,可以自己使用postman调用后端接口测试
- 确保自己有nodejs环境
前端目录:cd bootcamp/solutions/reverse_image_search/one_step/client
1、首先修改/src/utils/Endpoints.ts
中后端调用服务器端口,就是刚刚启动python项目端口
2、启动,我这边用的yarn
yarn install
yarn start
浏览器输入http://localhost:3000/
填入需要训练入库的图片文件夹,点击+
我们其实可以f12查看其接口的调用,刚刚的训练数据已经入库,现在显示有14个特征
查询数据
更多推荐
所有评论(0)