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=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、本地电脑待测试图片的文件目录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【linuxC语言】dup、dup2函数

文章目录 前言一、dup函数二、dup2函数三、将标准输出重定向到文件总结 前言 在Linux环境下,dup、dup2以及原子操作都是用于文件描述符管理和处理的重要工具。这些功能提供了对文件描述符进行复制和原子操作的能力,使得在多线程或多进程环境中更加安全和…

Randoop 报错 Cannot find the Java compiler 的解决方案

编写测试用例是一项困难且耗时的工作,但同时又是好的软件工程的重要部分。Randoop是一个随机测试的测试用例生成的工具,能够自动的为Java代码中的类生成单元测试。 官网链接: https://randoop.github.io/randoop/manual/index.html。 正确的…

新手小白剪辑视频知识点:视频分辨率和位深度,有什么区别?

新手小白需要了解的视频剪辑知识点,什么是视频分辨率尺寸(文件大小)和位深度? 分辨率尺寸/文件大小 常见的视频分辨率是高清和 4K。高清素材的屏幕像素(宽度 x 高度)测量值通常为 1920 x 1080,而 4K 素材是其四倍&am…

【Linux通识】之端口到底是个什么?

端口的本质是计算机上的一小块内存! 端口的概念 在Linux系统(以及其他所有支持网络通信的操作系统)中,端口(Port)可以理解为计算机在网络上与外界沟通的虚拟通道或门牌号码。当我们谈论网络通信时&#xf…

【教程】Github环境配置新手指南(超详细)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 文章目录 一、Github初始设置(一)登入Github(二)新建仓库 二、本地Git配置&am…

在Leaflet中使用Turf.js生成范围多边形的两种实现方式

目录 前言 一、场景需求 1、Leaflet.js的不足 2、Turf.js 二、原始数据展示 1、点位数据展示 2、定义样式 3、定位数据初始化 三、Turfjs中bbox生成 1、官网讲解 2、轨迹bbox生成 四、Turfjs生成外包多边形 1、官网例子 2、凸多边形生成 总结 前言 在一些共享出…

机器学习--循环神经网路(RNN)2

在这篇文章中,我们介绍一下其他的RNN。 一.深层RNN 循环神经网络的架构是可以任意设计的,之前提到的 RNN 只有一个隐藏层,但 RNN 也可以是深层的。比如把 xt 丢进去之后,它可以通过一个隐藏层,再通过第二个隐藏层&am…

三  超级数据查看器   讲解稿    主界面和系统功能介绍

三 超级数据查看器 讲解稿 主界面和系统功能介绍 APP百度下载地址 下载地址4 ​讲解稿全文: 大家好。 今天我们讲解一下,超级数据查看器主界面。 首先,我们打开超级数据查看器。 打开之后,进入的第一个界面就是主界面。这个页面由三…

网络编程---网络编程入门、UDP通信程序、TCP通信程序

1.网络编程入门 1.网络编程概述 网络编程: 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据传输 计算机网络: 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来&#…

docker安装ES、LogStash、Kibana

文章目录 一、安装Elasticsearch1. 安装Elasticsearch2. 安装IK分词器3. elasticsearch-head 监控的插件4. 配置跨域 二、安装LogStash三、安装kibana四、SpringBoot集成LogStash,将日志输出到ES中五、 启动项目,监控项目运行 提示:以下是本篇…

ABAP接口部分-C#调用RFC

目录 ABAP接口部分-C#调用RFC创建表结构创建RFC函数创建C#项目引用SAP .Net Connector包绘制窗口的控件最终布局代码 项目配置报错SAP.Middleware.Connector.RfcDestinationManager报错SAP.Middleware.Connector.RfcLoginexception报错SAP.Middleware.Connector.RfcInvalidStat…

Docker基础教程 - 8 镜像仓库

更好的阅读体验:点这里 ( www.doubibiji.com ) 8 镜像仓库 在安装 Docker 的时候,默认使用的是 DockerHub,后来为了提升速度,配置的镜像仓库是使用阿里云的镜像仓库,拉取的是别人制作的镜像&…

第五十三回 入云龙斗法破高廉 黑旋风下井救柴进-AI训练数据处理和读取

罗真人教了公孙胜五雷天罡正法,并让他记住“逢幽而止,遇汴而环”八个字。三人辞别了罗真人,戴宗先回去报信,李逵和公孙胜结伴而行。 走了三天,来到了武冈镇,李逵碰到一个铁匠,叫金钱豹子汤隆&a…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改,今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

突然发现一个很炸裂的平台!

平时小孟会开发很多的项目,很多项目不仅开发的功能比较齐全,而且效果比较炸裂。 今天给大家介绍一个我常用的平台,因含低代码平台,开发相当的快。 1,什么是低代码 低代码包括两种,一种低代码,…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

IPsec

在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 最后测试&#xff1a;

xpath和lxml类库

数据提取之xpath 学习目标 了解 html和xml的区别掌握 xpath获取节点属性的方法掌握 xpath获取文本的方法掌握 xpath查找特定节点的方法 1. 为什么要学习xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器&#xff0c;我们可以利用XPath&#xff0c;来快速的定位特定元…

linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— Samba 是一个开源软件套件&#xff0c;可为 SMB/CIFS 客户端&#xff08;包括 Windows&#xff09;提供文件…