milvus bootcamp FAST API使用简记

news/2024/10/23 9:27:06/

0 引言

前面写了几篇记录,都是在记录解决了哪些基本问题。在经过一系列铺垫之后,终于又来到milvus bootcamp这个示例项目面前,继续摸索其如何使用。

1 milvus版本升级

此bootcamp中提供的milvus的docker版本过低,因此我又从其他地方找来最新docker版本,如下:

//docker-compose.yml
version: '3.5'services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.5environment:- ETCD_AUTO_COMPACTION_MODE=revision- ETCD_AUTO_COMPACTION_RETENTION=1000- ETCD_QUOTA_BACKEND_BYTES=4294967296- ETCD_SNAPSHOT_COUNT=50000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcdcommand: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcdminio:container_name: milvus-minioimage: minio/minio:RELEASE.2022-03-17T06-34-49Zenvironment:MINIO_ACCESS_KEY: minioadminMINIO_SECRET_KEY: minioadminvolumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_datacommand: minio server /minio_datahealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3standalone:container_name: milvus-standaloneimage: milvusdb/milvus:v2.2.8command: ["milvus", "run", "standalone"]environment:ETCD_ENDPOINTS: etcd:2379MINIO_ADDRESS: minio:9000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvusports:- "19530:19530"- "9091:9091"depends_on:- "etcd"- "minio"
networks:default:name: milvus                                                                           

2 代码补丁

代码运行过程中出现异常,从http://127.0.0.1:5000/docs界面中操作FAST API接口出现异常。通过跟踪出错堆栈,修改代码如下:

//bootcamp/solutions/image/reverse_image_search/quick_deploy/server/src/milvus_helpers.py
diff --git a/solutions/image/reverse_image_search/quick_deploy/server/src/milvus_helpers.py b/solutions/image/reverse_image_search/quick_deploy/server/src/milvus_helpers.py
index 4f6e379b..9480e805 100644
--- a/solutions/image/reverse_image_search/quick_deploy/server/src/milvus_helpers.py
+++ b/solutions/image/reverse_image_search/quick_deploy/server/src/milvus_helpers.py
@@ -60,6 +60,7 @@ def insert(self, collection_name, vectors):# Batch insert vectors to milvus collectiontry:self.create_collection(collection_name)
+            self.create_index(collection_name)data = [vectors]self.set_collection(collection_name)mr = self.collection.insert(data)
@@ -76,6 +77,7 @@ def create_index(self, collection_name):# Create IVF_FLAT index on milvus collectiontry:self.set_collection(collection_name)
+            self.collection.release()default_index = {"index_type": "IVF_SQ8", "metric_type": METRIC_TYPE, "params": {"nlist": 16384}}status = self.collection.create_index(field_name="embedding", index_params=default_index)if not status.code:
@@ -103,6 +105,7 @@ def search_vectors(self, collection_name, vectors, top_k):# Search vector in milvus collectiontry:self.set_collection(collection_name)
+            self.collection.load()search_params = {"metric_type": METRIC_TYPE, "params": {"nprobe": 16}}# data = [vectors]res = self.collection.search(vectors, anns_field="embedding", param=search_params, limit=top_k)

3 系统启动

系统启动参考bootcamp中README进行即可,我在这里再简单描述一下。首先,启动docker-compose.yml中的容器,然后按照README中的描述启动一个mysql:5.7容器。最后使用python3 src/main.py启动服务端。服务端启动之后,就可以在浏览器中打开http://127.0.0.1:5000/docs,使用FAST API接口来操作来测试milvus服务。

4 GET /data接口测试

此接口就是测试一下从界面中显示图片。系统假定图像素材目录在当前机器的/data目录下。在GET接口中首先点击"Try it out"之后,在img_path中输入一个图像路径,比如/data/dog_01.jpg,然后再点击Execute按钮,在下方就能显示出相应路径的图像。每次执行一个命令时,在python3 src/main.py所在的终端界面中,都要打印出服务端执行的日志。

5 GET /progress接口测试

此接口我的理解就是统计当前在/data/目录下图像的数量。

6 POST /img/load接口测试

此接口是向milvus中添加/data目录下的图像素材。在Request body中填写如下参数:

{"Table": "reverse_img_search","File": "/data"
}

其中,reverse_img_search是milvus概念中的collection name,同时也是mysql中的表名。File字段就是填写要加载的图像所在目录。
执行成功之后,可以登陆mysql中查看

sudo mysql -h127.00.1 -uroot -p
show databases;
use mysql;
show tables;
select * from reverse_img_search;+--------------------+------------------------+
| milvus_id          | image_path             |
+--------------------+------------------------+
| 441440473896720459 | /data/aeroplane_01.jpg |
| 441440473896720460 | /data/aeroplane_02.jpg |
| 441440473896720461 | /data/dog_01.jpg       |
| 441440473896720462 | /data/1.png            |
+--------------------+------------------------+
4 rows in set (0.00 sec)

7 POST /img/search接口测试

此接口即是以图搜图,在table_name中填写前面load时的collection name:reverse_img_search,在img中选择一个本地图像,界面中会显示搜索结果如下:

[["/data/dog_01.jpg",0],["/data/aeroplane_02.jpg",0],["/data/1.png",1.6162450313568115],["/data/aeroplane_01.jpg",1.6162450313568115]
]

即返回collection中每个图像与当前本地图像的相似度。

8 POST /img/count接口测试

此接口来测试图像数量,也是在table_name中输入reverse_img_search,会在界面中返回数量。

9 后记

这里只是测试服务端API接口,即直接对milvus服务进行本地操作,后续要从client端来测试milvus。


http://www.ppmy.cn/news/70425.html

相关文章

数据结构与算法:编程中的基本功

I. 数据结构与算法的重要性 1.1 数据结构与算法的定义 数据结构,如其名,是用来存储和组织数据的结构。它们可以用于实现高效的数据访问和操作。常见的数据结构包括数组、链表、栈、队列、哈希表、树和图等。 算法,是为解决特定问题而详细规定的一系列操作步骤。它可以用于…

Java进阶-常用API(时间包装类)

第一章 Date类 1.1 Date概述 java.util.Date类 表示特定的瞬间,精确到毫秒。 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数 public Date():从运行程序的此时此刻到…

MapReduce框架原理:7.Join多种应用

Reduce Join工作原理 Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成…

红魔品牌五周年,长出一个茂盛“电竞生态”

红魔新品来袭。 5月10日,红魔电竞举办宇宙新品发布会,向广大玩家带来了红魔8 Pro变形金刚领袖版以及氘锋系列IOT,银翼电竞显示器、电竞键鼠等各类融合先锋设计元素的硬核电竞装备。 一、红魔多款硬核电竞新品来袭 红魔8 Pro变形金刚领袖版…

前端综合项目-个人博客网页设计

个人博客前端部分设计 文章目录 前端综合项目-个人博客网页设计1. 预计效果2. 公共样式设计2.1 背景设计2.2 导航栏设计2.3 博客列表页和博客详情页的共同内容2.3.1 页面划分css设计2.3.2 左侧card内容2.3.3 右侧article内容 3. 博客列表页4. 博客详情页5. 博客登录页5.1 页面划…

TCP 和 UDP 协议详解

文章目录 1 概述2 TCP 协议2.1 报文格式2.2 三次握手,建立连接2.3 四次挥手,断开连接2.4 窗口机制 3 UDP 协议3.1 传输头格式 4 扩展4.1 常用端口号4.2 TCP 与 UDP 区别 1 概述 #mermaid-svg-aC8G8xwQRSdze7eM {font-family:"trebuchet ms",ve…

【利用AI刷面试题】AI:十道JavaScript面试题巩固一下知识

文章目录 1. 请说明 JS 中的闭包是什么,它有哪些应用场景?2. 请描述一下数组的遍历方式,如何向数组中添加元素?3. 如何利用JS实现一个进度条?4. 请阐述浮点数在 JavaScript 中的存储机制?5. 请简述ES6 模块…

基于html+css的图展示70

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…