基于 Milvus 和 ResNet50 的图像搜索(部署及应用)

官网部署文档(猛戳这里

小编部署系统的系统版本如下:

 

 1.启动 Milvus v2.0

1.1 下载docker-compose文件

wget https://github.com/milvus-io/milvus/releases/download/v2.1.0/milvus-standalone-docker-compose.yml -O docker-compose.yml

 1.2 启动 Milvus

sudo docker-compose up -d

 

 2. 启动MySQL

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 3. 启动后端

3.1 创建宿主机上存放图片的路径

3.2 往此路径上传图片数据

 

方便后面将图片挂在进容器中。

3.3 使用命令启动服务器

docker run -d \
-v /milvus_test/data:/data \
-p 5000:5000 \
-e "MILVUS_HOST=192.168.220.132" \
-e "MILVUS_PORT=19530" \
-e "MYSQL_HOST=192.168.220.132" \
milvusbootcamp/img-search-server:2.0

注意:命令里面的IP和端口要根据自己的情况进行修改。

 4. 启动客户端

docker run -d -p 8001:80 \
-e API_URL=http://192.168.220.132:5000 \
milvusbootcamp/img-search-client:1.0

注意:命令里面的IP和端口要根据自己的情况进行修改。

 到此,部署完成,打开浏览器,访问:ip:8001

 5. 加载图片数据

 点击右边的+切记不可多点击

 使用如下命令实时查看后端容器日志

docker logs -tf 572315ef104d

 如上图所示,图片正在努力加载中,请耐心等待。

注意:小编感觉这个版本的前端页面并没有实时显示加载过程,但是可以从后端日志看到。

 如上图所示,即加载完成。然后就可以上传图片进行搜索。

结果图片是相似度由高到低展示的。

6. 相关应用

6.1 修改搜索界面返回的数据格式

 

 观察search接口返回的数据,如果自己想调用这个接口,但又觉得返回的的数据格式不是自己想要的,可以修改源码。

在对应的源码server目录下,src中的main.py文件中 

 修改如图所示的地方即可。

6.2 调用接口加载单张图片

还是在main.py文件中

 其他需根据相应问题再做定夺。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基于 Milvus 的多模态检索系统可以实现对多种类型数据的检索,例如图像、文本、语音等。下面是一个简单的演示: 1. 首先,需要安装 Milvus 和相应的 Python SDK: ```shell pip install pymilvus==2.0.0rc5 pip install opencv-python==4.5.1.48 pip install Pillow==8.2.0 pip install grpcio==1.32.0 pip install grpcio-tools==1.32.0 ``` 2. 接下来,我们需要准备一些数据。这里以图像为例,将一些图像文件存储在本地文件夹中。 3. 然后,我们需要将这些图像向量化,并将它们插入到 Milvus 中。这里使用 ResNet50 模型提取图像特征,并使用 Milvus Python SDK 将特征向量插入到 Milvus 中。 ```python import os import cv2 import numpy as np from PIL import Image from milvus import Milvus, IndexType, MetricType, Status # 连接 Milvus milvus = Milvus(host='localhost', port='19530') # 创建 collection collection_name = 'image_collection' if collection_name in milvus.list_collections(): milvus.drop_collection(collection_name) milvus.create_collection(collection_name, {'fields': [ {'name': 'id', 'type': 'int64', 'is_primary': True}, {'name': 'embedding', 'type': 'float', 'params': {'dim': 2048}} ], 'segment_row_limit': 4096, 'auto_id': False}) # 加载 ResNet50 模型 model = cv2.dnn.readNetFromTorch('resnet50.t7') model.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV) model.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU) # 提取图像特征并插入到 Milvus 中 data_path = 'image_data' for i, file_name in enumerate(os.listdir(data_path)): file_path = os.path.join(data_path, file_name) img = cv2.imread(file_path) img = cv2.resize(img, (224, 224)) blob = cv2.dnn.blobFromImage(img, 1, (224, 224), (104, 117, 123)) model.setInput(blob) embedding = model.forward().flatten() status, ids = milvus.insert(collection_name=collection_name, records=[ {'id': i, 'embedding': embedding.tolist()} ]) print(f'Insert image {file_name} with id {ids[0]}') # 创建索引 milvus.create_index(collection_name, IndexType.IVF_FLAT, {'nlist': 128}) ``` 4. 现在,我们已经将图像向量化并插入到 Milvus 中了。接下来,我们可以使用 Milvus 的向量相似度搜索功能来实现多模态检索。这里以图像检索为例,给定一张查询图像,我们可以使用同样的方式提取其特征向量,并在 Milvus 中搜索与其相似的图像。 ```python # 加载查询图像 query_path = 'query_image.jpg' query_img = cv2.imread(query_path) query_img = cv2.resize(query_img, (224, 224)) query_blob = cv2.dnn.blobFromImage(query_img, 1, (224, 224), (104, 117, 123)) # 提取查询图像特征 model.setInput(query_blob) query_embedding = model.forward().flatten() # 在 Milvus 中搜索相似的图像 search_param = {'nprobe': 16} status, results = milvus.search(collection_name, query_embedding.tolist(), 10, search_params=search_param) print(f'Search results: {results}') ``` 以上就是一个简单的基于 Milvus 的多模态检索系统的演示。除了图像检索,我们也可以使用类似的方式实现文本、语音等多种类型数据的检索。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值