Milvus 向量数据库实践 - 1

假定你已经安装了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=1for 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.mzph.cn/news/723749.shtml

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

相关文章

微信小程序显示PDF文件

需求&#xff1a;在小程序中显示PDF文件 思路&#xff1a;wx.openDocument打开新的网页&#xff0c;显示PDF文件 <view click"showPdf">点击查看协议</view>showPdf() {// let url otption.currentTarget.dataset.index.keyValue;let url "https:…

LeetCode:1976. 到达目的地的方案数(spfa + 记忆化 Java)

目录 1976. 到达目的地的方案数 原题链接 题目描述&#xff1a; 实现代码与解析&#xff1a; spfa 记忆化 原理思路&#xff1a; 1976. 到达目的地的方案数 原题链接 1976. 到达目的地的方案数 题目描述&#xff1a; 你在一个城市里&#xff0c;城市由 n 个路口组成&a…

html 文字滚动

<marquee> 标签 创建文字滚动的标签 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>wzgd</title></head><body><marquee direction"left" height"30" width"600&q…

常见运维面试题

1. 描述Linux文件系统的结构和主要组件。 Linux文件系统的结构是层次化的&#xff0c;并且它有索引节点&#xff08;inode&#xff09;和目录项&#xff08;dentry&#xff09;等主要组件。 Linux文件系统的结构设计得非常巧妙&#xff0c;它采用了一种标准的层次化结构来组织…

python细节随笔

1:python 二维数组的创建方式 下面是创建三行两列的数组 且数组的初始元素是0 0 for i in range(2) 表示的是创建两列, 后面的 for j in range(3) 表示 这样的 我要3个 也就是3行了 a [[0 for i in range(2)] for j in range(3)] print(a) 2:数组里面的 a.index(x) 表示的是…

Qt Creator配置MSVC编译环境、调试环境

在windows上开发&#xff0c;一般使用Qt Creator自带mingw编译器&#xff0c;编译和调试都很方便&#xff0c;安装Qt时勾选后&#xff0c;自动配置完毕。 但是有时候我们需要使用MSVC的编译器&#xff0c;这个时候我们没法直接使用&#xff0c;需要配置环境才能使用&#xff0…

Leetcode 387周赛:3069, 3070, 3071

文章目录 Leetcode3069 将元素分配到两个数组中 ILeetcode3070 元素和小于等于k的子矩阵数目Leetcode3071 在矩阵上写出字母Y所需的最小操作次数 Leetcode3069 将元素分配到两个数组中 I 题目&#xff1a;给你一个下标从 1 开始、包含 不同 整数的数组 nums &#xff0c;数组长…

十秒学会Ubuntu命令行:从入门到进阶

一、引言 在使用Ubuntu操作系统时&#xff0c;命令行界面&#xff08;CLI&#xff09;是不可或缺的一部分。对于初学者来说&#xff0c;掌握基本的命令行操作可以帮助他们更高效地管理系统和软件。 本文将介绍一些常见的Ubuntu命令以及如何解决与命令行相关的问题。 目录 一、…

Java-类和对象

Scanner input new Scanner(System.in);类: 把 具有相同属性的对象 放在一起,组成一个集合public class 类名{// 定义属性: 名词数据类型 属性名; // 属性名 首字母小写,如果有多个单词,则其余首字母大写//定义方法: 动词,访问修饰符 返回值类型 方法名(){// 方法的执行内容…

基于umdf2的驱动程序

源码下载&#xff1a;https://download.csdn.net/download/mao0514/88915667 win10 64位系统vs2019wdk inf安装&#xff1a; VOID UMDF2Driver1EvtIoDeviceControl(_In_ WDFQUEUE Queue,_In_ WDFREQUEST Request,_In_ size_t OutputBufferLength,_In_ size_t InputBufferLen…

BUUCTF-Misc-百里挑一

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件打开是一个流量包文件&#xff1a; 全是在传图片时候的流量&#xff0c;先把图片保存出来文件–>导出对象–>HTTP–>保存到一个文件夹 然后使用kali下的exiftool找到了一半flag exiftool *|grep flag 另外一半…

test-mapper/service

1 package com.xxx.common.mapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xxx.common.entity.Collect; import com.baomidou.mybatisplus.core.mapper.BaseMapper;import java.util.List;/*** <p>* Mapper 接口* </p>…

工业网关、物联网网关与PLC网关是什么?

网关是什么&#xff1f; 网关是一种用于连接不同网络的网络设备&#xff0c;其作用是实现网络之间的通信和数据交换。它负责将一个网络的数据转发到另一个网络&#xff0c;并且可以进行路由、转换和过滤等处理。通常用于连接局域网和广域网之间&#xff0c;可以是硬件设备或者软…

7、Linux-防火墙和配置静态ip

一、防火墙&#xff08;防火墙服务名firewalld&#xff09; 防火墙配置命令&#xff1a;firewall-cmd firewall-cmd --help&#xff1a;防火墙帮助firewall-cmd --state&#xff1a;查看防火墙状态firewall-cmd --zonepublic --list-ports&#xff1a;查看所有打开的端口firew…

zabbix 监控 MogDB/openGauss 之 采集 prometheus 数据

zabbix 监控 MogDB/openGauss 之 采集 prometheus 数据 前言 市场上比较的监控方式有两种&#xff1a;zabbix 和 prometheus 架构&#xff0c;对于 MogDB/openGauss 数据库来说&#xff0c;已经通过grafana prometheus opengauss_exporter的方式完成了监控部署&#xff0c;…

html实体字符,已拿offer入职

面试知识点 主要内容包括html&#xff0c;css&#xff0c;前端基础&#xff0c;前端核心&#xff0c;前端进阶&#xff0c;移动端开发&#xff0c;计算机基础&#xff0c;算法与数据结构&#xff0c;设计模式&#xff0c;项目等等。 html 1.浏览器页面有哪三层构成&#xff0c…

ES-ES性能优化

缓存优化&#xff1a; 功能优化&#xff1a; 访问多&#xff1a;热层 访问少&#xff1a;温层 极少访问&#xff1a;第三方

【2024年最新】294地级市-地理相邻矩阵(名称版、行政代码版)

数据为同省下城市之间的相邻矩阵&#xff0c;表示同一省份内各个城市相互之间邻近关系。如果同一省份下两个城市相邻&#xff0c;矩阵中对应的矩阵值为1&#xff0c;否则&#xff0c;矩阵值为0 一、数据介绍 数据名称&#xff1a;地级市-地理相邻矩阵 数据范围&#xff1a;地…

leetcode刷题(javaScript)——二叉树、平衡二叉树相关场景题总结

二叉树的知识点很多&#xff0c;在算法刷题中需要有想象力的数据结构了。主要是用链表存储&#xff0c;没有数组更容易理解。在刷二叉树相关算法时&#xff0c;需要注意以下几点&#xff1a; 掌握二叉树的基本概念&#xff1a;了解二叉树的基本概念&#xff0c;包括二叉树的定义…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…