分享好友 最新动态首页 最新动态分类 切换频道
Java 通过图片 查找另一个软件中 图片的位置 java图片搜索引擎
2024-12-26 18:50


Java 通过图片 查找另一个软件中 图片的位置 java图片搜索引擎


文章目录

  • 一、简介
  • 1. Milvus介绍
  • 2. 特征向量是什么?
  • 3. 术语表
  • 4. 为什么选择使用 Milvus?
  • 二、下载&安装
  • 1. 安装前提
  • 2. 安装
  • 1. 单机版
  • 2. 分布式版
  • 3. 离线安装
  • 三、版本管理
  • 四、前期准备
  • 五、POM引入
  • 六、MilvusServiceClient
  • 七、常用方法
  • 常量类
  • 1. hasCollection
  • 2. createCollection
  • 3. createPartition
  • 4. createIndex
  • 5. insert
  • 6. loadCollection
  • 7. loadPartitions
  • 8. releaseCollection
  • 9. releasePartition
  • 10. deleteData
  • 11、search


文档地址

Milvus 于 2019 年开源,主要用于存储、索引和管理通过深度神经网络和机器学习模型产生的海量向量数据。

Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引。与传统关系型数据库不同,Milvus 主要用于自下而上地处理非结构化数据向量。非结构化数据没有统一的预定义模型,因此可以转化为向量。

随着互联网不断发展,电子邮件、论文、物联网传感数据、社交媒体照片、蛋白质分子结构等非结构化数据已经变得越来越普遍。如果想要使用计算机来处理这些数据,需要使用 embedding 技术将这些数据转化为向量。随后,Milvus 会存储这些向量,并为其建立索引。Milvus 能够根据两个向量之间的距离来分析他们的相关性。如果两个向量十分相似,这说明向量所代表的源数据也十分相似。

向量又称为 ,是指由embedding技术从离散变量(如xxx等各种非结构化数据)转变而来的连续向量。在数学表示上,向量是一个由浮点数或者二值型数据组成的 n 维数组。通过现代的向量转化技术,比如各种人工智能(AI)或者机器学习(ML)模型,可以将非结构化数据抽象为 n 维特征向量空间的向量。这样就可以采用最近邻算法(ANN)计算非结构化数据之间的相似度。

  • Collection
    包含一组 entity,可以等价于关系型数据库系统(RDBMS)中的表。
  • Entity
    包含一组 field。field 与实际对象相对应。field 可以是代表对象属性的结构化数据,也可以是代表对象特征的向量。primary key 是用于指代一个 entity 的唯一值。

你可以自定义 primary key,否则 Milvus 将会自动生成 primary key。请注意,目前 Milvus 不支持 primary key 去重,因此有可能在一个 collection 内出现 primary key 相同的 entity。

  • Field
    Entity 的组成部分。Field 可以是结构化数据,例如数字和字符串,也可以是向量。

Milvus 2.0 现已支持标量字段过滤。

  • Segment

Milvus 在数据插入时通过合并数据自动创建的数据文件。一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,Milvus 会搜索每个 segment,并返回合并后的结果。

  • Sharding
    Shard 是指将数据写入操作分散到不同节点上,使 Milvus 能充分利用集群的并行计算能力进行写入。默认情况下单个 collection 包含 2 个分片(shard)。目前 Milvus 采用基于主键哈希的分片方式,未来将支持随机分片、自定义分片等更加灵活的分片方式。

Partition 的意义在于通过划定分区减少数据读取,而shard 的意义在于多台机器上并行写入操作。

  • Partition
    把 collection 中的数据根据一定规则在物理存储上分成多个部分。这种对 collection 数据的划分就叫分区(partitioning)。每个 partition 可包含多个segment。
  • 归一化
    归一化指的是通过数学变换将向量的模长变为 1 的过程。如需使用点积计算向量相似度,则必须对向量作归一化处理。处理后点积与余弦相似度等价。
  • 索引
    索引基于原始数据构建,可以提高对 collection 数据搜索的速度。Milvus 支持多种索引类型。
  • 向量
    一种类型的 field,代表对象的特征。非结构化数据可以通过各种 AI 模型和 embedding 技术转化为向量。

目前,一个实体最多只能包含一个向量。

  • 高性能:性能高超,可对海量数据集进行向量相似度检索。
  • 高可用、高可靠:Milvus 支持在云上扩展,其容灾能力能够保证服务高可用。
  • 混合查询:Milvus 支持在向量相似度检索过程中进行标量字段过滤,实现混合查询。
  • 开发者友好:支持多语言、多工具的 Milvus 生态系统。
  • Milvus 在构建索引和查询向量时依赖 CPU 对 SIMD (Single Instruction Multiple Data) 扩展指令集合的支持。请确保运行 Milvus 的 CPU 至少支持以下一种 SIMD 指令集合:
  • SSE4.2
  • AVX
  • AVX2
  • AVX512

使用 lscpu 命令以检查 CPU 是否支持特定 SIMD 指令集合:

  • 检查 Docker 及 Docker Compose 版本

因为官网推荐使用docker-compose安装运行,所以需要检查版本是否合适

  • 运行 确认 Docker 版本。建议使用 19.03 或以上版本。
  • 运行 确认 Docker Compose 版本。建议使用 1.25.1 或以上版本。

1. 单机版

官网教程

2. 分布式版

官网教程

3. 离线安装

因为我们生产环境是在专网,无法连接到互联网,所以需要离线安装

离线安装说白了就是在有网的机器上把需要的docker镜像下载下来,然后再把镜像导出,再上传到专网服务器

  • 根据docker-compose.yml里面内容,把用到的镜像导出
  • 下载到本地

下载下来后根据自己的方式把镜像包上传到专网服务器
我们是开发机器可以同时连到两个网,所以通过FTP再上传到专网服务器就好了

  • 导入镜像
  • 导入docker-compose.yml

把官网教程里下载的docker-compose.yml复制过来就行了

  • 启动
  • milvus-sdk-java版本
  • SpringBoot版本

因为这里用的milvus版本是2.0.0的,但是Maven中央仓库中还没有这个版本的依赖,所以需要到GitHub上面把2.0版本的java-sdk下载到本地,然后编译到本地仓库

地址: https://github.com/milvus-io/milvus-sdk-java

下载下来后会有很多类找不到,这时候只需要clean install一下,有些类是编译之后才会有

如果嫌麻烦可以下我编译好了的:https://www.aliyundrive.com/s/3HZQ1VYaqKB·

需要跟milvus交互都需要调用MilvusServiceClient,我这里的做法是把它定义成一个Bean,需要用到的地方依赖注入

有了MilvusServiceClient后就可以为所欲为了!
下面介绍几个常用方法

用来存放这个集合需用到的参数

判断集合是否已经存在

返回值boolean类型,有(true)/无(false)

创建集合

创建分区 ->

我在这里的做法是先定义了分区总数, 然后循环建立分区,在查询或者插入的时候根据里面的某个值进行取模,分到对应的分区里面去

创建索引

调用 create_index() 方法后,Milvus 会为后续新增向量自动构建索引的任务。每当新增数据量达到一个完整的 segment 时即触发这一任务,Milvus 为新插入的向量构建索引。

新增向量的索引文件与前期构建的索引文件相互独立。

至于选择什么样的索引,见官方文档

数据插入

这里就我自己用的插入代码,因为是按组织ID分区的,所以每个组织分一个组,然后再批量插入,其中的向量值是通过虹软人脸识别SDK计算出来的特征值转换成List,
因为虹软特征值本身就是归一化处理了的,只需要把字节转Float就行了

把集合加载到内存中(milvus查询前必须把数据加载到内存中)

加载分区数据

释放集合(从内存中释放)

释放分区

删除数据

搜索

搜索是支持多个向量值一起搜的,但是我这里做的是搜索相似度最高的那一个,所以我只需要一个返回数据(返回数据是已经按相似度排序了的)



最新文章
视频压缩在线工具,推荐6个实用工具
有时候视频文件体积太大不仅会占用设备的存储空间,降低设备的运行效率,在网络状况不佳的情况下,还会导致视频播放卡顿,十分影响用户的视频观看体验。对于这种情况,很多用户会选择压缩视频大小。那么有哪些比较好用的视频压缩在线工具或
西安市建设工程信息网平台/福州seo技巧培训
STL中,要删除容器内的一个元素,其方法会随着容器类型的不同而不同。  例如,对于STL容器c,c包含int类型的元素,现在需要删除c中等于2014的元素。 序列容器即具有连续内存的容器,如vector,
SEO关键词首页排名
SEO关键词首页排名 为什么选择我们的百度关键词排名优化服务?精准分析,量身定制优化策略我们深入分析你的行业和目标受众,帮助你选择最合适的关键词,并制定个性化的优化方案,确保你的网页能够排名靠前,吸引更多的潜在客户。高效优化,
搜索引擎营销文案写作技巧
搜索引擎营销文案写作技巧  我们一直提倡用SEO 的思想去写文章,即合理的将关键词分布在文章中。下面是YJBYS小编整理的搜索引擎营销文案写作技巧,希望对你有帮助!  1.标题醒目  标题是搜索引擎营销文案写作至关重要的地方,必须简单
国内可以24小时挂机的云电脑有哪些?
随着云计算技术的发展,越来越多的人需要使用云计算机。云计算机可以帮助我们随时随地访问桌面环境和应用程序,而不必担心数据丢失和缺乏计算能力。本文将为大家介绍几款可以24小时挂机的国产云电脑主机。1.阿里云阿里云是中国最大的云计算
澄迈爱采购代运营费用
百度爱采购服务商浅谈:上传产品图片需要注意的地方 百度爱采购服务商浅谈:上传产品图片需要注意的地方,不同的商品质量影响着商品的排序程度,主要因素有类目优化程度、图片质量、参数丰富度、时间、地域等,下面来了解下百度爱采购上传
解决方案:如何确保网站被百度收录并提升网站内容质量与优化技术
确保网站被百度收录,对网站的进步极为关键。这表示网站能够吸引更多访客,获得更广泛的关注。网站内容质量网站内容必须保证高水准和原创性。若是内容只是简单的抄袭和拼凑,百度是不会给予关注的。内容要有实际价值,比如提供实用的信息。
数学老师职称工作总结
总结是对某一阶段的工作、学习或思想中的经验或情况进行分析研究的书面材料,它是增长才干的一种好办法,是时候写一份总结了。如何把总结做到重点突出呢?下面是小编收集整理的数学老师职称工作总结,仅供参考,希望能够帮助到大家。在教学
相关文章
推荐文章
发表评论
0评