Milvus 向量数据库实践 - 1

news2024/10/25 8:26:37

假定你已经安装了docker、docker-compose 环境

参考的文档如下:

        Milvus技术探究 - 知乎

         MilvusClient() - Pymilvus v2.3.x for Milvus

         一文带你入门向量数据库milvus

一、在docker上安装单机模式milvus数据库

     1、 进入milvus官网: Install Milvus Standalone with Docker Compose Milvus documentation

     2、 复制并执行以下执行命令:            

# 下载docker-compose文件
wget https://github.com/milvus-io/milvus/releases/download/v2.3.10/milvus-standalone-docker-compose.yml -O docker-compose.yml

# 执行docker-compose 
sudo docker compose up -d

     3、查看应用是否全部成功启动了:docker ps -a     

     4、 执行docker-compose命令后,可能会出现 milvus-standalone 服务无法正常启动的情况,此时可长时间更改 milvus 的版本后再试试

      5、安装 milvus 的可视化操作控制台:Attu


# MILVUS_URL 是 milvus的连接地址,这个不重要,因为在可视化控制台可以修改 
docker run -p 8000:3000 -e MILVUS_URL=127.0.0.1:19530 zilliz/attu:v2.3.0

      6、浏览器打开:http://192.168.3.32:8000/

        

       

         7、预先创建一个collection,方便接下来用代码来测试实际效果        

         

 

二、使用python 测试图片的向量存储与检索:

   注意:实际使用发现 使用ResNet50模型更加方便一点,主要是dimension的维度不会特别大,milvus的向量维度最大支持:32768。 而使用MobileNetV2模型的话,提取的图片向量特征的dimension为62720。所以为了方便运行代码,体验milvus,直接使用ResNet50模型。

  1、直接上代码

import tensorflow as tf  
from PIL import Image  
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input  
from tensorflow.keras.preprocessing import image  
import numpy as np  
from pymilvus import MilvusClient
import os  
  
# 初始化Milvus连接  
milvus_client = MilvusClient(uri='http://192.168.3.32:19530')  
  
# 创建一个集合来存储图片向量  
collection_name = 'image_vectors'  
vector_dim = 1000   #向量维度
field_name = 'vec'  #向量字段

# 加载预训练的ResNet50模型  
model = ResNet50(weights='imagenet', include_top=True)

# 提取图片向量
def getFilefeatureVector1(image_path):  
    img = image.load_img(image_path, target_size=(224, 224))  
    img_array = image.img_to_array(img)  
    img_array = np.expand_dims(img_array, axis=0)  
    img_array = preprocess_input(img_array)  
      
    # 使用模型提取特征  
    feature_vector = model.predict(img_array)  
    feature_vector = np.squeeze(feature_vector, axis=0)  
    return feature_vector;

 
# 待测试图片的文件夹目录
image_folder = '/data/files/milvus/'  

# 遍历文件夹下的所有图片,提取特征并存储到Milvus  
def saveFileFeatureVector():
    i=1
    for filename in os.listdir(image_folder):  
        image_path = os.path.join(image_folder, filename)
        print(filename)

        # 获取向量  
        feature_vector=getFilefeatureVector1(image_path)

        print(feature_vector)

        # 将特征向量插入到Milvus集合中  
        insert_data = [{'id':i,'fileName':filename,field_name: feature_vector.tolist()}]  
        milvus_client.insert(collection_name, insert_data)  
        i=i+1


# 用特定图片的向量特征从milvus中查询相似的图片
def searchFile():
    # 取测试一张测试图片,获取到其向量特征后,作为查询条件
    image_path = os.path.join(image_folder, "IMG_20210716_212727_edit_1565328531531.jpg")
    # 获取向量  
    feature_vector=getFilefeatureVector1(image_path)
    search_params = {"metric_type": "L2", "params": {"nprobe": 10}}

    results=milvus_client.search(
        collection_name=collection_name, 
        data = [feature_vector],
        limit=6, # 查询6条
        offset=0, # 当该参数不为空的时候,为分页查询,配合limit使用,下标从0开始
        output_fields=["fileName"],
        search_params= search_params
    )

    for hits in results:
        # get the IDs of all returned hits
        # print(hits)

        for hit in hits:
            # get the value of an output field specified in the search request.
            # dynamic fields are supported, but vector fields are not supported yet.    
            print(hit)
        
  
    
#
print('开始打印')

# 第一步,保存图片向量数据到milvus中(数据初始化成功后,可以注释掉该方法)
saveFileFeatureVector()

# 第二步,用指定图片的向量特征查询相似图片
searchFile()

# 关闭Milvus连接  
milvus_client.close()

  2、saveFileFeatureVector 保存图片特征没有保存的时候,我们可以直接在Attu控制台查看数据集        

3、用使用 指定特图片来查询与其相似的图片执行结果        

4、本地电脑待测试图片的文件目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1497633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】string类的基础操作

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 1. 基本概述 2. string类对象的常见构造 3. string类对象的容量操作 4. string类对象的访问及遍历操作 5. 迭代器 6.…

noetic ros配置因时机械夹爪的驱动

noetic ros配置因时机械夹爪的驱动文件 配置编译教程解决方案 配置编译教程 1.inspire_robot 包支持因时机器人公司的机械夹爪在ROS平台上的使用,我们在ros noetic环境下进行了测试。 2.为了使程序能够正常运行,需要执行以下环境配置操作:&a…

从一个问题开始聊聊clickhouse的物化视图

【问题】 今天有A问我一个问题,我明明创建了一个物化视图,源表是有数据的,为什么查询物化视图就没有数据? 创建物化视图的SQL示意如下: CREATE MATERIALIZED VIEW schema1.test_mvon cluster clusterNameTO schema1…

玩转安卓之配置gradle-8.2.1

概述:看了一下,由于gradle是国外的,所以下载速度很慢,这个老师又是很菜的类型,同学又不会,于是曹某就写这一篇文章,教大家学会简单的为安卓配置gradle-8.2.1。 第一步:下载gradle-8…

【问题解决】| 关于vscode调试python文件 报错 且直接运行正常的诡异情况记录

关于python的debug报错,其实很奇怪 首先,对于工作区代码,我们可以通过CtrlShiftP 来切换Python解释器 这样的话,工作区的代码就不会报import error 而且这样的话是可以运行跑通的,但最抽象的一集来了,这…

JavaScript 作用域详解:如何影响变量生命周期

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

总结Redis的原理

一、为什么要使用Redis 缓解数据库访问压力mysql读请求进行磁盘I/O速度慢,给数据库加Redis缓存(参考CPU缓存),将数据缓存在内存中,省略了I/O操作 二、Redis数据管理 2.1 redis数据的删除 定时删除惰性删除内存淘汰…

多层菜单的实现方案(含HierarchicalDataTemplate使用)

1、递归 下面是Winform的递归添加菜单栏数据,数据设置好父子id方便递归使用 在TreeView的控件窗口加载时,调用递归加载菜单 private void LoadTvMenu(){this.nodeList objService.GetAllMenu(); // 通过Service得到全部数据// 创建一个根节点this.t…

NCDA设计大赛中设定画命题解读

一年一度的未来设计师全国高校数字艺术设计大赛(NCDA)正在如火如荼的进行中,各高校的大学生和指导老师们也都在着手准备中。今天我们就特地来说说它的数字绘画命题之一的设定画选项,为了使大家更好地参加本次比赛,本文…

博客系统测试

文章目录 1.项目背景介绍2.功能介绍3.手动测试3.1编写测试用例3.2项目测试3.2.1登录测试3.2.2查看详情页面3.2.3编辑页面3.2.4删除博客3.2.5注销用户 大家好,我是晓星航。今天为大家带来的是 博客系统测试 相关的讲解!😀 1.项目背景介绍 项…

Vue.js+SpringBoot开发农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理:2.2.2 位置信息管理:2.2.3 配送人员分配:2.2.4 路线规划:2.2.5 个人中心:2.2.6 退换快递处理:…

DxO ViewPoint:摄影师的最 佳拍档,记录世界的每一刻精彩 mac/win版

DxO ViewPoint是一款革命性的摄影软件,它以其独特的功能和卓越的性能,重新定义了摄影体验。这款软件不仅提供了丰富的摄影工具,还通过先进的算法和技术,让摄影师能够轻松捕捉、管理和展示他们的作品。 DxO ViewPoint 软件获取 Dx…

《幸运的基督徒》Python

题目描述 有15个基督徒和15个非基督徒在海上遇险, 为了能让一部分人活下来不得不将其中15个人扔到海里面去, 有个人想了个办法就是大家围成一个圈,由某个人开始从1报数, 报到9的人就扔到海里面,他后面的人接着从1开始报…

unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化

1.此处下断开始调试,list函数内就有问题: 2. 现在的问题是只读不写!32行就是写入部分的代码: 3. 很奇怪,调试的时候确实是写进来了 程序正常执行后,文件中数据也没有消失 关闭服务器文件内容依旧正常。 players包含所…

px2rem实现vue项目响应式布局

第一步 首先需要在项目中安装px2rem插件 npm install postcss-px2rem px2rem-loader --save 第二步 在项目src目录下新建util文件夹,在util文件夹下新建rem.js文件,内容如下: // rem等比适配配置文件 // 基准大小 const baseSize 14 //…

day14_异常

今日内容 零、 复习昨日 一、日期类 二、异常 零、 复习昨日 1为什么要重写toString Object类toString返回的是对象名字地址,无意义子类重写toString() 返回的对象属性内容 2为什么要重写equals Object类equals判断是对象的地址值是否相等,无意义子类重写equals,为了判断对象的…

电商分享沙龙干货:做印尼电商如何提高顾客购买意愿?

“得印尼者得东南亚” 这是诸多在印尼掘金的电商人的共识。2.7亿人口、GDP年增速稳定在5%、平均年龄在30岁上下、较强的消费能力……这些都使得印尼成为电商人掘金东南亚的首选之地。 图源:freepik 但近几年来,印尼政府不断调整关税,限制电商…

SAP MM学习笔记 - 错误 BMG140 - The material number is longer than the length set

错误 BMG140 - The material number is longer than the length set 品目编号大于长度设置 1,在新规品目的时候,出的错 2,OMSL 品目Code书式变更 IMG path>Logistic general>Material Master>Basic settings>Define output for…

滴滴基于 Clickhouse 构建新一代日志存储系统

ClickHouse 是2016年开源的用于实时数据分析的一款高性能列式分布式数据库,支持向量化计算引擎、多核并行计算、高压缩比等功能,在分析型数据库中单表查询速度是最快的。2020年开始在滴滴内部大规模地推广和应用,服务网约车和日志检索等核心平…

电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题

xinput1_3.dll文件是一个Windows操作系统中的动态链接库(DLL)文件,它是微软DirectX软件开发包的一部分,主要用于支持游戏控制器和其他输入设备的交互。这个文件是DirectInput API的一个组件,DirectInput是DirectX中处理…